Aller au contenu principal

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