
Routage externe avec les Ingress
Découvrez comment les objets Ingress et les contrôleurs Ingress gèrent le routage HTTP/S (L7) avancé vers vos services Kubernetes, incluant la terminaison TLS.
Exposer intelligemment les services web : au-delà de NodePort et LoadBalancer
Dans le chapitre sur les Services, nous avons vu comment `NodePort` et `LoadBalancer` permettent d'exposer des applications à l'extérieur du cluster Kubernetes. Si ces méthodes fonctionnent, elles présentent rapidement des limitations, en particulier lorsqu'il s'agit d'exposer plusieurs services web (HTTP/HTTPS) ou de mettre en place des règles de routage plus sophistiquées.
Utiliser un Service de type `LoadBalancer` pour chaque application web peut devenir coûteux, car chaque service provisionne généralement son propre équilibreur de charge cloud avec sa propre adresse IP publique. Quant au type `NodePort`, il expose l'application sur un port spécifique (souvent élevé) de chaque noeud, nécessitant souvent un équilibreur de charge externe supplémentaire pour rediriger le trafic des ports standards (80/443) et gérer la répartition sur les noeuds. De plus, ces services opèrent principalement au niveau 4 (TCP/UDP) du modèle OSI et n'ont pas de compréhension intrinsèque des protocoles de niveau 7 comme HTTP/S.
Comment pouvons-nous alors exposer plusieurs services web derrière une seule adresse IP, router le trafic en fonction du nom d'hôte (ex: `api.example.com`, `blog.example.com`) ou du chemin d'URL (ex: `/api`, `/ui`), et gérer centralement la terminaison des connexions HTTPS (TLS) ? C'est là qu'intervient l'objet Ingress.
Ingress et contrôleurs Ingress : le routage de niveau 7
Un Ingress est un objet API Kubernetes qui définit des règles pour gérer l'accès externe aux services du cluster, principalement pour le trafic HTTP et HTTPS. Il agit comme une couche de routage intelligente au niveau 7, permettant de diriger le trafic entrant vers différents Services backend en fonction de critères comme le nom d'hôte demandé ou le chemin d'URL.
Il est crucial de comprendre qu'un objet Ingress en lui-même ne fait rien. Il s'agit d'une **déclaration** de règles de routage. Pour que ces règles soient appliquées, un contrôleur Ingress doit être déployé dans le cluster. Le contrôleur Ingress est un logiciel spécifique (souvent un proxy inverse comme Nginx, Traefik, HAProxy, ou un service cloud natif) qui surveille les objets Ingress créés dans l'API Server et configure dynamiquement le proxy sous-jacent pour implémenter les règles de routage définies.
Ce chapitre explorera en détail :
- Les limites spécifiques de NodePort et LoadBalancer pour le trafic HTTP/S.
- Le concept d'Ingress en tant que gestionnaire de règles de routage L7.
- Le rôle indispensable et les exemples courants de contrôleurs Ingress (Nginx Ingress, Traefik...).
- Comment configurer le routage basé sur le nom d'hôte et le chemin d'URL via les règles Ingress.
- Comment gérer la terminaison TLS (HTTPS) directement au niveau de l'Ingress, en utilisant des Secrets Kubernetes pour stocker les certificats.
L'utilisation des Ingress est la méthode standard et la plus flexible pour gérer l'exposition des services web sur Kubernetes, offrant un contrôle fin et centralisé du trafic entrant.