Ceci est une ancienne révision du document !
Les services permettent de publier l'accès aux Pods au sein du cluster ou à l'extérieur. Les conteneurs au sein d'un Pod partagent la même configuration réseau et sont donc accessible par la même IP interne au cluster.
Il y a plusieurs possibilité selon ce que l'on souhaite faire.
C'est le mode par défaut de Kubernetes lorsque l'on crée un service. Il permet d'exposer un port au sein du cluster uniquement.
Remarque L'IP n'est pas publiée en dehors du cluster. L'IP allouée ne sera accessible que par les nodes du cluster.
Ci-dessous un fichier YAML pour démarrer un Pod nginx et son service :
vim pod_nginx_service.yml
Contenu :
apiVersion: v1 kind: Pod metadata: name: nginx labels: app: mywebapp spec: containers: - name: nginx image: nginx:stable ports: - containerPort: 80 # Ci-dessous on affecte un nom au port #name: http-web-svc --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: # ClusterIP étant le mode par défaut, il n'est pas obligé de définir le type pour le créer. #type: ClusterIP selector: app: mywebapp ports: - name: mywebport protocol: TCP port: 8080 targetPort: 80 # Si un nom a été donné au port du conteneur on peut cibler le port par son nom. #targetPort: http-web-svc
Explications, nous avons un YAML pour créer 2 objets :
Création du pod et du service :
kubectl apply -f pod_nginx_service.yml
Listons le pods créé :
kubectl get pods
Résultat attendu :
NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 21s
Listons les services :
kubectl get services # Même commande en plus court #kubectl get svc
l'IP de cluster 10.110.183.49 a été affecté au service :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 8d nginx-service ClusterIP 10.110.183.49 <none> 8080/TCP 27s
Pour tester l'accès au nginx :
curl http://10.110.183.49:8080
Ci-dessous, nous allons lister les points de terminsons :
kubectl get endpoints # Version courte #kubectl get ep
Ce que nous constatons, c'est le service nginx-service cible le pod qui à l'IP 192.168.1.105 sur le port 80 :
NAME ENDPOINTS AGE kubernetes 10.0.6.8:6443 8d nginx-service 192.168.1.105:80 37s
Déployons un autre pod qui sera accessible par le même service :
vim pod_nginx2.yml
Contenu :
apiVersion: v1 kind: Pod metadata: name: nginx2 labels: app: mywebapp spec: containers: - name: nginx image: nginx:stable ports: - containerPort: 80
Lancement du pod :
kubectl apply -f pod_nginx2.yml
Vérification des endpoints :
kubectl get endpoints
Ce que nous pouvons voir c'est le service cible nginx-service 2 pods sur le port 80 :
NAME ENDPOINTS AGE kubernetes 10.0.6.8:6443 8d nginx-service 192.168.1.105:80,192.168.1.106:80 7m37s
La requête ci-dessous sera alternativement redirigée vers 192.168.1.105:80 et 192.168.1.106:80 :
curl http://10.110.183.49:8080