Présentation des bases de l'ingress et exemple simple de fichier YAML pour l'ingress
Dans cette étape, vous allez apprendre ce qu'est l'ingress Kubernetes, un moyen puissant de gérer l'accès externe aux services dans un cluster Kubernetes.
Qu'est-ce que l'ingress ?
L'ingress est un objet API qui gère l'accès externe aux services dans un cluster Kubernetes, généralement via HTTP. L'ingress offre les fonctionnalités suivantes :
- Équilibrage de charge : Répartit le trafic entre plusieurs services back-end.
- Terminaison SSL/TLS : Gère les connexions sécurisées.
- Hébergement virtuel basé sur le nom : Route les requêtes vers différents services en fonction du nom d'hôte.
- Routage basé sur le chemin : Route les requêtes vers différents services en fonction du chemin de l'URL.
L'ingress se compose de deux composants :
- Ressource Ingress : Un objet API Kubernetes qui définit les règles de routage.
- Contrôleur Ingress : L'implémentation qui applique les règles définies dans la ressource Ingress.
Remarque : Ce laboratoire ne propose qu'une introduction de base à l'ingress. Dans les environnements de production, les configurations d'ingress peuvent être beaucoup plus complexes, notamment avec des routages avancés, de l'authentification, des limitations de débit, etc.
Activons l'addon Ingress dans Minikube :
minikube addons enable ingress
Exemple de sortie :
💡 ingress est un addon maintenu par Kubernetes. Pour toute question, contactez minikube sur GitHub.
🔉 ingress a été activé avec succès
Créons un déploiement pour deux applications d'exemple :
kubectl create deployment web1 --image=nginx:alpine
kubectl create deployment web2 --image=httpd:alpine
Exposons ces déploiements sous forme de services :
kubectl expose deployment web1 --port=80 --type=ClusterIP --name=web1-service
kubectl expose deployment web2 --port=80 --type=ClusterIP --name=web2-service
Créons un fichier YAML pour l'ingress :
nano ingress-example.yaml
Ajoutons la configuration d'ingress suivante :
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /web1
pathType: Prefix
backend:
service:
name: web1-service
port:
number: 80
- path: /web2
pathType: Prefix
backend:
service:
name: web2-service
port:
number: 80
Composants clés de cette configuration d'ingress :
- metadata.annotations : Configurations spécifiques pour le contrôleur Ingress.
- spec.rules : Définissent comment le trafic est routé vers les services.
- path : Chemin d'URL qui sera correspondu.
- pathType : Comment le chemin doit être correspondu (Prefix, Exact ou ImplementationSpecific).
- backend.service : Le service et le port vers lesquels le trafic sera routé.
Appliquons la configuration d'ingress :
kubectl apply -f ingress-example.yaml
Vérifions la ressource Ingress :
kubectl get ingress
Exemple de sortie :
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress nginx * 192.168.49.2 80 1m
Voyons les détails de l'ingress :
kubectl describe ingress example-ingress
La sortie de l'exemple montrera les règles de routage et les services back-end.
Testons l'ingress :
## Obtenez l'adresse IP de Minikube
minikube ip
## Testez l'accès aux services via l'ingress
curl $(minikube ip)/web1
curl $(minikube ip)/web2
Chaque commande devrait retourner la page par défaut du serveur web correspondant.
Dans les environnements de production, l'ingress peut être configuré avec :
- Plusieurs règles basées sur le nom d'hôte.
- Des certificats TLS pour HTTPS.
- Des mécanismes d'authentification.
- Des limitations de débit.
- Des configurations de délai d'attente personnalisées.
- Une affinité de session.
- Et de nombreuses autres fonctionnalités avancées.
Pour une couverture plus complète de l'ingress, reportez-vous à la documentation de Kubernetes et envisagez d'explorer la documentation des contrôleurs d'ingress dédiés comme l'ingress NGINX ou Traefik.