1. Le rôle de l'Ingress Controller dans Kubernetes #
Pour exposer des services HTTP/HTTPS au monde extérieur, Kubernetes s'appuie sur un mécanisme en trois parties : la ressource Ingress, l'IngressClass et l'Ingress Controller.
Comprendre la chaîne de routage #
- Ingress Resource : Un objet YAML qui définit les règles de routage. C'est une déclaration d'intention : 'Je veux que le trafic pour
api.mondomaine.comaille vers le serviceapi-service'. - IngressClass : Une ressource qui lie une règle Ingress à un contrôleur spécifique. Elle permet de faire cohabiter plusieurs Ingress Controllers (HAProxy, Nginx, etc.) dans un même cluster.
- Ingress Controller : Le moteur actif. C'est un pod (ou un ensemble de pods) qui surveille l'API Kubernetes, lit les ressources Ingress et configure dynamiquement son proxy interne (ici, HAProxy) pour appliquer les règles de routage.
Pourquoi HAProxy est un choix de premier plan #
Si Nginx est souvent l'Ingress par défaut, HAProxy est privilégié dans les environnements à très haute performance pour sa faible latence, sa consommation mémoire optimisée et ses fonctionnalités avancées de load balancing.
2. Architecture 'Direct-to-Pod' : La clé de la performance #
L'un des avantages majeurs de l'Ingress Controller HAProxy est sa capacité à router le trafic directement vers les pods, en contournant une partie du réseau interne de Kubernetes.
Contourner kube-proxy #
Par défaut, le trafic dans Kubernetes passe par kube-proxy, qui utilise des règles iptables ou IPVS pour rediriger le trafic vers les pods d'un service. L'Ingress HAProxy, lui, s'abonne directement à l'API des Endpoints de Kubernetes. Il connaît ainsi en temps réel les adresses IP privées de chaque pod applicatif.
Résultat : le trafic va directement de l'Ingress Controller au pod de destination, ce qui réduit la latence, simplifie le dépannage réseau et offre des algorithmes de répartition de charge plus intelligents que le simple round-robin de kube-proxy.
3. Déploiement et configuration de base #
Mettons en place un routage simple pour exposer une application.
Déploiement avec Helm #
La méthode la plus simple pour déployer l'Ingress Controller HAProxy est d'utiliser son chart Helm officiel.
helm repo add haproxy-ingress https://haproxy-ingress.github.io/charts
helm install haproxy-ingress haproxy-ingress/haproxy-ingressCette commande déploie le contrôleur et crée un service de type LoadBalancer pour l'exposer sur Internet.
Exemple de ressource Ingress #
Voici un exemple de ressource Ingress qui route le trafic pour app.mondomaine.com vers un service nommé webapp-service sur le port 8080.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: webapp-ingress
spec:
ingressClassName: haproxy # On spécifie quel contrôleur utiliser
rules:
- host: app.mondomaine.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: webapp-service
port:
number: 80804. Gestion du TLS (HTTPS) #
La sécurisation du trafic est une étape cruciale. HAProxy peut gérer la terminaison TLS, déchargeant ainsi les applications de cette tâche.
Terminaison TLS avec un Secret Kubernetes #
Pour activer le HTTPS, vous devez d'abord stocker votre certificat et votre clé privée dans un Secret Kubernetes de type kubernetes.io/tls.
kubectl create secret tls mon-cert-tls \
--cert=path/to/cert.pem \
--key=path/to/key.pemEnsuite, il suffit de référencer ce secret dans la ressource Ingress.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: webapp-ingress-tls
annotations:
haproxy.org/ssl-redirect: "true" # Force la redirection de HTTP vers HTTPS
spec:
ingressClassName: haproxy
tls:
- hosts:
- app.mondomaine.com
secretName: mon-cert-tls # On référence le secret
rules:
- host: app.mondomaine.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: webapp-service
port:
number: 8080L'annotation haproxy.org/ssl-redirect est une bonne pratique pour s'assurer que tout le trafic passe par une connexion chiffrée.
5. Haute Disponibilité et Scalabilité #
En production, un Ingress Controller ne doit jamais être un point de défaillance unique (SPOF).
Déployer plusieurs répliques #
Il est impératif de déployer au moins 2 ou 3 répliques du pod de l'Ingress Controller. Le service de type LoadBalancer en amont se chargera de répartir le trafic entre ces répliques. On utilise généralement des règles d'anti-affinité pour s'assurer que les pods du contrôleur sont déployés sur des nœuds physiques différents.
Exemple de configuration (values.yaml Helm) :
controller:
replicaCount: 3
# Force le déploiement des pods sur des nœuds différents
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- haproxy-ingress
topologyKey: "kubernetes.io/hostname"Conclusion : Un choix robuste pour la production #
HAProxy s'impose comme une solution mature et extrêmement performante pour gérer le trafic entrant dans Kubernetes.
Synthèse #
En choisissant HAProxy comme Ingress Controller, vous bénéficiez de :
- Performances de pointe grâce à son architecture optimisée et au routage Direct-to-Pod.
- Fonctionnalités avancées de load balancing et de sécurité (ACLs, rate limiting).
- Une configuration dynamique qui s'adapte en temps réel aux changements dans le cluster.
- Une compatibilité avec les standards de l'écosystème, y compris la future Gateway API.
C'est un choix technique solide pour les applications qui ne peuvent se permettre aucun compromis sur la latence et la fiabilité.
Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
💬 Questions sur cette leçon
Aucune question pour l'instant : soyez le premier à demander de l'aide ou à partager votre configuration.
Glossaire de la formation
ACL (Access Control List)
Liste de contrôle d'accès définissant les permissions accordées sur des ressources. Dans HAProxy, les ACL sont des conditions flexibles permettant de ...
Backend
Section de la configuration HAProxy définissant un pool de serveurs cibles vers lesquels le trafic est redirigé. C'est ici que l'on configure l'algori...
Frontend
Section de la configuration HAProxy qui définit comment les requêtes sont reçues du côté client (adresse IP, port, certificats SSL) avant d'être envoy...
GSLB (Global Server Load Balancing)
Technique de répartition de charge à l'échelle mondiale, utilisant généralement le DNS pour diriger les utilisateurs vers le datacenter le plus proche...
HAProxy
Logiciel de load balancing et de proxying haute performance pour TCP et HTTP. HAProxy est le standard de l'industrie pour la gestion de trafic à très ...
Health Check
Mécanisme automatisé permettant au load balancer de tester périodiquement la disponibilité des serveurs afin d'exclure temporairement ceux qui sont en...
Load Balancing
Dispositif qui distribue le trafic applicatif sur un ensemble de serveurs afin d'optimiser l'usage des ressources, de minimiser les temps de réponse e...
SSL Offloading
Processus consistant à déléguer le déchiffrement du trafic HTTPS au load balancer pour libérer de la puissance CPU sur les serveurs d'application.
Stickiness
Mécanisme garantissant qu'un utilisateur est systématiquement redirigé vers le même serveur backend durant toute sa session, indispensable pour les ap...
Slowloris
Type d'attaque par déni de service (DoS) qui consiste à ouvrir de nombreuses connexions HTTP et à les maintenir ouvertes le plus longtemps possible en...
DoS / DDoS
Attaque visant à rendre un service indisponible en submergeant le serveur ou le réseau de trafic. On parle de DDoS (Distributed Denial of Service) lor...
SSL / TLS
Protocoles de sécurisation des échanges sur internet. TLS (Transport Layer Security) est le successeur moderne de SSL (Secure Sockets Layer). Ils perm...
Articles recommandés
HAProxy dans Kubernetes : L'Ingress Controller Haute Performance
Découvrez en profondeur l'intégration de HAProxy dans Kubernetes. Architecture Direct-to-Pod, opt...
Traefik comme Ingress Controller pour Kubernetes (Helm, IngressRoute, Gateway API)
Installer Traefik dans Kubernetes avec Helm et publier des applications avec Ingress, les CRD Ing...
Kubernetes : exposer ses applications (Services, Ingress et Gateway API)
Exposer des applications dans Kubernetes : Services ClusterIP/NodePort/LoadBalancer, Ingress, Ing...
Bonnes Pratiques HAProxy : Optimisation, Sécurité et Haute Disponibilité
Découvrez les meilleures pratiques pour configurer HAProxy afin d'assurer performance, sécurité e...
Le Load Balancing : Principes, Algorithmes et Cas d'usage
Découvrez le fonctionnement de la répartition de charge (Load Balancing), son rôle dans la haute ...
Installation de HAProxy
Guide complet pour installer HAProxy sur les serveurs Linux (Debian, RedHat) et via des environne...
Maîtriser les ACLs dans HAProxy : Le Guide Complet
Guide complet sur les ACLs HAProxy : apprenez à configurer le routage intelligent, le contrôle d'...
Maîtriser les ACLs dans HAProxy
Guide complet sur les ACLs HAProxy : apprenez à configurer le routage intelligent, le contrôle d'...
HAProxy et SSL : terminaison TLS, SSL passthrough et sécurisation
HAProxy et SSL/TLS : terminaison SSL, SSL passthrough en mode TCP avec routage SNI, ré-chiffremen...