Migración de Ingress ( NGINX ) a Traefik en IBM Cloud
IBM Cloud Kubernetes Service Se está dejando de utilizar Ingress(NGINX) porque el proyecto original ha dejado de estar activo. Traefik es el controlador de Ingress con el que IBM seguirá funcionando en el futuro.
Durante el periodo de transición, ambos controladores de Ingress estarán disponibles, lo que te ofrece la flexibilidad de probar Traefik y realizar la migración a tu propio ritmo.
En este artículo se comparan las principales diferencias de configuración entre Ingress- NGINX y Traefik, y se ofrecen consejos para facilitar la transición.
Comparación entre Ingress- NGINX y Traefik en IBM Cloud
La siguiente tabla compara las diferencias generales entre Ingress- NGINX y Traefik.
| Ingress- NGINX | Traefik | |
|---|---|---|
| IBM-clases predeterminadas de Ingress incluidas | public-iks-k8s-nginx para el público y private-iks-k8s-nginx para particulares. |
public-iks-traefik para el público y private-iks-traefik para particulares. |
| Esquema de versiones | 0.X.X_XXXX_iks y 1.X.X_XXXX_iks |
A partir de la versión 3 de Traefik: 3.X.X_XXXX_iks |
| Recursos procesados | Solo entrada | Ingress con « Ingress: compatibilidad con «NGINX » » opcional y CRD de Traefik |
| IBM-nombre de la cuenta de servicio implementada | ibm-k8s-ingress |
ibm-traefik-ingress |
En la siguiente tabla se compara cómo se configuran las funciones más habituales en Ingress- NGINX y Traefik.
| Configuración | Ingress- NGINX | Traefik |
|---|---|---|
| Autenticación de App ID | Añade « nginx.ingress.kubernetes.io/auth-url » y las anotaciones de fragmentos relacionadas al recurso Ingress. Consulta la documentación de Ingress: NGINX. |
Crea un CRD de middleware « ForwardAuth » de Traefik y aplícalo mediante la anotación « traefik.ingress.kubernetes.io/router.middlewares ». Consulta la documentación de Traefik. |
| Tamaño máximo del cuerpo de la solicitud del cliente | Utiliza la anotación « nginx.ingress.kubernetes.io/proxy-body-size ». Consulta la documentación de Ingress: NGINX. |
Crea un CRD de middleware « Buffering » de Traefik y aplícalo al recurso Ingress. Consulta la documentación de Traefik. |
| Almacenamiento intermedio de datos de respuesta del cliente | Utiliza la anotación « nginx.ingress.kubernetes.io/proxy-buffering ». Consulta la documentación de Ingress: NGINX. |
Crea un CRD de middleware « Buffering » de Traefik y aplícalo al recurso Ingress. Consulta la documentación de Traefik. |
| Tiempos de espera de conexión y lectura | Utiliza las anotaciones « nginx.ingress.kubernetes.io/proxy-connect-timeout » y « proxy-read-timeout ». Consulta la documentación de Ingress en NGINX. |
Configura los tiempos de espera de lectura, escritura e inactividad en el servicio de gestión de tiempo de espera de lectura y escritura ( ibm-ingress-deploy-config ) ConfigMap, y utiliza un CRD de tiempo de espera de reenvío
del backend ( ServersTransport ). Consulta la documentación de Traefik. |
| Acciones de error personalizadas | Configura el campo « custom-http-errors » en ibm-k8s-controller-config ConfigMap. Consulta la documentación de Ingress en NGINX. |
Crea un CRD de middleware « Errors » de Traefik y aplícalo al recurso Ingress. Consulta la documentación de Traefik. |
| Personalización de los encabezados de las solicitudes | Configura el campo « proxy-set-headers » en ibm-k8s-controller-config ConfigMap. Consulta la documentación de Ingress en NGINX. |
Crea un CRD de middleware « Headers » de Traefik y aplícalo al recurso Ingress. Consulta la documentación de Traefik. |
| Personalización de los encabezados de respuesta | Utiliza la anotación « nginx.ingress.kubernetes.io/configuration-snippet ». Consulta la documentación de Ingress: NGINX. |
Crea un CRD de middleware « Headers » de Traefik y aplícalo al recurso Ingress. Consulta la documentación de Traefik. |
| HTTP Redirección a HTTPS | Establece ssl-redirect en ibm-k8s-controller-config ConfigMap o utiliza la anotación nginx.ingress.kubernetes.io/ssl-redirect . Consulta la documentación de Ingress en NGINX. |
Configura el campo « httpsRedirect » en ibm-ingress-deploy-config ConfigMap. Consulta la documentación de Traefik. |
| HTTP con seguridad de transporte estricta (hsts) | Configura el campo « hsts » en ibm-k8s-controller-config ConfigMap. Consulta la documentación de Ingress en NGINX. |
Crea un CRD de middleware de Traefik « Headers » con el campo « stsSeconds » y los campos relacionados, y aplícalo al recurso Ingress. Consulta la documentación de Traefik. |
| Coincidencia de rutas URI (expresión regular) | Utiliza la anotación « nginx.ingress.kubernetes.io/use-regex ». Consulta la documentación de Ingress: NGINX. |
Utiliza la anotación « traefik.ingress.kubernetes.io/router.pathmatcher ». Consulta la documentación de Traefik. |
| Autenticación TLS mutua | Utiliza las anotaciones « nginx.ingress.kubernetes.io/auth-tls-* » en el recurso «Ingress». Consulta la documentación de Ingress: NGINX. |
Crea un CRD de Traefik TLSOption y aplícalo mediante la anotación « traefik.ingress.kubernetes.io/router.tls.options ». Consulta la documentación de Traefik. |
| Volver a intentarlo / siguiente en la cadena de suministro | Utiliza « nginx.ingress.kubernetes.io/proxy-next-upstream » y las anotaciones relacionadas. Consulta la documentación de Ingress: NGINX. |
Crea un CRD de middleware « Retry » de Traefik y aplícalo al recurso Ingress. Consulta la documentación de Traefik. |
| Limitación de velocidad | Utiliza las anotaciones « nginx.ingress.kubernetes.io/limit-* » en el recurso «Ingress». Consulta la documentación de Ingress: NGINX. |
Crea un CRD de middleware « RateLimit » de Traefik y aplícalo al recurso Ingress. Consulta la documentación de Traefik. |
| Reescritura de rutas | Utiliza la anotación « nginx.ingress.kubernetes.io/rewrite-target ». Consulta la documentación de Ingress: NGINX. |
Crea un CRD de middleware de Traefik ( ReplacePath o ReplacePathRegex ) y aplícalo al recurso Ingress. Consulta la documentación de Traefik. |
| Afiliación de sesión (cookies persistentes) | Utiliza « nginx.ingress.kubernetes.io/affinity » y las anotaciones relacionadas. Consulta la documentación de Ingress: NGINX. |
Utiliza las anotaciones « sticky cookie » del servicio Traefik directamente en el recurso Ingress. Consulta la documentación de Traefik. |
| TLS de origen (servicios de SSL ) | Utiliza las anotaciones « nginx.ingress.kubernetes.io/backend-protocol » y « proxy-ssl-* ». Consulta la documentación de Ingress en NGINX. |
Crea un CRD de Traefik ServersTransport con el campo « rootCAs » y aplícalo al servicio de backend. Consulta la documentación de Traefik. |
| SSL protocolos y algoritmos de cifrado | Configura los campos « ssl-protocols » y « ssl-ciphers » en ibm-k8s-controller-config ConfigMap. Consulta la documentación de Ingress en NGINX. |
Crea un CRD de Traefik TLSOption con los campos « minVersion », « maxVersion » y « cipherSuites ». Consulta la documentación de Traefik. |
Si una función depende de los CRD de Traefik, como Middleware, TLSOption o ServersTransport, asegúrate de que el procesamiento de CRD esté habilitado. El procesamiento CRD está activado por defecto. Para
configurar el procesamiento de CRD, consulta el campo « processTraefikCRDs » en la guía « ibm-ingress-deploy-config » ( ConfigMap ) en la sección «Creación de ajustes personalizados» de Ingress(ConfigMap ).
En la siguiente tabla se enumeran los parámetros de implementación personalizables que admiten Ingress- NGINX y Traefik.
| Ingress- NGINX | Traefik | |
|---|---|---|
replicas |
Soportado | Soportado |
ingressClass |
Soportado | Soportado |
httpPort, httpsPort |
Soportado | Soportado |
tcpServicesConfig |
Soportado | No aplicable. Utiliza el CRD « IngressRouteTCP ». |
enableSslPassthrough |
Soportado | No aplicable. No es necesario activar esta opción de forma explícita. |
defaultCertificate |
Soportado | No aplicable. Utiliza el CRD TLSStore con defaultCertificate. |
defaultBackendService |
Soportado | No aplicable. Utiliza el Ingress predeterminado global del backend. |
deepInspect |
Soportado | No aplicable |
defaultConfig |
Soportado | No aplicable |
enableAnnotationValidation |
Soportado | No aplicable. Traefik no es susceptible a la inyección de configuración a través de anotaciones. |
enableIngressValidation |
Soportado | No aplicable |
logLevel |
Se admite un valor entre 0 y 5 para el nivel de detalle. | Se admite como cadena con los siguientes valores: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, PANIC. |
ingressProvider |
No aplicable | Soportado |
processTraefikCRDs |
No aplicable | Soportado |
traefikIngressNginxAllowExternalNameServices |
No aplicable | Soportado |
traefikCRDAllowCrossNamespace |
No aplicable | Soportado |
traefikCRDAllowExternalNameServices |
No aplicable | Soportado |
httpReadTimeout, httpsReadTimeout |
No aplicable. Configúralo a través de ibm-k8s-controller-config ConfigMap. |
Soportado |
httpWriteTimeout, httpsWriteTimeout |
No aplicable. Configúralo a través de ibm-k8s-controller-config ConfigMap. |
Soportado |
httpIdleTimeout, httpsIdleTimeout |
No aplicable. Configúralo a través de ibm-k8s-controller-config ConfigMap. |
Soportado |
httpsRedirect |
No aplicable. Configurar mediante el ibm-k8s-controller-config, ConfigMap o una anotación. |
Soportado |
tolerations |
Soportado | Soportado |
Aspectos que hay que tener en cuenta durante la migración
Los siguientes mecanismos de IBM Cloud ayudan a evitar la interrupción del servicio en determinados casos.
Gestión del DNS en clústeres clásicos
En los clústeres clásicos, al activar o desactivar instancias públicas de ALB, las direcciones IP de dichos ALB se añaden automáticamente al dominio predeterminado del clúster.
Al habilitar diferentes tipos de ALB (combinando Traefik con Ingress — NGINX ), no se añaden registros DNS. Esto evita la situación indeseada en la que se mezclen diferentes tipos de ALB detrás de un único dominio, lo que podría provocar problemas difíciles de depurar. No se registran nuevas direcciones IP mientras persista este estado mixto. La eliminación de direcciones IP sigue funcionando como antes.
Cuando se desactiva la última instancia del tipo diferente (ya sea Traefik o Ingress- NGINX ), los ALB restantes se vuelven a registrar automáticamente para restablecer el estado deseado, en el que todas las instancias públicas de ALB quedan registradas bajo el subdominio predeterminado del clúster.
Gestión predeterminada de las clases de Ingress
La clase de entrada predeterminada se actualiza cada vez que se activa o desactiva un ALB. Si la clase de Ingress predeterminada se deja en la configuración por defecto « IBM » y no se configura, se actualiza automáticamente.
Si el clúster solo tiene habilitados ALB basados en Traefik, se establece como predeterminado public-iks-traefik o private-iks-traefik, dependiendo de si el valor predeterminado anterior era public-iks-k8s-nginx o private-iks-k8s-nginx. Del mismo modo, si en el clúster solo están habilitados los ALB basados en Ingress ( NGINX ), la clase de Ingress predeterminada vuelve a ser la de Ingress ( NGINX ).
Las clases personalizadas de Ingress nunca se establecen como predeterminadas de forma automática.
Para obtener más información sobre cómo configurar y personalizar Traefik, consulta « Acerca de Ingress con Traefik ».