Passage d'Ingress ( NGINX ) à Traefik sur IBM Cloud

IBM Cloud Kubernetes Service s'éloigne d' Ingress(NGINX ) car le projet en amont a été abandonné. Traefik est le contrôleur Ingress que IBM prendra en charge à l'avenir.

Pendant la période de transition, les deux contrôleurs Ingress restent disponibles, ce qui vous offre la possibilité de tester Traefik et de procéder à la migration à votre rythme.

Cet article compare les principales différences de configuration entre Ingress ( NGINX ) et Traefik, et vous fournit des conseils pour faciliter votre transition.

Comparaison entre Ingress- NGINX et Traefik sur IBM Cloud

Le tableau suivant compare les principales différences entre Ingress- NGINX et Traefik.

Comparaison générale des propriétés d'Ingress, d' NGINX et de Traefik
Ce tableau comparatif comporte des en-têtes de lignes et de colonnes. Les en-têtes de ligne indiquent la propriété comparée, tandis que les en-têtes de colonne identifient Ingress, NGINX et Traefik. Utilisez le tableau pour comparer les principales différences entre les deux contrôleurs d'entrée.
Ingress- NGINX Traefik
IBM- classes Ingress par défaut fournies public-iks-k8s-nginx pour les domaines publics et private-iks-k8s-nginx pour les domaines privés. public-iks-traefik pour les domaines publics et private-iks-traefik pour les domaines privés.
Schéma de version 0.X.X_XXXX_iks et 1.X.X_XXXX_iks À partir de la version 3 de Traefik : 3.X.X_XXXX_iks
Ressources traitées Ingress uniquement Ingress avec l'Ingress - Compatibilité avec «NGINX », en option, et CRD Traefik
IBM- nom du compte de service déployé ibm-k8s-ingress ibm-traefik-ingress

Le tableau suivant compare la manière dont on configure les fonctionnalités courantes dans Ingress ( NGINX ) et Traefik.

