Editor : Esta publicación es un extracto de nuestro completo libro electrónico Gestión del tráfico de Kubernetes con F5 NGINX: guía práctica. Descárguelo gratis hoy mismo.
Muchas organizaciones que configuran Kubernetes por primera vez comienzan con el controlador Ingress de NGINX desarrollado y mantenido por la comunidad de Kubernetes (kubernetes/ingress-nginx). Sin embargo, a medida que las implementaciones de Kubernetes maduran, algunas organizaciones descubren que necesitan funcionalidades avanzadas o desean contar con soporte comercial sin dejar de utilizar NGINX como plano de datos.
Una opción es migrar al controlador Ingress de NGINX desarrollado y mantenido por F5 NGINX (nginxinc/kubernetes-ingress), y aquí ofrecemos instrucciones completas para evitar algunas complicaciones derivadas de las diferencias entre ambos proyectos.
¿No tiene claro en qué se diferencian estas opciones? Lea «Guía para elegir un controlador de Ingress, parte 4: opciones de controladores de Ingress de NGINX» en nuestro blog.
Para distinguir entre los dos proyectos en el resto de este artículo, nos referiremos al controlador Ingress de NGINX mantenido por la comunidad de Kubernetes (kubernetes/ingress-nginx) como el «controlador Ingress de la comunidad» y al mantenido por F5 NGINX (nginxinc/kubernetes-ingress) como «NGINX Ingress Controller».
Hay dos formas de migrar del controlador Ingress de la comunidad a NGINX Ingress Controller:
- Opción 1: Migrar mediante recursos de NGINX Ingress
Esta es la solución óptima, ya que los recursos de NGINX Ingress admiten el conjunto más amplio de funcionalidades de red de Ingress necesarias en entornos de Kubernetes de nivel de producción. Para obtener más información sobre los recursos de NGINX Ingress, vea nuestro seminario web Implementaciones avanzadas de Kubernetes con NGINX Ingress Controller. - Opción 2: Migrar mediante el recurso Ingress de Kubernetes
Esta opción se recomienda si desea utilizar el recurso estándar Ingress de Kubernetes para definir las reglas de equilibrio de carga de Ingress.
Opción 1: Migrar mediante recursos Ingress de NGINX
Con esta opción de migración, se utiliza el recurso Ingress estándar de Kubernetes para establecer las funcionalidades básicas y los recursos Ingress de NGINX para mejorar la configuración, ampliar sus funcionalidades y facilitar su uso.
Las definiciones de recursos personalizados (CRD) para los recursos de NGINX Ingress — VirtualServer, VirtualServerRoute, TransportServer, GlobalConfiguration y Policy— permiten delegar fácilmente el control de distintas partes de la configuración a diferentes equipos (como los equipos de AppDev y de seguridad), además de ofrecer una mayor seguridad y validación de la configuración.
Configuración de la terminación SSL y el enrutamiento basado en rutas HTTP
La tabla establece la correspondencia entre la configuración de la terminación SSL y el enrutamiento basado en rutas de capa 7 del campo spec del recurso Ingress estándar de Kubernetes y la del campo spec del recurso VirtualServer de NGINX. La sintaxis y la sangría difieren ligeramente entre ambos recursos, pero estos realizan las mismas funciones básicas de Ingress.
| Recurso Ingress de Kubernetes | Recurso VirtualServer de NGINX |
|---|---|
|
|
Configuración del balanceo de carga TCP/UDP y del paso directo de TLS
Con el controlador Ingress de la comunidad, un objeto de la API ConfigMap de Kubernetes es la única forma de exponer servicios TCP y UDP.
Con NGINX Ingress Controller, los recursos TransportServer ofrecen una amplia gama de opciones para el balanceo de carga TCP/UDP y TLS Passthrough. Los recursos TransportServer se utilizan junto con los recursos GlobalConfiguration para controlar las conexiones entrantes y salientes.
Para obtener más información, consulte Compatibilidad con servicios de paso directo de TCP, UDP y TLS en los recursos de NGINX Ingress en nuestro blog.
Convertir las anotaciones del controlador Ingress de la comunidad en recursos Ingress de NGINX
Las implementaciones de Kubernetes de nivel de producción suelen necesitar ampliar las reglas básicas de Ingress para abordar casos de uso avanzados, como despliegues canary y blue-green, limitación del tráfico, manipulación del tráfico de entrada y salida, entre otros.
El controlador Ingress de la comunidad implementa muchos de estos casos de uso mediante anotaciones de Kubernetes. Sin embargo, muchas de estas anotaciones se han creado con extensiones Lua personalizadas vinculadas a definiciones de recursos Ingress de NGINX muy específicas y, por tanto, no son adecuadas para implementar funcionalidades avanzadas en un entorno de producción estable y con soporte.
En las siguientes secciones, mostramos cómo convertir las anotaciones del controlador Ingress de la comunidad en recursos de NGINX Ingress Controller.
- Despliegues canary
- Control del tráfico
- Manipulación de encabezados
- Uso de proxy y balanceo de carga
- Autenticación mTLS
- Persistencia de sesión (exclusiva de NGINX Plus)
Despliegues canary
Aunque implemente con frecuencia cambios de código en sus cargas de trabajo de contenedores en producción, debe seguir prestando servicio a sus usuarios actuales. Los despliegues canary y blue-green le permiten hacerlo, y puede llevarlos a cabo en el plano de datos de NGINX Ingress Controller para lograr actualizaciones estables y predecibles en entornos de Kubernetes de nivel de producción.
La tabla muestra los campos de los recursos VirtualServer y VirtualServerRoute de NGINX que se corresponden con las anotaciones del controlador Ingress de la comunidad para las implementaciones canary.
El controlador Ingress de la comunidad evalúa las anotaciones de canary en el siguiente orden de prioridad:
nginx.ingress.kubernetes.io/canary-by-headernginx.ingress.kubernetes.io/canary-by-cookienginx.ingress.kubernetes.io/canary-by-weight
Para que NGINX Ingress Controller los evalúe de la misma manera, deben aparecer en ese orden en el manifiesto VirtualServer o VirtualServerRoute de NGINX.
| Controlador de Ingress de la comunidad | Controlador de Ingress de NGINX |
|---|---|
|
|
|
|
|
|
|
|
Control del tráfico
En entornos de microservicios, donde las aplicaciones son efímeras por naturaleza y, por tanto, más propensas a devolver respuestas de error, los equipos de DevOps recurren ampliamente a políticas de control del tráfico —como los disyuntores y la limitación de la tasa y de las conexiones— para evitar situaciones de error cuando las aplicaciones presentan problemas o no funcionan según lo previsto.
La tabla muestra los campos de los recursos VirtualServer y VirtualServerRoute de NGINX que se corresponden con las anotaciones del controlador Ingress de la comunidad para la limitación de velocidad, los errores HTTP personalizados, un backend predeterminado personalizado y la reescritura de URI.
| Community Ingress Controller | NGINX Ingress Controller |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Como se indica en la tabla, en el momento de redactar este documento, los recursos de NGINX Ingress no incluyen campos que permitan trasladar directamente las cuatro anotaciones siguientes del controlador Ingress de la comunidad, por lo que es necesario usar fragmentos de configuración. Está previsto que las próximas versiones de NGINX Ingress Controller admitan directamente estas cuatro anotaciones mediante recursos Policy.
nginx.ingress.kubernetes.io/limit-connectionsnginx.ingress.kubernetes.io/limit-ratenginx.ingress.kubernetes.io/limit-rate-afternginx.ingress.kubernetes.io/limit-whitelist
Manipulación de cabeceras
La manipulación de las cabeceras HTTP resulta útil en muchos casos, ya que contienen información adicional importante y relevante para los sistemas que intervienen en una transacción HTTP. Por ejemplo, el controlador Ingress de la comunidad permite habilitar y configurar cabeceras de uso compartido de recursos entre orígenes (CORS), que se utilizan con aplicaciones AJAX cuando el código JavaScript del front-end ejecutado en un navegador se conecta a una aplicación de backend o a un servidor web.
La tabla muestra los campos de los recursos VirtualServer y VirtualServerRoute de NGINX que se corresponden con las anotaciones del controlador Ingress de la comunidad para la manipulación de encabezados.
| Controlador Ingress de la comunidad | Controlador Ingress de NGINX |
|---|---|
|
|
Proxy inverso y balanceo de carga
Existen otras funcionalidades de proxy y balanceo de carga que puede interesarle configurar en NGINX Ingress Controller en función del caso de uso específico. Estas funcionalidades incluyen la configuración del algoritmo de balanceo de carga, así como de los tiempos de espera y del almacenamiento en búfer para las conexiones mediante proxy.
La tabla muestra las directivas del campo upstream de los recursos VirtualServer y VirtualServerRoute de NGINX que se corresponden con las anotaciones del controlador Ingress de la comunidad para el equilibrio de carga personalizado de NGINX, los tiempos de espera del proxy, el almacenamiento en búfer del proxy y el enrutamiento de conexiones a la dirección IP y al puerto de ClusterIP de un servicio.
| Controlador Ingress de la comunidad | Controlador Ingress de NGINX |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Autenticación mTLS
Una malla de servicios resulta especialmente útil en un entorno estricto de confianza cero, donde las aplicaciones distribuidas dentro de un clúster se comunican de forma segura mediante autenticación mutua. ¿Y si necesitamos aplicar ese mismo nivel de seguridad al tráfico que entra y sale del clúster (tráfico norte-sur)?
Podemos configurar la autenticación mTLS en la capa del controlador de Ingress para que los sistemas finales de las conexiones externas se autentiquen mutuamente presentando un certificado válido.
La tabla muestra los campos de los recursos Policy de NGINX que se corresponden con las anotaciones del controlador Ingress de la comunidad para la autenticación mediante certificado de cliente y la autenticación mediante certificado del backend.
| Controlador de Ingress de la comunidad | Controlador de Ingress de NGINX |
|---|---|
|
|
|
|
Persistencia de sesión (exclusiva de NGINX Plus)
La tabla muestra los campos de los recursos Policy de NGINX que son exclusivos de NGINX Ingress Controller basado en NGINX Plus y que se corresponden con las anotaciones del controlador Ingress de la comunidad para la persistencia de sesión (afinidad).
| Controlador de Ingress de la comunidad | Controlador de Ingress de NGINX |
|---|---|
|
|
Opción 2: Migrar mediante el recurso Ingress de Kubernetes
La segunda opción para migrar del controlador Ingress de la comunidad a NGINX Ingress Controller consiste en utilizar únicamente anotaciones y ConfigMaps en el recurso Ingress estándar de Kubernetes y, posiblemente, recurrir a un procesamiento de tipo «maestro/minion». De este modo, toda la configuración se mantiene en el objeto Ingress.
Nota: Con este método, no modifique el campo spec del recurso Ingress.
Configuración avanzada con anotaciones
La siguiente tabla muestra las anotaciones del controlador Ingress de la comunidad que se corresponden directamente con las anotaciones compatibles con NGINX Ingress Controller.
| Community Ingress Controller | NGINX Ingress Controller | NGINX Directive |
|---|---|---|
| N/A | ||
| Default:
|
||
|
||
|
||
|
||
|
||
|
||
|
||
| N/A | ||
|
|
N/A2 |
1El controlador Ingress de la comunidad utiliza Lua para implementar algunos de sus algoritmos de equilibrio de carga. NGINX Ingress Controller no dispone de un equivalente para todos ellos.
2Redirige el tráfico HTTP a HTTPS. El controlador Ingress de la comunidad implementa esta función con código Lua, mientras que NGINX Ingress Controller utiliza condiciones if nativas de NGINX.
La siguiente tabla muestra las anotaciones del controlador Ingress de la comunidad que se corresponden directamente con las anotaciones compatibles con NGINX Ingress Controller basado en NGINX Plus.
| Controlador Ingress de la comunidad | Controlador Ingress de NGINX basado en NGINX Plus |
|---|---|
|
|
Nota: NGINX Ingress Controller basado en NGINX Plus dispone de anotaciones adicionales para funciones que el controlador Ingress de la comunidad no admite en absoluto, entre ellas las comprobaciones de estado activas y la autenticación mediante tokens web JSON (JWT).
Configuración global con ConfigMaps
La siguiente tabla relaciona las claves de ConfigMap del controlador Ingress de la comunidad con sus correspondientes claves de ConfigMap de NGINX Ingress Controller. Tenga en cuenta que algunos nombres de claves de ConfigMap son idénticos. Además, tanto el controlador Ingress de la comunidad como NGINX Ingress Controller tienen claves de ConfigMap que el otro no tiene (no se muestran en la tabla).
Resumen
Puede migrar del controlador Ingress de la comunidad a NGINX Ingress Controller utilizando recursos personalizados de NGINX Ingress o el recurso Ingress estándar de Kubernetes con anotaciones y ConfigMaps. La primera opción admite un conjunto más amplio de funcionalidades de red, por lo que resulta más adecuada para entornos de Kubernetes de nivel empresarial.
Este artículo es un extracto de nuestro completo libro electrónico, «Gestión del tráfico de Kubernetes con F5 NGINX: guía práctica». «Descárgalo gratis hoy mismo».
Prueba por ti mismo NGINX Ingress Controller basado en NGINX Plus con una prueba gratuita de 30 días o ponte en contacto con nosotros para hablar sobre tus casos de uso.
Sobre el autor

Artículos relacionados del blog
Únete a F5 NGINX en AppWorld 2024
Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.
Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.
Exposición de APIs en Kubernetes
La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».
NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.
Presentamos NGINX Plus R22
NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.
Presentamos NGINX Plus R17
NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.