Aide-mémoire CKAD

exemple YAML Service k8s

Un Service équilibre vers les Pods dont les labels matchent selector. port = Service, targetPort = conteneur.

Une balise fixe ; les appareils s’y relaient sur le même anneau. Une balise fixe ; les appareils s’y relaient sur le même anneau.
Créer
kubectl expose deploy/web --name=web --port=80 --target-port=80
kubectl expose po/web --name=web --port=80 --target-port=80 --type=NodePort
ClusterIP
apiVersion: v1
kind: Service
metadata:
  name: web
  namespace: default
spec:
  type: ClusterIP
  selector:
    app: web
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80
NodePort
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  type: NodePort
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30080
Headless
spec:
  clusterIP: None
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 80
Inspecter
kubectl get svc,ep web
kubectl describe svc web

Champs

selector
Matche les labels du Pod (template.metadata.labels). Pas le nom du Deployment.
port
Le port du Service. Les clients utilisent celui-là.
targetPort
Le port du conteneur. Souvent le même numéro que port. Souvent pas.
nodePort
Seulement si type NodePort ou LoadBalancer.
clusterIP
None = headless. Le DNS renvoie les IP des Pods.
kubectl expose
--port est le Service. --target-port est le conteneur.

Pièges

  • selector matche les labels du Pod (Deployment : template.metadata.labels), pas le nom du Deployment.
  • port = Service. targetPort = conteneur. nodePort seulement sur NodePort / LoadBalancer.
  • Le type par défaut est ClusterIP. clusterIP: None = headless — le DNS renvoie les IP des Pods.

Doc officielle Services

S’entraîner sur un cluster réel →