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.

Comparación general de las propiedades de Ingress, NGINX y Traefik
Esta tabla comparativa tiene encabezados de filas y columnas. Los encabezados de las filas indican la propiedad que se está comparando, y los encabezados de las columnas indican Ingress, NGINX y Traefik. Utiliza la tabla para comparar las diferencias generales entre los dos controladores de entrada.
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.

Comparación de las características de configuración entre Ingress- NGINX y Traefik
Esta tabla tiene cabeceras de fila y columna. Los encabezados de las filas identifican una función de configuración, y los encabezados de las columnas describen cómo configurar dicha función 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.

Parámetros de implementación personalizables compatibles con Ingress ( NGINX ) y Traefik
Esta tabla tiene cabeceras de fila y columna. Los encabezados de las filas identifican un parámetro de implementación, y los encabezados de las columnas indican si Ingress- NGINX y Traefik admiten ese parámetro o ofrecen una alternativa.
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 ».