Ejecutar y gestionar aplicaciones de microservicios en contenedores a gran escala en un clúster de máquinas es una tarea compleja. Kubernetes le ayuda a afrontar este reto ofreciéndole una potente solución para la orquestación de contenedores. Incluye varias funciones importantes, como la tolerancia a fallos, el escalado automático, las actualizaciones graduales, el almacenamiento, la detección de servicios y el equilibrio de carga.
En esta entrada del blog explicamos cómo utilizar NGINX Open Source o NGINX Plus con Ingress, el sistema de equilibrio de carga integrado en Kubernetes para el tráfico HTTP. Ingress permite configurar reglas que controlan el enrutamiento del tráfico externo hacia los servicios del clúster de Kubernetes. Puede elegir cualquier equilibrador de carga que proporcione un controlador de Ingress, es decir, un software que se implementa en el clúster para integrar Kubernetes con el equilibrador de carga. Aquí mostramos cómo configurar el equilibrio de carga para una aplicación de microservicios mediante Ingress y los controladores de Ingress que ofrecemos para NGINX Plus y NGINX.
[Editor: Los controladores de NGINX y NGINX Plus, que antes estaban separados, se han fusionado en un único controlador Ingress para ambos.]
En esta entrada del blog analizamos únicamente el balanceo de carga HTTP para Kubernetes con Ingress. Para obtener más información sobre otras opciones de balanceo de carga, consulte Balanceo de carga de servicios de Kubernetes con NGINX Plus en nuestro blog.
Nota: Las instrucciones completas de los procedimientos descritos en esta entrada del blog están disponibles en nuestro repositorio de GitHub. Esta entrada no detalla todos los pasos necesarios, sino que proporciona enlaces a dichas instrucciones.
Controladores de Ingress para NGINX y NGINX Plus
Antes de implementar la aplicación de ejemplo y configurar el balanceo de carga, debemos elegir un balanceador de carga e implementar el controlador de Ingress correspondiente.
Un controlador de Ingress es un software que integra un equilibrador de carga específico con Kubernetes. Hemos desarrollado un controlador de Ingress tanto para NGINX Open Source como para NGINX Plus, que ya está disponible en nuestro repositorio de GitHub. También existen otras implementaciones creadas por terceros. Para obtener más información, visite la página Controladores de Ingress del repositorio de GitHub de Kubernetes.
Para obtener instrucciones completas sobre cómo implementar el controlador Ingress de NGINX o NGINX Plus en su clúster, consulte nuestro repositorio de GitHub.
La aplicación de microservicios de ejemplo
Nuestra aplicación de ejemplo es una aplicación web típica de microservicios, compuesta por varios servicios que se implementan por separado. La aplicación, denominada cafe, permite pedir té a través del servicio tea o café a través del servicio coffee. La preferencia de bebida se indica mediante el URI de la solicitud HTTP: los URI que terminan en /tea sirven té y los que terminan en /coffee sirven café. Las conexiones a la aplicación deben protegerse mediante SSL/TLS.
El siguiente diagrama representa conceptualmente la aplicación, en la que el balanceador de carga NGINX Plus desempeña la importante función de dirigir las solicitudes de los clientes al servicio adecuado, además de proteger las conexiones de los clientes mediante SSL/TLS.

Para desplegar la aplicación en su clúster, siga las instrucciones de nuestro repositorio de GitHub.
Configuración del balanceo de carga de Kubernetes mediante Ingress
Nuestra aplicación cafe requiere que el balanceador de carga proporcione dos funciones:
- Enrutamiento basado en el URI de la solicitud (también denominado «enrutamiento basado en rutas»)
- Terminación SSL/TLS
Para configurar el balanceo de carga con Ingress, debe definir reglas en un recurso Ingress. Estas reglas especifican cómo dirigir el tráfico externo a los servicios de su clúster.
En el recurso puede definir varios servidores virtuales, cada uno para un nombre de dominio diferente. Un servidor virtual suele corresponder a una única aplicación de microservicios desplegada en el clúster. Para cada servidor, puede:
- Especifique varias reglas basadas en rutas. El tráfico se envía a distintos servicios de una aplicación en función del URI de la solicitud.
- Configure la terminación SSL/TLS haciendo referencia a un certificado SSL/TLS y a una clave.
Puedes encontrar una explicación más detallada de Ingress, con ejemplos, en la página de documentación de Ingress.
Este es el recurso Ingress (cafe‑ingress.yaml) de la aplicación cafe:
Cargando ejemplo de código…
Al examinarlo línea por línea, vemos lo siguiente:
- En la línea 4, asignamos al recurso el nombre cafe‑ingress.
- En las líneas 6–9 configuramos la terminación SSL/TLS:
- En la línea 9 hacemos referencia a un recurso Secret por su nombre, cafe‑secret. Este recurso contiene el certificado SSL/TLS y la clave y debe implementarse antes que el recurso Ingress.
- En la línea 8 aplicamos el certificado y la clave a nuestro servidor virtual cafe.example.com.
- En la línea 11 definimos un servidor virtual con el nombre de dominio cafe.example.com.
- En las líneas 13–21 definimos dos reglas basadas en rutas:
- La regla definida en las líneas 14–17 indica al balanceador de carga que distribuya las solicitudes con el URI /tea entre los contenedores del servicio tea, que está desplegado con el nombre tea‑svc en el clúster.
- La regla definida en las líneas 18–21 indica al equilibrador de carga que distribuya las solicitudes con el URI /coffee entre los contenedores del servicio coffee, que está desplegado con el nombre coffee‑svc en el clúster.
- Ambas reglas indican al balanceador de carga que distribuya las solicitudes al puerto 80 del servicio correspondiente.
Para obtener instrucciones completas sobre cómo desplegar los recursos Ingress y Secret en el clúster, consulte nuestro repositorio de GitHub.
Prueba de la aplicación
Una vez que hayamos desplegado el controlador Ingress de NGINX Plus, nuestra aplicación, el recurso Ingress y el recurso Secret, podremos probar la aplicación.
Cuando realizamos una solicitud de té con el URI /tea, vemos en el navegador una página generada por el servicio tea.

