RousselTMLEARNING

Article · HAProxy : de la découverte à l'expertise

Ingress Controller : le guide de production

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.com aille vers le service api-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 #

Comparaison du chemin classique et du routage direct vers les pods

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-ingress

Cette 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: 8080

4. 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.pem

Ensuite, 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: 8080

L'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é.

📄 HAProxy comme Ingress Controller Kubernetes : Le Guide de Production →

Mon suivi

  • ⏱ Durée estimée : ≈ 12 min

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.

Poser une question sur cette leçon →

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...

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !