Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Best practices for the NGINX Ingress controller

Última actualización: Sep 12, 2026

Este tema describe las mejores prácticas para configurar el controlador NGINX Ingress y lograr un rendimiento óptimo en diversos escenarios.

En este tema

Rendimiento y estabilidad del controlador NGINX Ingress

Réplicas adecuadas y límites de recursos

De forma predeterminada, un controlador NGINX Ingress instalado durante la creación del clúster o desde la página Add-ons cuenta con dos réplicas. Ajuste esta cantidad según los requisitos de su negocio. Asegúrese de que los pods del controlador NGINX Ingress se distribuyan en distintos nodos para evitar la contención de recursos y los puntos únicos de falla. También puede asignar nodos exclusivos para garantizar el rendimiento y la estabilidad. Para obtener más información, consulte Use exclusive nodes to improve NGINX Ingress performance and stability. No establezca límites de recursos para el controlador NGINX Ingress; así evitará interrupciones de tráfico por eventos de falta de memoria (OOM). Si es obligatorio establecerlos, configure el límite de CPU como mínimo en 1,000 millicores y el de memoria como mínimo en 2 GiB.

Uso de nodos exclusivos

Optimización del rendimiento de NGINX Ingress

La optimización del rendimiento del controlador NGINX Ingress abarca dos áreas principales: el ajuste de parámetros del sistema y el ajuste de parámetros de NGINX.

  • Ajuste de parámetros del sistema: los sistemas operativos de Alibaba Cloud incluyen optimizaciones predeterminadas para los parámetros comunes. Otros parámetros del sistema que podría necesitar ajustar incluyen el backlog máximo del sistema y el rango de puertos disponibles. Este ajuste ayuda a asegurar que NGINX maneje una alta concurrencia y previene fallas de conexión hacia los backends por agotamiento de puertos.

  • Ajuste de parámetros de NGINX:

    • Ajustar el número máximo de conexiones por proceso worker garantiza que el controlador NGINX Ingress maneje una alta concurrencia.

    • Aumentar el tiempo de espera de conexión: a diferencia del comportamiento predeterminado de NGINX, el controlador NGINX Ingress usa conexiones keep-alive para enviar solicitudes a los pods del backend. Por lo tanto, aumente el tiempo de espera de conexión para permitir que una sola conexión procese más solicitudes y reducir la sobrecarga de crear conexiones nuevas.

    • Establecer el tiempo de espera de keep-alive: configure el tiempo de espera de keep-alive de los servicios del backend para que sea igual o mayor al tiempo de espera de conexión del controlador NGINX Ingress, cuyo valor predeterminado es 900 s en los clústeres ACK.

El componente NGINX Ingress incluye parámetros de ajuste predeterminados que ofrecen un rendimiento óptimo en la mayoría de los escenarios. Si tiene requisitos específicos, puede optimizar aún más los parámetros del sistema y de NGINX mediante los campos correspondientes del ConfigMap. Para obtener más información sobre los ConfigMaps, consulte ConfigMaps.

Escalado automático con HPA

En la mayoría de los casos, el controlador NGINX Ingress maneja picos repentinos de tráfico. Si la capacidad predeterminada resulta insuficiente para sus escenarios de alta carga, configure un Horizontal Pod Autoscaler (HPA) para escalar automáticamente el controlador NGINX Ingress. Para obtener más información, consulte Use Horizontal Pod Autoscaler (HPA).

Importante

Los eventos de escalado de pods pueden interrumpir temporalmente las conexiones existentes. Configure esta función con precaución.

A continuación se muestra un ejemplo de configuración YAML:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-ingress-controller-hpa
  namespace: kube-system
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-ingress-controller
  minReplicas: 2
  maxReplicas: 5
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

Configuración de un hook preStop

Durante una actualización continua de un servicio del backend, el controlador NGINX Ingress elimina el endpoint de un pod en finalización y mantiene las conexiones de las solicitudes en curso. Si un pod del servicio del backend se cierra inmediatamente después de recibir la señal de terminación, las solicitudes en curso podrían fallar. Debido a problemas de sincronización, parte del tráfico nuevo podría seguir dirigiéndose al pod finalizado, lo que provoca pérdida de tráfico.

Para evitar la pérdida de tráfico durante las actualizaciones continuas, configure un hook preStop en los pods de su servicio del backend. Este hook permite que el pod siga procesando las solicitudes en curso después de eliminar su endpoint, lo que previene interrupciones del servicio.

Agregue el siguiente código a la configuración del contenedor en la plantilla del pod:

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - name: app
        lifecycle:
          # Configure a preStop hook to wait for 30 seconds before exiting.
          # The sleep command must be available in the container.
          preStop:
            exec:
              command:
              - sleep
              - "30"

Observability del controlador NGINX Ingress

Log Service y Managed Service for Prometheus

El controlador NGINX Ingress proporciona paneles de monitoreo basados en los registros de Log Service (SLS) y Prometheus para ayudarle a comprender mejor el tráfico de su servicio.

  • Registros de Log Service (SLS):

    • Si selecciona Enable Log Service y Create Ingress Dashboard al crear un clúster, vaya a la consola de ACK, elija Network > Ingresses y luego consulte el panel basado en Log Service en la página NGINX Ingress Overview. También puede ir a Operations > Log Center para consultar los registros generados por el controlador NGINX Ingress. Para obtener más información, consulte Collect and analyze NGINX Ingress access logs.

    • Si no habilitó estas opciones durante la creación del clúster, configure manualmente el componente y las reglas de recopilación de registros. Para obtener más información, consulte Collect and analyze NGINX Ingress access logs. Para obtener más información sobre el monitoreo, consulte Ingress dashboard monitoring.

  • Monitoreo de Managed Service for Prometheus: puede elegir instalar el monitoreo de Managed Service for Prometheus cuando cree un clúster. De manera alternativa, después de crear el clúster, instálelo o consúltelo si elige Operations > Prometheus Monitoring. Para obtener más información, consulte Connect and configure Managed Service for Prometheus.

    Nota

    Cuando use Managed Service for Prometheus, agregue el campo host a los recursos Ingress del clúster. De lo contrario, algunas métricas del Ingress faltarán de forma predeterminada. Como alternativa, agregue el argumento de inicio --metrics-per-host=false al controller en el Deployment del controlador NGINX Ingress.

Funciones avanzadas del controlador NGINX Ingress

Uso de varios controladores NGINX Ingress

Es posible que necesite desplegar varios controladores NGINX Ingress en un clúster, por ejemplo, para aislar el tráfico interno del externo. Para obtener más información, consulte Deploy multiple Ingress controllers for traffic isolation.

Acceso dentro del clúster

Dentro de un clúster, iptables o IPVS suelen interceptar y reenviar el tráfico dirigido al endpoint externo de un LoadBalancer Service (la dirección IP pública del controlador NGINX Ingress). Cuando externalTrafficPolicy se establece en Local y ningún pod de NGINX Ingress se ejecuta en un nodo, se producen problemas de conectividad de red. De forma predeterminada, el controlador NGINX Ingress en un clúster ACK usa un LoadBalancer Service en modo Local. En consecuencia, podría experimentar problemas de conectividad al acceder a la dirección del Classic Load Balancer (CLB) asociado desde dentro del clúster. Por lo tanto, para el acceso dentro del clúster, utilice el ClusterIP del Service o el nombre de dominio interno (nginx-ingress-lb.kube-system). Además, evite los escenarios donde el controlador NGINX Ingress intente acceder a sí mismo, ya que esto puede provocar fallas de red debido a problemas de hairpinning. Para obtener más información sobre cómo resolver este problema, consulte No se puede acceder a la instancia SLB de un LoadBalancer Service desde dentro de un clúster de Kubernetes.

Uso de WAF

Para bloquear solicitudes maliciosas, habilite Web Application Firewall (WAF) en el Classic Load Balancer (CLB) que utiliza el controlador NGINX Ingress de su clúster. Cuando habilite WAF en un puerto HTTPS, también debe configurar el certificado obligatorio en la consola de WAF. Esto puede generar los siguientes problemas:

  • Las solicitudes TLS terminan en la capa de WAF. Por lo tanto, los certificados configurados en un Secret de Kubernetes no se utilizarán para el endpoint público.

  • Cuando acceda al puerto 443 desde dentro del clúster mediante la dirección IP del CLB o el ClusterIP del Service, es posible que el tráfico no pase por WAF, lo que genera errores de certificado.

  • Con WAF habilitado, el controlador NGINX Ingress no puede obtener la dirección IP real del cliente de forma predeterminada. Agregue el siguiente contenido al ConfigMap (de forma predeterminada, nginx-configuration en el espacio de nombres kube-system para los controladores NGINX Ingress instalados mediante la gestión de componentes) para habilitar el módulo Realip de NGINX y usar el encabezado X-Forwarded-For con el fin de obtener la dirección IP real del cliente.

    use-forwarded-headers: "true" # Use this option for NGINX Ingress controller version 0.30.0 and earlier.
    enable-real-ip: "true" # Use this option for NGINX Ingress controller version 0.44.0 and later.
    proxy-real-ip-cidr: <The back-to-origin CIDR block that you obtain from WAF>

Despliegues azul-verde o versiones canary

Puede implementar una versión canary con el controlador NGINX Ingress mediante la función disponible en la consola de ACK o si agrega manualmente una anotación. Para obtener más información, consulte Use NGINX Ingress to implement canary releases and blue-green deployments.

Importante

El Ingress canary debe ser el único que haga referencia a los Services original y canary. De lo contrario, pueden surgir conflictos entre las reglas canary y provocar errores en el enrutamiento del tráfico.

Proxy de solicitudes que no son HTTP

De forma predeterminada, el controlador NGINX Ingress se conecta a los Services del backend mediante el protocolo HTTP. Sin embargo, también admite varios protocolos de backend, entre los cuales WebSocket, HTTPS y gRPC son los más comunes. Para ver la lista completa de protocolos de backend compatibles, consulte Backend Protocol.

  • WebSocket: el controlador NGINX Ingress ofrece compatibilidad nativa con WebSocket. No se requiere configuración adicional para reenviar conexiones WebSocket. Si tiene conexiones WebSocket de larga duración, utilice una anotación para ajustar el tiempo de espera de conexión del backend y evitar desconexiones por este motivo. Para obtener más información sobre cómo realizar estos ajustes, consulte Custom timeouts.

  • HTTPS: para los Services del backend que usan HTTPS, agregue la anotación nginx.ingress.kubernetes.io/backend-protocol:"HTTPS" al Ingress para cambiar a conexiones HTTPS.

  • gRPC: solo se puede acceder a gRPC a través de puertos TLS. Por lo tanto, asegúrese de usar un puerto TLS cifrado cuando su aplicación acceda a servicios gRPC a través del controlador NGINX Ingress. Para obtener más información sobre cómo configurar gRPC, consulte Configure a gRPC service for NGINX Ingress.