Migrer de NGINX Ingress Controller vers Traefik sur OVHcloud Managed Kubernetes
Découvrez comment migrer de NGINX Ingress Controller vers Traefik sur votre cluster MKS OVHcloud sans interruption de service
Objectif
Le projet Kubernetes NGINX Ingress Controller a annoncé sa fin de vie en mars 2026. Ce guide aide les utilisateurs d'OVHcloud Managed Kubernetes Service (MKS) à migrer de NGINX Ingress Controller vers Traefik sans interruption de service, en couvrant les spécificités OVHcloud.
Traefik v3.6.2+ inclut un provider Kubernetes Ingress NGINX qui traduit automatiquement les annotations NGINX en configuration Traefik native. Vos manifestes Ingress existants avec ingressClassName: nginx fonctionnent immédiatement, sans modification.
Ce guide se concentre sur les configurations spécifiques à OVHcloud. Pour la procédure de migration complète, consultez le guide officiel Traefik nginx-to-traefik.
Pour une perspective plus large sur la transition d'Ingress vers Gateway API, lisez l'article de blog OVHcloud : Moving beyond Ingress: Why should OVHcloud MKS users start looking at the Gateway API.
Ce guide concerne les clusters MKS utilisant Kubernetes en version 1.31 ou supérieure, qui utilisent le Public Cloud Load Balancer (OpenStack Octavia) par défaut.
Avant de commencer
Ce tutoriel suppose que vous remplissez déjà les conditions suivantes :
- Disposer d'un cluster OVHcloud Managed Kubernetes Service fonctionnel (version >= 1.31)
- Disposer du NGINX Ingress Controller déployé et en service
- Disposer des outils CLI
kubectlethelminstallés avec les permissions d'administration du cluster - Disposer d'un accès DNS pour mettre à jour les enregistrements de vos services
Nous recommandons de créer des sauvegardes avant de commencer :
Vous devriez également être familiarisé avec :
- Exposer vos applications à l'aide du Load Balancer OVHcloud Public Cloud
- Récupérer l'adresse IP source derrière le LoadBalancer
Spécificités OVHcloud
Load Balancer (OpenStack Octavia)
Sur les clusters MKS >= 1.31, le Public Cloud Load Balancer (basé sur OpenStack Octavia) est le Load Balancer par défaut. Octavia opère au niveau 4 (TCP/UDP), ce qui signifie que :
- la terminaison TLS est gérée par Traefik, pas par le Load Balancer.
- le routage de niveau 7 (par hôte, par chemin) est géré par Traefik.
- Octavia fournit la vérification de l'état (health checking), la gestion des Floating IP et la distribution du trafic.
Vous pouvez optionnellement choisir la taille du Load Balancer avec l'annotation loadbalancer.openstack.org/flavor-id (MKS Standard uniquement ; MKS Free utilise loadbalancer.ovhcloud.com/flavor). Si non spécifiée, la taille par défaut est small. Pour lister les tailles (flavors) disponibles, installez et configurez la CLI OVHcloud et exécutez ovhcloud cloud reference loadbalancer list-flavors <REGION>. Pour plus de détails, consultez le guide « Exposer vos applications à l'aide du Load Balancer OVHcloud Public Cloud ».
Proxy Protocol et préservation de l'IP source
Pour préserver l'IP source du client derrière le Load Balancer, vous devez activer le Proxy Protocol v2 entre Octavia et Traefik. Cela nécessite une configuration des deux côtés :
Côté Load Balancer (annotation du Service) :
Côté Traefik (valeurs Helm), vous devez configurer Traefik pour accepter le Proxy Protocol et faire confiance aux adresses IP du Load Balancer :
- Clusters en réseau public : utilisez les adresses IP de sortie (egress) de l'annotation du Load Balancer :
- Clusters en réseau privé : utilisez le CIDR de votre sous-réseau (par exemple
10.0.0.0/20).
Vous devez également définir externalTrafficPolicy: Local sur le Service Traefik pour empêcher le masquage de l'IP source via le SNAT inter-nœuds.
Considérations CNI
Si vous avez des NetworkPolicies ciblant les pods NGINX Ingress (labels, ports), vous devez les mettre à jour pour correspondre aux labels Traefik (app.kubernetes.io/name: traefik) et à ses ports.
Étape 1 - Installer Traefik aux côtés de NGINX
Ajoutez le dépôt Helm Traefik :
Créez un fichier traefik-values.yaml adapté à OVHcloud MKS :
a. Clusters en réseau public
b. Clusters en réseau privé
Installez Traefik :
Vérifiez que les deux contrôleurs fonctionnent :
La configuration clé providers.kubernetesIngressNginx.enabled: true indique à Traefik de surveiller les ressources Ingress avec ingressClassName: nginx et de traduire automatiquement les annotations NGINX en configuration Traefik native. Cela nécessite Traefik v3.6.2 ou supérieure.
Étape 2 - Vérifier que Traefik gère le trafic
Récupérez les adresses IP des LoadBalancers des deux contrôleurs :
Testez votre application via les deux contrôleurs en utilisant curl --connect-to pour contourner le DNS :
Les deux commandes doivent renvoyer la même réponse. Vérifiez également que l'IP source est correctement préservée dans les en-têtes X-Real-IP ou X-Forwarded-For.
Vérifiez les logs Traefik pour la découverte des Ingress :
Étape 3 - Basculer le trafic vers Traefik (par DNS)
L'approche recommandée est une migration basée sur le DNS :
- Ajoutez l'IP Traefik à vos enregistrements DNS aux côtés de l'IP NGINX (round-robin).
- Surveillez le trafic sur les deux contrôleurs pour vous assurer que Traefik traite correctement les requêtes.
- Retirez l'IP NGINX de vos enregistrements DNS.
- Attendez 24 à 48 heures le temps que les caches DNS expirent avant de passer à l'étape suivante.
Certains FAI ignorent les valeurs TTL du DNS, mettant en cache les enregistrements plus longtemps que spécifié. Gardez NGINX en fonctionnement pendant au moins 24 à 48 heures après l'avoir retiré du DNS pour éviter de perdre du trafic.
Nous recommandons de réduire votre TTL DNS à 300 secondes (5 minutes) avant de commencer la migration. Pour des instructions détaillées sur le changement DNS, consultez « Comment effectuer un changement DNS ».
Étape 4 - Conserver la Floating IP du LoadBalancer (spécifique OVHcloud)
Si vous souhaitez que Traefik utilise la même IP que NGINX (pour éviter les changements DNS), suivez cette procédure :
- Assurez-vous que l'annotation
keep-floatingipest définie sur les deux services :
-
Assurez-vous que Traefik reçoit du trafic (via sa propre IP ou le round-robin DNS).
-
Supprimez le service LoadBalancer de NGINX pour libérer la Floating IP :
- Mettez à jour
traefik-values.yamlpour récupérer la Floating IP libérée :
- Mettez à jour Traefik :
- Vérifiez que Traefik a récupéré l'IP :
Étape 5 - Désinstaller NGINX Ingress Controller
Préserver l'IngressClass
L'IngressClass nginx doit survivre à la désinstallation de NGINX pour que Traefik continue à découvrir vos ressources Ingress.
Si NGINX a été installé via Helm, ajoutez l'annotation de préservation :
Le paramètre --reuse-values est critique : il préserve toute votre configuration NGINX existante lors de cette mise à jour d'annotation.
Supprimer les webhooks d'admission
Désinstaller NGINX
Vérifier que l'IngressClass est préservée
L'IngressClass nginx doit toujours être présente.
Nettoyage
Prochaines étapes : Gateway API
Bien que Traefik avec le provider NGINX Ingress soit une solution immédiate adaptée, nous recommandons à long terme de migrer vers la Kubernetes Gateway API. Traefik prend en charge nativement les ressources Gateway API (HTTPRoute, TLSRoute, GRPCRoute, TCPRoute).
Le parcours de migration recommandé est :
NGINX Ingress (actuel) → Traefik avec provider NGINX (ce guide) → Traefik avec Gateway API
Pour plus de détails sur Gateway API avec OVHcloud MKS, lisez l'article de blog : Moving beyond Ingress: Why should OVHcloud MKS users start looking at the Gateway API.
Dépannage
Les Ingress ne sont pas découverts par Traefik
L'IP source n'est pas préservée
- Vérifiez que le Proxy Protocol est activé sur le Service :
loadbalancer.openstack.org/proxy-protocol: "v2". - Vérifiez que
externalTrafficPolicy: Localest défini sur le Service Traefik. - Vérifiez que les
proxyProtocol.trustedIPsde Traefik correspondent aux adresses IP de sortie de votre Load Balancer (clusters publics) ou au CIDR de votre sous-réseau (clusters privés). - Vérifiez les en-têtes
X-Real-IPetX-Forwarded-Fordans les réponses de votre application.
La Floating IP du LoadBalancer n'est pas assignée
Vérifiez que la Floating IP que vous essayez de récupérer n'est plus allouée à un autre service.
Les certificats TLS ne fonctionnent pas
Traefik assure la terminaison TLS en utilisant les secrets référencés dans les entrées spec.tls de vos Ingress. Assurez-vous que :
- les secrets TLS existent dans le même namespace que l'Ingress.
- les secrets contiennent des données
tls.crtettls.keyvalides.
Aller plus loin
Guide officiel de migration Traefik : Migrating from NGINX to Traefik
Blog OVHcloud : Moving beyond Ingress
Exposer vos applications à l'aide du Load Balancer OVHcloud Public Cloud
Récupérer l'adresse IP source derrière le LoadBalancer
Middlewares HTTP Traefik (remplacement des annotations NGINX)
Retrouvez-nous sur notre canal Discord dédié : https://discord.gg/ovhcloud. Posez des questions, donnez votre avis et interagissez directement avec l'équipe qui développe nos services Containers et Orchestration.
Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.
Échangez avec notre communauté d'utilisateurs.