Esperamos que no le decepcione demasiado que los servicios de té y café no le sirvan bebidas, sino que le proporcionen información sobre los contenedores en los que se ejecutan y los detalles de su solicitud. Entre ellos se incluyen el nombre de host y la dirección IP del contenedor, el URI de la solicitud y la dirección IP del cliente. Cada vez que actualizamos la página, obtenemos una respuesta de un contenedor diferente.
También podemos conectarnos al panel de supervisión de la actividad en tiempo real de NGINX Plus y consultar métricas de balanceo de carga en tiempo real de NGINX Plus y de cada contenedor de nuestra aplicación.

Extensiones del controlador de Ingress
Ingress proporciona funciones básicas de equilibrio de carga HTTP. Sin embargo, a menudo los requisitos de equilibrio de carga de sus aplicaciones son más complejos y, por tanto, Ingress no los admite. Para satisfacer algunos de esos requisitos, hemos añadido varias extensiones al controlador de Ingress. De este modo, puede seguir aprovechando los recursos de Kubernetes para configurar el equilibrio de carga (en lugar de tener que configurar directamente el equilibrador de carga) y, al mismo tiempo, utilizar funciones avanzadas de equilibrio de carga.
Para consultar una lista completa de las extensiones disponibles, visita nuestro repositorio de GitHub.
Además, proporcionamos un mecanismo para personalizar la configuración de NGINX mediante recursos de Kubernetes, ya sea a través de recursos ConfigMap o de anotaciones. Por ejemplo, puede personalizar los valores de las directivas proxy_connect_timeout o proxy_read_timeout.
Cuando sus requisitos de balanceo de carga superen las funcionalidades que ofrecen Ingress y nuestras extensiones, le recomendamos un enfoque diferente para implementar y configurar NGINX Plus que no utilice el controlador Ingress. Lea Balanceo de carga de servicios de Kubernetes con NGINX Plus en nuestro blog para obtener más información.
Ventajas de NGINX Plus con el controlador
Con NGINX Plus, el controlador de Ingress ofrece las siguientes ventajas, además de las que proporciona NGINX:
- Estabilidad en un entorno altamente dinámico – Cada vez que cambia el número de pods de los servicios expuestos mediante Ingress, el controlador de Ingress debe actualizar la configuración de NGINX o NGINX Plus para reflejar los cambios. Con NGINX Open Source, debe modificar manualmente el archivo de configuración y volver a cargar la configuración. Con NGINX Plus, puede utilizar la API de reconfiguración dinámica para actualizar la configuración sin volver a cargar el archivo de configuración. Esto evita el posible aumento del uso de memoria y la sobrecarga general del sistema que pueden producirse cuando las recargas de la configuración son muy frecuentes.
- Estadísticas en tiempo real – NGINX Plus proporciona estadísticas avanzadas en tiempo real, a las que puede acceder mediante una API o desde el panel de control integrado. Esto le permite conocer el rendimiento de NGINX Plus y de sus aplicaciones.
- Persistencia de sesión – Al habilitar la persistencia de sesión, NGINX Plus garantiza que todas las solicitudes del mismo cliente se dirijan siempre al mismo contenedor de backend mediante el método de cookie persistente.
Resumen
Kubernetes proporciona balanceo de carga HTTP integrado para dirigir el tráfico externo a los servicios del clúster mediante Ingress. NGINX y NGINX Plus se integran con el balanceo de carga de Kubernetes, ofrecen compatibilidad total con las funciones de Ingress y también proporcionan extensiones para satisfacer requisitos avanzados de balanceo de carga.
Para probar NGINX Plus y el controlador Ingress, inicie hoy mismo su prueba gratuita de 30 días o póngase en contacto con nosotros para hablar sobre sus 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.