Comparaison des fonctionnalités de configuration entre Ingress- NGINX et Traefik
Cette table contient des en-têtes de ligne et de colonne. Les en-têtes de ligne identifient une fonctionnalité de configuration, tandis que les en-têtes de colonne décrivent comment configurer cette fonctionnalité dans Ingress- NGINX et Traefik.
Configuration Ingress- NGINX Traefik
Authentification App ID Ajoutez les annotations « nginx.ingress.kubernetes.io/auth-url » et les annotations de snippet associées à la ressource Ingress. Consultez la documentation d'Ingress sur NGINX. Créez un CRD « ForwardAuth » pour le middleware Traefik et appliquez-le à l'aide de l'annotation « traefik.ingress.kubernetes.io/router.middlewares ». Consultez la documentation de Traefik.
Taille maximale du corps de la requête client Utilisez l'annotation « nginx.ingress.kubernetes.io/proxy-body-size ». Consultez la documentation d'Ingress sur NGINX. Créez un CRD de middleware « Buffering » pour Traefik et appliquez-le à la ressource Ingress. Consultez la documentation de Traefik.
Mise en mémoire tampon des données de réponse client Utilisez l'annotation « nginx.ingress.kubernetes.io/proxy-buffering ». Consultez la documentation d'Ingress sur NGINX. Créez un CRD de middleware « Buffering » pour Traefik et appliquez-le à la ressource Ingress. Consultez la documentation de Traefik.
Délais d'expiration de connexion et de lecture Utilisez les annotations « nginx.ingress.kubernetes.io/proxy-connect-timeout » et « proxy-read-timeout ». Consultez la documentation d'Ingress sur NGINX. Configurez les délais d'expiration en lecture, en écriture et en inactivité dans le fichier « ibm-ingress-deploy-config » ( ConfigMap, ) et utilisez un CRD « ServersTransport » pour les délais d'expiration de transfert vers le backend. Consultez la documentation de Traefik.
Actions d'erreur personnalisées Définissez le champ « custom-http-errors » dans le fichier « ibm-k8s-controller-config » ConfigMap. Consultez la documentation d'Ingress sur NGINX. Créez un CRD de middleware « Errors » pour Traefik et appliquez-le à la ressource Ingress. Consultez la documentation de Traefik.
Personnalisation des en-têtes de requête Définissez le champ « proxy-set-headers » dans le fichier « ibm-k8s-controller-config » ConfigMap. Consultez la documentation d'Ingress sur NGINX. Créez un CRD de middleware « Headers » pour Traefik et appliquez-le à la ressource Ingress. Consultez la documentation de Traefik.
Personnalisation des en-têtes de réponse Utilisez l'annotation « nginx.ingress.kubernetes.io/configuration-snippet ». Consultez la documentation d'Ingress sur NGINX. Créez un CRD de middleware « Headers » pour Traefik et appliquez-le à la ressource Ingress. Consultez la documentation de Traefik.
HTTP vers la redirection « HTTPS » Définissez ssl-redirect dans le fichier ibm-k8s-controller-config ConfigMap ou utilisez l'annotation nginx.ingress.kubernetes.io/ssl-redirect . Consultez la documentation d'Ingress sur NGINX. Définissez le champ « httpsRedirect » dans le fichier « ibm-ingress-deploy-config » ConfigMap. Consultez la documentation de Traefik.
Dispositif de sécurité HSTS (HTTP Strict Transport Security) Définissez le champ « hsts » dans le fichier « ibm-k8s-controller-config » ConfigMap. Consultez la documentation d'Ingress sur NGINX. Créez un CRD de middleware Traefik « Headers » comprenant le champ « stsSeconds » et les champs associés, puis appliquez-le à la ressource Ingress. Consultez la documentation de Traefik.
Correspondance de chemins URI (expressions régulières) Utilisez l'annotation « nginx.ingress.kubernetes.io/use-regex ». Consultez la documentation d'Ingress sur NGINX. Utilisez l'annotation « traefik.ingress.kubernetes.io/router.pathmatcher ». Consultez la documentation de Traefik.
Authentification mutuelle TLS Utilisez les annotations « nginx.ingress.kubernetes.io/auth-tls-* » sur la ressource Ingress. Consultez la documentation d'Ingress sur NGINX. Créez un CRD « Traefik TLSOption » et appliquez-le via l'annotation « traefik.ingress.kubernetes.io/router.tls.options ». Consultez la documentation de Traefik.
Réessayer / suivant en amont Utilisez nginx.ingress.kubernetes.io/proxy-next-upstream et les annotations associées. Consultez la documentation d'Ingress sur NGINX. Créez un CRD de middleware « Retry » pour Traefik et appliquez-le à la ressource Ingress. Consultez la documentation de Traefik.
Limitation de débit Utilisez les annotations « nginx.ingress.kubernetes.io/limit-* » sur la ressource Ingress. Consultez la documentation d'Ingress sur NGINX. Créez un CRD de middleware « RateLimit » pour Traefik et appliquez-le à la ressource Ingress. Consultez la documentation de Traefik.
Réécriture de chemin d'accès Utilisez l'annotation « nginx.ingress.kubernetes.io/rewrite-target ». Consultez la documentation d'Ingress sur NGINX. Créez un CRD de middleware Traefik ( ReplacePath ou ReplacePathRegex ) et appliquez-le à la ressource Ingress. Consultez la documentation de Traefik.
Affinité de session (cookies persistants) Utilisez nginx.ingress.kubernetes.io/affinity et les annotations associées. Consultez la documentation d'Ingress sur NGINX. Utilisez les annotations « Service sticky cookie » de Traefik directement sur la ressource Ingress. Consultez la documentation de Traefik.
TLS en amont (services SSL ) Utilisez les annotations « nginx.ingress.kubernetes.io/backend-protocol » et « proxy-ssl-* ». Consultez la documentation d'Ingress sur NGINX. Créez un CRD « ServersTransport » pour Traefik avec le champ « rootCAs », puis appliquez-le au service backend. Consultez la documentation de Traefik.
SSL protocoles et algorithmes de chiffrement Définissez les champs « ssl-protocols » et « ssl-ciphers » dans le fichier « ibm-k8s-controller-config » ConfigMap. Consultez la documentation d'Ingress sur NGINX. Créez un CRD « Traefik TLSOption » comportant les champs suivants : « minVersion », « maxVersion » et « cipherSuites ». Consultez la documentation de Traefik.

Si une fonctionnalité dépend des CRD de Traefik, tels que Middleware, TLSOption ou ServersTransport, assurez-vous que le traitement des CRD est activé. Le traitement CRD est activé par défaut. Pour configurer le traitement des CRD, consultez la section « processTraefikCRDs » (Configuration des CRD) de la documentation « ibm-ingress-deploy-config » (Configuration des CRD) ConfigMap, dans la rubrique «Creating custom settings»(Création de paramètres personnalisés)de la documentation «Ingress» ConfigMap.

Le tableau suivant répertorie les paramètres de déploiement personnalisables pris en charge par Ingress- NGINX et Traefik.

