Introduction
Dans Kubernetes, les Pods sont éphémères et peuvent être terminés et recréés à tout moment. Cela pose un défi en matière de mise en réseau, car il est difficile de se connecter directement à un Pod. Pour résoudre ce problème, Kubernetes propose une abstraction de plus haut niveau appelée Service. Un Service fournit une adresse IP stable et un nom DNS pour un ensemble de Pods, permettant à d'autres composants de se connecter facilement à eux. Dans ce laboratoire (LabEx), vous apprendrez à mettre en réseau des Pods avec des Services dans Kubernetes.
Démarrer le cluster Minikube
Avant de créer des ressources, vous avez besoin d'un cluster Kubernetes en cours d'exécution. Minikube est un environnement Kubernetes léger qui s'exécute sur votre machine locale.
Accédez à votre répertoire de travail :
Ouvrez le terminal et accédez au dossier de projet par défaut :
cd /home/labex/projectDémarrez Minikube :
Démarrez Minikube pour initialiser un cluster Kubernetes :
minikube start- Cette commande configure un cluster Kubernetes mono - noeud sur votre machine locale.
- Minikube peut prendre quelques minutes à démarrer en fonction des performances de votre système.
Vérifiez que Minikube est en cours d'exécution :
Vérifiez l'état du cluster Minikube :
minikube status- Recherchez des composants tels que
kubeletetapiserverlistés commeRunning(en cours d'exécution). - Si le cluster n'est pas en cours d'exécution, relancez la commande
minikube start.
- Recherchez des composants tels que
Si vous rencontrez des problèmes lors du démarrage de Minikube, utilisez minikube delete pour réinitialiser l'environnement si nécessaire.
Créer un Pod
La première étape consiste à créer un simple Pod. Créez un fichier nommé /home/labex/project/myapp-pod.yaml avec le contenu suivant :
apiVersion: v1
kind: Pod
metadata:
name: my-pod-1
labels:
app: nginx
spec:
containers:
- name: my-container
image: nginx
Enregistrez le fichier et créez le Pod en exécutant la commande suivante :
kubectl apply -f /home/labex/project/myapp-pod.yaml
Cela créera un Pod nommé my-pod-1 avec un seul conteneur exécutant l'image Nginx.
Créer un Service
La deuxième étape consiste à créer un Service (service) qui cible le Pod que vous avez créé à l'étape précédente. Créez un fichier nommé /home/labex/project/service.yaml avec le contenu suivant :
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: nginx
ports:
- name: http
port: 80
targetPort: 80
Enregistrez le fichier et créez le Service en exécutant la commande suivante :
kubectl apply -f /home/labex/project/service.yaml
Cela créera un Service nommé my-service qui cible les Pods avec l'étiquette (label) app=nginx et expose le port 80.
Tester le Service
La troisième étape consiste à tester le Service en y accédant depuis un autre Pod. Créez un fichier nommé /home/labex/project/test-pod-1.yaml avec le contenu suivant :
apiVersion: v1
kind: Pod
metadata:
name: test-pod-1
spec:
containers:
- name: my-container
image: nginx
command:
- sleep
- "3600"
Enregistrez le fichier et créez le Pod de test en exécutant la commande suivante :
kubectl apply -f /home/labex/project/test-pod-1.yaml
Cela créera un Pod nommé test-pod-1 avec un seul conteneur exécutant l'image Nginx.
Ensuite, vous allez exécuter une commande dans le conteneur et utiliser curl pour accéder au Service. Exécutez la commande suivante pour accéder au conteneur :
kubectl exec -it test-pod-1 -- sh
Cela ouvrira un shell à l'intérieur du conteneur. À partir du shell, exécutez la commande suivante pour accéder au Service :
curl http://my-service
Cela renverra la page par défaut de Nginx, indiquant que le Service fonctionne correctement.
Mettre à jour le Service
La quatrième étape consiste à mettre à jour le Service pour cibler un autre ensemble de Pods. Mettez à jour le champ selector dans le fichier /home/labex/project/service.yaml comme suit :
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: busybox
ports:
- name: http
port: 80
targetPort: 8
Enregistrez le fichier et mettez à jour le Service en exécutant la commande suivante :
kubectl apply -f service.yaml
Cela mettra à jour le Service pour cibler les Pods avec l'étiquette (label) app=busybox.
Tester le service mis à jour
La cinquième étape consiste à tester le Service mis à jour en y accédant depuis un autre Pod. Créez un nouveau Pod de test avec la commande suivante :
kubectl run my-pod-2 --image=busybox --restart=Never -- sleep 3600
Ceci créera un nouveau Pod nommé my-pod-2 avec un seul conteneur exécutant l'image Busybox.
Exécutez-vous dans le conteneur et utilisez curl pour accéder au Service comme vous l'avez fait à l'étape 3. Exécutez la commande suivante pour vous exécuter dans le conteneur :
kubectl exec -it my-pod-2 -- sh
Cette fois, vous devriez obtenir une erreur indiquant que la connexion a été refusée.
Cela est dû au fait que le Service cible désormais un ensemble de Pods différent de ceux sur lesquels le Pod de test est en cours d'exécution. Pour corriger cela, vous pouvez mettre à jour l'étiquette du Pod pour qu'elle corresponde au nouveau sélecteur dans le Service.
Exécutez la commande suivante pour mettre à jour l'étiquette du Pod de test :
kubectl label pod my-pod-2 app=busybox
Ceci ajoutera l'étiquette app=busybox au Pod de test.
Maintenant, si vous exécutez à nouveau la commande curl, vous devriez obtenir la page Nginx par défaut, indiquant que le Service fonctionne correctement.
Résumé
Dans ce laboratoire (lab), vous avez appris à connecter des Pods avec des Services dans Kubernetes. Vous avez créé un simple Pod exécutant l'image Nginx, créé un Service pour cibler le Pod et testé le Service en y accédant depuis un autre Pod. Vous avez également appris à mettre à jour le Service pour cibler un autre ensemble de Pods et à mettre à jour l'étiquette (label) d'un Pod pour qu'elle corresponde au nouveau sélecteur (selector) dans le Service. Les Services sont un composant essentiel du réseau dans Kubernetes et vous permettent de vous connecter à des Pods de manière fiable et évolutive.


