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.

Kubernetes Services

Types de Services

Les différents types de Services:

  • NodePort
  • ClusterIP
  • LoadBalancer
  • ExternalName
  • Headless

Les principaux types

Kubernetes Services 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.
Kubernetes Services NodePort

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. & Kubernetes Services ClusterIP

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