Kubernetes - Services
Alasta 16 Août 2024 kubernetes kubernetes service
Description : Kubernetes, les services pour exposer les pods
Kubernetes - Les Services
Les services dans Kubernetes servent à exposer les applications/pods, on n’adresse pas un pod directement car par définition un pod est ephémère. C’est le service qui est adressé et c’est ce dernier qui s’interface avec les pods.
Types de Services
Les différents types de Services:
- NodePort
- ClusterIP
- LoadBalancer
- ExternalName
- Headless
Les principaux types
Ici, on voit les principaux.
Service NodePort
C’est le plus facile à implémenter pour utilisation dans un homelab, il expose un port sur l’IP du Node.
Le NodePort utilise un port dynamique compris entre 30000 et 32767.
Manifest
apiVersion: v1
kind: Service
metadata:
name: service-nodeport
spec:
type: NodePort
selector:
app: blue
ports:
- port: 5000
targetPort: 5000
nodePort: 30001
name: my-port
Le service matche les pod avec le label app=blue.
k get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service-nodeport NodePort 10.96.94.185 <none> 5000:30001/TCP 2d22h app=blue
Serice ClusterIP
C’est le service par défaut qui est utilisé quand il n’est pas précisé.
Ce dernier n’est accessible qu’à l’intérieure du cluster. &
Manifest
apiVersion: v1
kind: Service
metadata:
name: service-clusterip
spec:
type: ClusterIP
selector:
app: red
ports:
- port: 5000
targetPort: 5000
name: my-port
k get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service-clusterip ClusterIP 10.102.183.102 <none> 5000/TCP 2d22h app=red
Service ExternalName
Ce service ne matche pas de label car il n’adresse pas les pods, il permet de joindre une ressource hors du cluster.
Manifest
apiVersion: v1
kind: Service
metadata:
name: service-externalname
spec:
type: ExternalName
externalName: www.cisco.com
k get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service-externalname ExternalName <none> www.cisco.com <none> 3s
Service LoadBalancer
C’est un service qui est disponible principalement chez les services Cloud, il permet de demander au service Cloud de lancer un loadbalancer.
Service Headless
Ce dernier est un peu particulier, il se base sur le service ClusterIP en mettant le clusterIP à None.
Cas particulier, il n’y a pas de “loadbalancing” ni d’IP au service, mais il fournit la liste des enregistrements IP des FQDN des pods, ils ne peuvent donc être accessible qu’à travers le DNS.
Manifest
apiVersion: v1
kind: Service
metadata:
name: service-headless
spec:
clusterIP: None
selector:
app: yellow
ports:
- protocol: TCP
port: 80
targetPort: 9376
k get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service-headless ClusterIP None <none> 80/TCP 14s app=yellow