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