Paramètres de déploiement personnalisables pris en charge par Ingress ( NGINX ) et Traefik
Cette table contient des en-têtes de ligne et de colonne. Les en-têtes de ligne identifient un paramètre de déploiement, tandis que les en-têtes de colonne indiquent si Ingress- NGINX et Traefik prennent en charge ce paramètre ou proposent une alternative.
Ingress- NGINX Traefik
replicas Pris en charge Pris en charge
ingressClass Pris en charge Pris en charge
httpPort, httpsPort Pris en charge Pris en charge
tcpServicesConfig Pris en charge Non applicable. Utilisez le document de référence ( CRD)« IngressRouteTCP ».
enableSslPassthrough Pris en charge Non applicable. Vous n'avez pas besoin d'activer explicitement ce paramètre.
defaultCertificate Pris en charge Non applicable. Utilisez le CRD TLSStore avec defaultCertificate.
defaultBackendService Pris en charge Non applicable. Utiliser le backend Ingress par défaut global.
deepInspect Pris en charge Non applicable
defaultConfig Pris en charge Non applicable
enableAnnotationValidation Pris en charge Non applicable. Traefik n'est pas vulnérable à l'injection de configuration via des annotations.
enableIngressValidation Pris en charge Non applicable
logLevel Valeur comprise entre 0 et 5 pour le niveau de détail. Pris en charge sous forme de chaîne de caractères avec les valeurs suivantes : TRACE, DEBUG, INFO, WARN, ERROR, FATAL, PANIC.
ingressProvider Non applicable Pris en charge
processTraefikCRDs Non applicable Pris en charge
traefikIngressNginxAllowExternalNameServices Non applicable Pris en charge
traefikCRDAllowCrossNamespace Non applicable Pris en charge
traefikCRDAllowExternalNameServices Non applicable Pris en charge
httpReadTimeout, httpsReadTimeout Non applicable. Configurez-le via l'interface ibm-k8s-controller-config ConfigMap. Pris en charge
httpWriteTimeout, httpsWriteTimeout Non applicable. Configurez-le via l'interface ibm-k8s-controller-config ConfigMap. Pris en charge
httpIdleTimeout, httpsIdleTimeout Non applicable. Configurez-le via l'interface ibm-k8s-controller-config ConfigMap. Pris en charge
httpsRedirect Non applicable. Configurez cette option via l' ibm-k8s-controller-config, ConfigMap ou une annotation. Pris en charge
tolerations Pris en charge Pris en charge

Éléments à prendre en compte lors de la migration

Les mécanismes d' IBM Cloud s suivants permettent d'éviter les interruptions de service dans certains cas de figure.

Gestion du DNS sur les clusters classiques

Dans les clusters classiques, l'activation ou la désactivation d'instances ALB publiques entraîne l'ajout automatique des adresses IP de ces ALB au domaine par défaut du cluster.

Lorsque vous activez différents types d'ALB (en combinant Traefik et Ingress — NGINX ), aucun enregistrement DNS n'est ajouté. Cela permet d'éviter une situation indésirable où différents types d'ALB seraient mélangés derrière un même domaine, ce qui pourrait entraîner des problèmes difficiles à dépanner. Aucune nouvelle adresse IP n'est enregistrée tant que cet état mixte persiste. La suppression des adresses IP fonctionne toujours comme auparavant.

Lorsque la dernière instance du type concerné est désactivée (qu'il s'agisse de Traefik ou d'Ingress — NGINX ), les ALB restants sont automatiquement réenregistrés afin de rétablir l'état souhaité, dans lequel toutes les instances ALB publiques sont enregistrées derrière le sous-domaine par défaut du cluster.

Gestion par défaut des classes Ingress

La classe Ingress par défaut est réinitialisée à chaque activation ou désactivation de l'ALB. Si la classe Ingress par défaut reste sur la valeur par défaut « IBM » et n’est pas configurée, elle est automatiquement mise à jour.

Si le cluster ne dispose que d'ALB basés sur Traefik, l'adresse public-iks-traefik ou private-iks-traefik devient l'adresse par défaut, selon que l'adresse par défaut précédente était public-iks-k8s-nginx ou private-iks-k8s-nginx. De même, si seuls les ALB basés sur Ingress ( NGINX ) sont activés sur le cluster, la classe Ingress par défaut revient à celle d’Ingress ( NGINX ).

Les classes Ingress personnalisées ne sont jamais définies automatiquement comme valeurs par défaut.

Pour plus d'informations sur la configuration et la personnalisation de Traefik, consultez la section « À propos d'Ingress avec Traefik ».