Exercice 03 : Exposer des applications avec les Services
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Créer un Service
ClusterIPpour la communication interne - ✅ Créer un Service
NodePortpour l'accès externe - ✅ Faire correspondre les selectors du Service aux labels du Pod
- ✅ Utiliser
minikube servicepour accéder à une application
Durée estimée : 30 minutes
Difficulté : ⭐⭐☆☆☆ (Débutant+)
Prérequis : minikube démarré, exercices 01-02 terminés
📖 Contexte
Un Pod a une IP éphémère qui change à chaque redémarrage. Le Service fournit une adresse stable et un mécanisme de load-balancing pour accéder aux pods. Le selector est la colle entre un Service et ses pods cibles.
📋 Énoncé
Vous allez déployer un pod nginx, l'exposer d'abord en ClusterIP (accès interne uniquement), puis en NodePort (accès depuis l'hôte), et vérifier la connectivité dans les deux cas.
Résultat attendu :
- Un service
nginx-clusteripde type ClusterIP - Un service
nginx-nodeportde type NodePort accessible via minikube
🧭 Déroulement de l'exercice
Tâche 1 : Déployer le pod cible
Appliquez le manifest nginx-labeled.yaml (fourni en solution) qui crée un pod avec le label app: nginx.
Indice : Le label sur le pod DOIT correspondre exactement au
selectordu Service.
Vérification : kubectl get pods --show-labels affiche le label app=nginx.
Tâche 2 : Créer un Service ClusterIP
Créez un Service de type ClusterIP qui cible les pods avec app: nginx sur le port 80.
Indice :
spec.selectordoit correspondre aux labels du pod.portest le port du service,targetPortest le port du conteneur.
Vérification : kubectl get svc nginx-clusterip affiche une CLUSTER-IP dans la plage 10.x.x.x.
Tâche 3 : Tester le ClusterIP depuis l'intérieur du cluster
Lancez un pod temporaire busybox et testez la connectivité vers le ClusterIP via le DNS Kubernetes.
Indice :
kubectl run test --image=busybox --rm -it --restart=Never -- wget -O- nginx-clusterip
Vérification : La page HTML nginx s'affiche dans le terminal.
Tâche 4 : Créer un Service NodePort
Créez un Service de type NodePort avec un nodePort fixe à 30080.
Indice :
nodePortest le port ouvert sur chaque noeud du cluster. Il doit être dans la plage30000-32767.
Vérification : kubectl get svc nginx-nodeport affiche 80:30080/TCP dans la colonne PORT(S).
Tâche 5 : Accéder au service depuis l'hôte
Utilisez minikube service nginx-nodeport --url pour obtenir l'URL d'accès, puis testez avec curl.
Indice : minikube crée un tunnel réseau entre votre machine et le noeud virtuel.
Vérification : curl $(minikube service nginx-nodeport --url) retourne la page nginx.
🗂️ Mini-Projet : Stack web avec ClusterIP interne
Déployez un pod backend (httpd) accessible uniquement en interne via ClusterIP, et un pod frontend (nginx) exposé en NodePort. Le frontend doit pouvoir appeler le backend via le DNS Kubernetes.
Checkpoints :
kubectl get pods --show-labelsaffiche les labels corrects pour les deux podskubectl get svcliste les deux services avec les bons types- Depuis un pod temporaire,
wget -O- backend-svcretourne la page Apache minikube service frontend-svc --urlfournit une URL accessible depuis l'hôtekubectl describe svc backend-svcmontre lesEndpointspointant vers l'IP du pod backend