Este sitio utiliza cookies para garantizar que obtenga la mejor experiencia en nuestro sitio web.

Nginx y Kubernetes en sintonía: control y escalabilidad de tráfico simplificados

¡Hola, gente! Hoy nos adentramos en un tema que quizás ya sea parte de tu día a día en infraestructura, pero siempre hay algo más para explorar: Nginx con Kubernetes. Este dúo es más que una combinación clásica.

CloudScript Technology
29 de noviembre de 20244 min de lectura
Nginx y Kubernetes en sintonía: control y escalabilidad de tráfico simplificados

¡Hola, gente! Hoy vamos a sumergirnos en un tema que quizá ya forme parte de tu día a día en infraestructura, pero siempre hay algo más para explorar: Nginx con Kubernetes. Este dúo es más que una simple configuración de ingress, ofreciendo potencial para control detallado de tráfico, escalabilidad y optimizaciones que garantizan una arquitectura robusta y confiable.

Nginx como Ingress Controller en Kubernetes

Cuando hablamos de Kubernetes, sabemos que es fenomenal para orquestrar y gestionar microservicios, pero el tráfico que llega al cluster es un capítulo aparte. El Nginx Ingress Controller es el responsable de esta interfaz de entrada. Gestiona cómo los datos externos llegan y son dirigidos a los servicios internos, permitiéndonos configurar reglas para enrutamiento de peticiones HTTP y HTTPS, balanceo de carga y hasta manipulación de cabeceras.

En Kubernetes, puedes implementar el Nginx Ingress Controller como un Deployment o incluso como un DaemonSet, según la necesidad. Se ejecuta como un pod dentro del cluster y responde al recurso Ingress, que definimos en YAML. Este enfoque tiene dos ventajas: control granular sobre el tráfico y la capacidad de enrutar usuarios al servicio correcto basándose en reglas muy específicas.

Configuraciones y personalizaciones con anotaciones

Una de las grandes ventajas de Nginx en Kubernetes es la flexibilidad de personalización. A través de las anotaciones en el manifiesto de Ingress, puedes ajustar el comportamiento de cada servicio sin modificar la configuración global de Nginx. ¿Quieres limitar el tamaño de upload? Puedes agregar una anotación específica. ¿Necesitas ajustar el timeout de respuesta? Otra anotación lo resuelve. Acá un ejemplo:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: meu-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
spec:
  rules:
  - host: meusite.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: meu-servico
            port:
              number: 80

Anotaciones de Ingress Nginx: https://github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/nginx-configuration/annotations.md

Estas anotaciones son pequeñas líneas de código que, sin embargo, impactan directamente la forma como Nginx responde a las peticiones. Además, las anotaciones pueden usarse para optimizar la seguridad, configurando SSL con Let's Encrypt, por ejemplo, y habilitando la reescritura de URLs cuando sea necesario.

ConfigMap y configuraciones globales

En entornos de producción, donde el Nginx Ingress Controller necesita soportar un gran volumen de peticiones, el ConfigMap entra en juego. Permite ajustes más robustos y complejos que afectan todo el comportamiento de Nginx. Algunas configuraciones comunes incluyen el número máximo de conexiones simultáneas y el tamaño del buffer.

Acá un ejemplo de ConfigMap que puedes aplicar en Nginx:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
data:
  proxy-body-size: 64m
  proxy-connect-timeout: "30"
  worker-processes: "4

Claves del configmap de Ingress Nginx: https://docs.nginx.com/nginx-ingress-controller/configuration/global-configuration/configmap-resource/#summary-of-configmap-keys

Estos parámetros son especialmente útiles en escenarios de alta demanda, donde pequeñas optimizaciones pueden reducir significativamente la latencia y mejorar la experiencia del usuario.

Logos de Prometheus y Grafana

Monitoreo y métricas: Prometheus y Grafana

Otro aspecto vital para una implementación eficiente de Nginx en Kubernetes es el monitoreo. Integrar Nginx con Prometheus y Grafana no solo ayuda a entender cómo se está comportando el tráfico, sino que también permite anticipar cuellos de botella y ajustar las configuraciones según sea necesario.

El Nginx Ingress Controller ofrece métricas detalladas, desde el tiempo de respuesta de los servicios hasta la cantidad de peticiones por segundo, permitiendo que ajustes el autoscaling en base a métricas reales y prioricen servicios en casos de fallas o picos de tráfico.

Escalabilidad y alta disponibilidad

Por último, al ejecutar Nginx como Ingress Controller en Kubernetes, la escalabilidad es nativa. Con el Horizontal Pod Autoscaler (HPA), puedes definir políticas para que Nginx aumente o disminuya la cantidad de pods según la demanda. Para entornos críticos, vale considerar múltiples ingress controllers para mayor tolerancia a fallas, así como el uso de Load Balancers externos en nubes públicas.

Combinar Nginx con Kubernetes te permite aprovechar al máximo el poder de control y flexibilidad de ambas herramientas, entregando una capa de red personalizada, altamente configurable y segura. Ya sea ajustando tiempo de respuesta, optimizando configuraciones de seguridad o escalando en base a métricas, Nginx se adapta a Kubernetes para hacer que la gestión de tráfico sea una tarea más eficiente.

Si ya usas estas tecnologías, aprovecha para probar algunas de estas configuraciones y ver cómo pueden impactar positivamente tu entorno. Espero que este contenido haya traído insights prácticos para tu implementación.

Y ya sabes, si te gustó, no dejes de seguirnos.

¡Hasta la próxima!


Referencias:

NGINX Documentation. Disponible en: https://nginx.org/en/docs/.

Documentación de Kubernetes. Disponible en: https://kubernetes.io/pt-br/docs/home/.

Mantente al día

Recibe nuestros artículos sobre DevOps, Kubernetes, Platform Engineering y Cloud Native directamente en tu correo.

Sin spam. Cancela cuando quieras.