Lab 8.1 - Configuration d'Ingress NGINX
Objectifs du Lab
À la fin de ce lab, vous serez capable de:
- Installer un Ingress Controller NGINX.
- Comprendre le rôle d'un Ingress Controller.
- Créer une ressource Ingress de base.
- Exposer une application via Ingress.
- Tester l'accès à l'application via Ingress.
Durée Estimée
45-60 minutes
Prérequis
- kubectl installé et configuré.
- Cluster Kubernetes local fonctionnel (minikube ou kind).
- Connaissances sur Ingress (Chapitre 8.1 et 8.2).
Partie 1: Installation de l'Ingress Controller NGINX
Étape 1.1: Activer l'Ingress sur Minikube
Si vous utilisez minikube, activez le plugin Ingress:
minikube addons enable ingress
Vérifiez que l'Ingress Controller est installé:
kubectl get pods -n ingress-nginx
Vous devriez voir des Pods de l'Ingress Controller NGINX.
Étape 1.2: Installation Manuelle (Alternative)
Si vous n'utilisez pas minikube ou pour une installation manuelle, utilisez:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml
Attendez que les Pods soient prêts:
kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
Partie 2: Déploiement d'une Application de Test
Avant de configurer Ingress, déployons une application simple.
Étape 2.1: Créer un Deployment
Créez un fichier app-deployment.yaml:
# app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 2
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
Appliquez le Deployment:
kubectl apply -f app-deployment.yaml
Étape 2.2: Créer un Service
Créez un fichier app-service.yaml:
# app-service.yaml
apiVersion: v1
kind: Service
metadata:
name: web-app-service
spec:
selector:
app: web-app
ports:
- port: 80
targetPort: 80
type: ClusterIP
Appliquez le Service:
kubectl apply -f app-service.yaml
Vérifiez que le Service est créé:
kubectl get svc web-app-service
Partie 3: Création d'une Ressource Ingress
Étape 3.1: Créer l'Ingress
Créez un fichier ingress-basic.yaml:
# ingress-basic.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-app-ingress
spec:
ingressClassName: nginx # Spécifie l'Ingress Controller à utiliser
rules:
- host: webapp.local # Nom d'hôte (pour local, utilisez ce nom ou modifiez /etc/hosts)
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app-service
port:
number: 80
Explication:
ingressClassName: nginx: Indique d'utiliser l'Ingress Controller NGINX.host: webapp.local: Le nom d'hôte pour accéder à l'application.path: /: Tous les chemins commençant par/.backend: Le Service backend qui gère le trafic.
Appliquez l'Ingress:
kubectl apply -f ingress-basic.yaml
Étape 3.2: Vérifier l'Ingress
Vérifiez que l'Ingress est créé:
kubectl get ingress
Vérifiez les détails:
kubectl describe ingress web-app-ingress
Vous devriez voir l'adresse IP de l'Ingress Controller (sur minikube, cela peut prendre quelques secondes).
Partie 4: Accès à l'Application
Étape 4.1: Obtenir l'Adresse IP de l'Ingress
Sur minikube, obtenez l'IP:
minikube ip
Ou vérifiez l'Ingress:
kubectl get ingress web-app-ingress
Étape 4.2: Configurer le Hostname (Local)
Pour un cluster local, vous devez ajouter l'entrée dans /etc/hosts (Linux/Mac) ou C:\Windows\System32\drivers\etc\hosts (Windows):
# Sur Linux/Mac, éditez /etc/hosts
sudo nano /etc/hosts
# Ajoutez cette ligne (remplacez <INGRESS_IP> par l'IP de l'Ingress):
<INGRESS_IP> webapp.local
Sur Windows, éditez C:\Windows\System32\drivers\etc\hosts avec les permissions administrateur.
Étape 4.3: Tester l'Accès
Testez l'accès à l'application:
curl http://webapp.local
Ou ouvrez http://webapp.local dans votre navigateur.
Vous devriez voir la page par défaut de NGINX.
Étape 4.4: Alternative avec Port-Forward (Sans Modifier /etc/hosts)
Si vous ne voulez pas modifier /etc/hosts, utilisez port-forward vers l'Ingress Controller:
# Trouvez le nom du Pod de l'Ingress Controller
INGRESS_POD=$(kubectl get pods -n ingress-nginx -l app.kubernetes.io/component=controller -o jsonpath='{.items[0].metadata.name}')
# Port-forward
kubectl port-forward -n ingress-nginx $INGRESS_POD 8080:80
Puis testez:
curl -H "Host: webapp.local" http://localhost:8080
Partie 5: Vérification des Logs
Vérifiez les logs de l'Ingress Controller pour voir les requêtes:
kubectl logs -n ingress-nginx -l app.kubernetes.io/component=controller --tail=20
Vous devriez voir les requêtes HTTP entrantes.
Partie 6: Nettoyage
Supprimez les ressources créées:
kubectl delete ingress web-app-ingress
kubectl delete -f app-service.yaml
kubectl delete -f app-deployment.yaml
Pour désactiver l'Ingress sur minikube:
minikube addons disable ingress
Résumé du Lab
Dans ce lab, vous avez installé et configuré un Ingress Controller NGINX, créé une ressource Ingress de base, et exposé une application via Ingress. Vous avez appris à accéder à l'application via le nom d'hôte configuré.
Prochaines Étapes
Le prochain lab vous montrera comment configurer le routage basé sur les chemins (Path-based routing) pour diriger le trafic vers différentes applications.
Lab 8.2: Path-based Routing
Lab créé le: Décembre 2024