Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Create and use an NGINX Ingress

Última actualización: Oct 09, 2026

El NGINX Ingress Controller funciona como puerta de enlace de entrada para los clústeres administrados de Alibaba Cloud Container Service for Kubernetes (ACK). Este componente enruta el tráfico externo hacia los servicios internos mediante reglas de enrutamiento flexibles. Admite funciones como cifrado HTTPS, versiones canary y configuraciones personalizadas a través de anotaciones, por lo que ofrece acceso de red de capa 7 (L7) seguro, de alta disponibilidad y escalable.

Importante

Notas de uso

  • No elimine el servicio predeterminado que utiliza el NGINX Ingress Controller. Después de instalar el complemento, se crea un servicio predeterminado llamado nginx-ingress-lb en el namespace kube-system. Si elimina este servicio, el complemento se vuelve inestable y puede fallar.

  • Utilice Add-ons o OpenAPI para configurar parámetros personalizados del complemento. Si modifica la configuración por otros métodos, el complemento puede funcionar mal e interferir con futuras actualizaciones.

  • Use NGINX Ingress ConfigMap para las configuraciones personalizadas. El soporte técnico no cubre los problemas derivados de configuraciones adicionales, como snippets o código Lua.

  • Actualice NGINX Ingress Controller add-on de inmediato para evitar interrupciones del negocio causadas por errores o vulnerabilidades de seguridad en la versión de la comunidad upstream.

Instalar el complemento NGINX Ingress Controller

Durante la creación del clúster

1. Seleccionar el complemento

  1. Inicie sesión en la consola de ACK y haga clic en Create Kubernetes Cluster.

  2. En el paso Component Configurations, dentro de la sección Ingress, seleccione NGINX Ingress.

2. Seleccionar un origen de Server Load Balancer (SLB)

  • New: crea automáticamente una instancia de CLB pública o privada multizona en la VPC del clúster. La instancia utiliza el método de facturación pay-by-specification y tiene un specified instance type.

  • Use Existing: seleccione una instancia de CLB pública existente en la misma región que el clúster, o bien una instancia de CLB privada en la misma VPC. Asegúrese de que la instancia de CLB no esté asociada a otro clúster.

Instalar desde la página Add-ons

Si instala el complemento desde la página Add-ons, se crea automáticamente una instancia de CLB orientada al público. Esta instancia utiliza el método de facturación pay-by-specification y el tipo de instancia Small I (slb.s1.small), y sirve como punto de entrada de tráfico para el NGINX Ingress.

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Components and Add-ons .

  3. Busque el complemento NGINX Ingress Controller en la pestaña Network o mediante la barra de búsqueda. En la esquina inferior derecha de la tarjeta del complemento, haga clic en Install.

  4. En el cuadro de diálogo Install Comment NGINX Ingress Controller, configure los parámetros y haga clic en OK.

Crear una aplicación de ejemplo

La aplicación de ejemplo despliega dos cargas de trabajo sin estado (Deployments) llamadas coffee y tea, junto con sus Services correspondientes: coffee-svc y tea-svc.

Console

1. Crear recursos

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Workloads > Deployments.

  3. Haga clic en Create from YAML. Seleccione Custom en la lista desplegable Sample Template. Copie el siguiente contenido en el editor de plantillas y haga clic en Create.

    YAML de la aplicación de ejemplo

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tea
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: tea
      template:
        metadata:
          labels:
            app: tea
        spec:
          containers:
          - name: tea
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tea-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: tea
      type: ClusterIP

2. Consultar el resultado

En el cuadro de diálogo YAML Resource Creation Result, haga clic en View dentro de la columna Actions de un recurso para confirmar que se creó correctamente.

kubectl

  1. Obtain the KubeConfig for your cluster and use kubectl to connect to the cluster.

  2. Cree un archivo llamado test-deployment-service.yaml con el siguiente contenido.

    Archivo YAML de ejemplo

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tea
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: tea
      template:
        metadata:
          labels:
            app: tea
        spec:
          containers:
          - name: tea
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tea-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: tea
      type: ClusterIP
  3. Aplique la configuración para crear el Deployment y el Service.

    kubectl apply -f test-deployment-service.yaml
  4. Compruebe el estado de los Deployments coffee y tea.

    kubectl get deployment coffee tea

    Salida esperada:

    NAME     READY   UP-TO-DATE   AVAILABLE   AGE
    coffee   2/2     2            2           14m
    tea      2/2     2            2           14m
  5. Compruebe el estado de los Services coffee-svc y tea-svc.

    kubectl get service coffee-svc tea-svc

    Salida esperada:

    NAME         TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)   AGE
    coffee-svc   ClusterIP   192.168.xxx.xxx   <none>        80/TCP    15m
    tea-svc      ClusterIP   192.168.xxx.xxx   <none>        80/TCP    15m

Crear un NGINX Ingress

Este ejemplo utiliza test-nginx-ingress.com como nombre de dominio (host). Sustitúyalo por su propio nombre de dominio registrado. La asignación de rutas (paths) proviene del ejemplo de Create a sample application. Modifique estas rutas para que coincidan con la configuración de su aplicación.

Console

1. Crear un Ingress

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre del clúster de destino. En el panel de navegación izquierdo, elija Network > Ingresses. Seleccione el namespace default, haga clic en Create Ingress y configure el Ingress de la siguiente manera.

    • Gateway Type: Nginx Ingress

    • Name: test-nginx-ingress

    • Domain Name: test-nginx-ingress.com (sustitúyalo por su nombre de dominio registrado)

    • Mappings:

      • Path: /coffee

      • Rule: Default (ImplementationSpecific)

      • Service: coffee-svc

      • Port: 80

  3. Haga clic en +Add para configurar una ruta para el servicio tea-svc.

    • Mappings:

      • Path: /tea

      • Rule: Default (ImplementationSpecific)

      • Service: tea-svc

      • Port: 80

  4. Haga clic en +Add Rule para agregar el nombre de dominio www.test-nginx-ingress.com (sustitúyalo por su nombre de dominio registrado) y configure sus asignaciones de rutas. Cuando termine, haga clic en OK.

2. Obtener el endpoint

Después de aproximadamente un minuto, actualice la página. El Nginx Ingress se habrá creado correctamente cuando aparezca una dirección IP elástica (EIP) en la columna Endpoint. Esta EIP es la dirección de servicio pública de la instancia de Cloud Load Balancer (CLB) asociada.

Si la información del endpoint no aparece después de unos minutos, haga clic en el nombre del Ingress y revise la pestaña Events para solucionar el problema.

kubectl

  1. Cree un archivo llamado test-ingress.yaml con el siguiente contenido.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: test-nginx-ingress
      namespace: default
    spec:
      ingressClassName: nginx
      rules:
      - host: test-nginx-ingress.com # Replace with your registered domain name
        http:
          paths:
          - path: /coffee
            backend:
              service: 
                name: coffee-svc
                port:
                  number: 80
            pathType: ImplementationSpecific
          - path: /tea
            backend:
              service: 
                name: tea-svc
                port:
                  number: 80
            pathType: ImplementationSpecific
      - host: www.test-nginx-ingress.com # Replace with your registered domain name
        http:
          paths:
          - path: /coffee
            backend:
              service: 
                name: coffee-svc
                port:
                  number: 80
            pathType: ImplementationSpecific
          - path: /tea
            backend:
              service: 
                name: tea-svc
                port:
                  number: 80
            pathType: ImplementationSpecific

    Descripción de los parámetros:

    • name: nombre del Ingress. En este ejemplo, el nombre es test-nginx-ingress.

    • host: nombre de dominio utilizado para acceder al servicio. En este ejemplo, el nombre de dominio es test-nginx-ingress.com. Sustitúyalo por su nombre de dominio registrado.

    • path: ruta de URL de la regla. Para que una solicitud se enrute al backend, debe coincidir con el host y la path especificados. En este ejemplo, las rutas son /coffee y /tea.

    • backend: consta de un nombre de servicio y un puerto de servicio.

      • Nombre del servicio: nombre del servicio de backend al que el Ingress reenvía el tráfico. Por ejemplo, coffee-svc y tea-svc.

      • Puerto del servicio: puerto de destino en el Service de backend. En este ejemplo, el puerto es 80.

  2. Cree el Ingress.

    kubectl apply -f test-ingress.yaml
  3. Consulte el Ingress y obtenga su dirección IP elástica (EIP), por ejemplo, 8.xxx.xxx.117.

    kubectl get ingress

    Salida esperada:

    NAME                 CLASS   HOSTS                                               ADDRESS         PORTS   AGE
    test-nginx-ingress   nginx   test-nginx-ingress.com,www.test-nginx-ingress.com   8.xxx.xxx.117   80      2m39s
  4. Utilice la EIP para comprobar que el Nginx Ingress funciona correctamente.

    curl http://8.xxx.xxx.117/coffee -H "Host: test-nginx-ingress.com"

    Salida esperada:

    ...
    <title>Hello World</title>
    ...
    <p><span>Server&nbsp;address:</span> <span>10.xxx.xxx.19:80</span></p>
    <p><span>Server&nbsp;name:</span> <span>coffee-96d4bc87-l29dh</span></p>
    <p class="smaller"><span>Date:</span> <span>08/Aug/2025:02:21:02 +0000</span></p>
    <p class="smaller"><span>URI:</span> <span>/coffee</span></p>
    ...
        <div id="footer">
            <div id="center" align="center">
                Request ID: 42e2d73c85b16b55b6ab52deb7d995d4<br/>
                &copy; NGINX, Inc. 2018
            </div>
        </div>
    ...

Configurar la resolución de DNS

Register a domain name. Solo necesita agregar un nombre de dominio si está registrado con un proveedor externo. Alibaba Cloud agrega automáticamente los nombres de dominio adquiridos en su plataforma a las zonas autoritativas públicas de Alibaba Cloud DNS, por lo que puede añadir directamente los registros DNS.

1. Agregar un nombre de dominio

  1. Vaya a Alibaba Cloud DNS - Public Zone.

    En la pestaña Public Zone, haga clic en Add Zone.

  2. Introduzca el nombre de dominio que desea agregar y seleccione la instancia Public Zone que creó. Para obtener más información sobre los parámetros, consulte Purchase and bind a domain name.

2. Agregar un registro DNS

  1. Busque el nombre de dominio de destino y haga clic en Settings en la columna Actions. Luego, haga clic en Add Record. Agregue un registro DNS con el tipo de registro A y el registro de host @. El Record Value es access address of the NGINX Ingress.

  2. Siga los mismos pasos para agregar otro registro DNS con el registro de host establecido en www.

  3. Haga clic en Probing junto al nuevo registro DNS para comprobar su estado de resolución.

Para obtener más información, consulte Add a website resolution record.

3. Comprobar el nombre de dominio y la ruta

En su navegador, visite http://test-nginx-ingress.com/coffee (reemplace test-nginx-ingress.com por su nombre de dominio real) para comprobar que la ruta del servicio sea accesible.

Si la solicitud se ejecuta correctamente, la página devuelve información del pod de backend de NGINX, incluidos los campos server address, server name, Date y URI.

Para confirmar el resultado, también puede consultar Methods for testing DNS resolution. Si un registro DNS no surte efecto, consulte Quickly troubleshoot DNS resolution failures.

Configurar la seguridad HTTPS

Adquiera un commercial certificate, y apply for the certificate. Asegúrese de que el certificado tenga el estado Issued. A continuación, siga estos pasos para descargar el certificado y agregar una configuración TLS. Esto habilita el acceso HTTPS cifrado a su dominio.

Console

1. Descargar el certificado

  1. Inicie sesión en la Certificate Management Service console. En el panel de navegación izquierdo, elija Certificate Management > SSL Certificate Management.

  2. En la pestaña Commercial Certificates, seleccione el certificado que desea descargar y haga clic en Download en la esquina inferior izquierda de la lista de certificados.

  3. En el cuadro de diálogo que aparece, seleccione Nginx como tipo de servidor, descargue el paquete del certificado y descomprímalo.

Para obtener más detalles, consulte Download an SSL certificate.

2. Crear un Secret

  1. Inicie sesión en la ACK console. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Configurations > Secrets.

  3. En la página Secrets, seleccione el namespace default, haga clic en Create en la esquina superior izquierda, configure un nuevo Secret en el panel que aparece y luego haga clic en OK.

    • Name: nginx-ingress-tls

    • Type: Ingress TLS Certificate

    • Certificates: el contenido completo del archivo de certificado descargado y descomprimido (.pem).

    • Key: el contenido completo del archivo de clave privada descargado y descomprimido (.key).

3. Agregar una configuración TLS

  1. En el panel de navegación izquierdo, elija Network > Ingresses. En la columna Actions de su Ingress de destino, haga clic en Update.

  2. En la página Modify Ingress, agregue la siguiente configuración TLS y luego haga clic en OK.

    • TLS Settings: Enabled

    • Domain Name: test-nginx-ingress.com (reemplace este valor por su nombre de dominio registrado real).

    • Secrets: nginx-ingress-tls

4. Comprobar el acceso HTTPS

En su navegador web, vaya a https://test-nginx-ingress.com/coffee (reemplace este valor por su nombre de dominio registrado real) para comprobar el acceso HTTPS cifrado a la ruta del servicio.

Kubectl

  1. Inicie sesión en la consola de Certificate Management Service. En el panel de navegación izquierdo, elija Certificate Management > SSL Certificate Management.

  2. En la pestaña Commercial Certificates, seleccione el certificado que desea descargar y haga clic en Download en la esquina inferior izquierda de la lista de certificados.

  3. En el cuadro de diálogo que aparece, seleccione Nginx como tipo de servidor, descargue el paquete del certificado y descomprímalo.

  4. Utilice el archivo de certificado descargado (.pem) y el archivo de clave privada (.key) para crear un Secret.

    kubectl create secret tls nginx-ingress-tls --cert test-nginx-ingress.com.pem --key test-nginx-ingress.com.key -n default
  5. Agregue una configuración TLS al Ingress test-nginx-ingress. Reemplace test-nginx-ingress.com en el comando por su nombre de dominio registrado real.

    kubectl patch ingress test-nginx-ingress -p '{"spec":{"tls":[{"hosts":["test-nginx-ingress.com"],"secretName":"nginx-ingress-tls"}]}}'
  6. Compruebe el acceso HTTPS cifrado a la ruta del servicio mediante la ejecución del siguiente comando con su Elastic IP Address real.

    curl -v -k https://8.xxx.xxx.117/coffee -H "Host: test-nginx-ingress.com"
    • Parámetros:

      • -v: muestra una salida detallada, incluido el handshake TLS.

      • -k (o --insecure): omite la verificación del certificado. Utilice esta opción si usa un certificado autofirmado.

    • Salida esperada:

      ...
      *   Trying 8.xxx.xxx.117:443...
      * Connected to 8.xxx.xxx.117 (8.xxx.xxx.117) port 443
      * ALPN: curl offers h2,http/1.1
      * (304) (OUT), TLS handshake, Client hello (1):
      * (304) (IN), TLS handshake, Server hello (2):
      * (304) (IN), TLS handshake, Unknown (8):
      * (304) (IN), TLS handshake, Certificate (11):
      * (304) (IN), TLS handshake, CERT verify (15):
      * (304) (IN), TLS handshake, Finished (20):
      * (304) (OUT), TLS handshake, Finished (20):
      ...
      <title>Hello World</title>
      ...
      <p><span>Server&nbsp;address:</span> <span>10.xxx.xxx.159:80</span></p>
      <p><span>Server&nbsp;name:</span> <span>coffee-96d4bc87-6cstv</span></p>
      <p class="smaller"><span>Date:</span> <span>14/Aug/2025:09:27:42 +0000</span></p>
      <p class="smaller"><span>URI:</span> <span>/coffee</span></p>
      ...
          <div id="footer">
              <div id="center" align="center">
                  Request ID: fee5fe107106748a35d99a2dbbbc6652<br/>
                  &copy; NGINX, Inc. 2018
              </div>
          </div>
      ...

Más configuraciones

Canary release

Para actualizar servicios, puede utilizar diversas estrategias de despliegue, como actualizaciones continuas, versiones por fases, despliegues blue-green y canary releases. Para obtener instrucciones detalladas, consulte Implement phased releases and blue-green deployments using NGINX Ingress.

Protocolo del servicio de backend

Para especificar el protocolo de un servicio de backend, agregue la anotación nginx.ingress.kubernetes.io/backend-protocol. Los protocolos compatibles son HTTP, HTTPS, gRPC y gRPCS. Para ver un ejemplo de configuración, consulte Configure a gRPC service for NGINX Ingress.

Reescritura de URL

Cuando utiliza el controlador NGINX Ingress, este reenvía las solicitudes según la ruta completa. Por ejemplo, una solicitud a /service1/api se reenvía a la ruta /service1/api del pod de backend. Si la ruta de su servicio de backend es /api, se produce una discrepancia de rutas que genera un error 404. Para resolver este problema, agregue la anotación nginx.ingress.kubernetes.io/rewrite-target y reescriba la ruta de la solicitud hacia el directorio correcto.

Para obtener instrucciones detalladas, consulte Configure URL redirection.

Anotaciones

NGINX Ingress es compatible con una amplia gama de funciones que se habilitan mediante anotaciones. Para obtener más información, consulte NGINX Ingress configuration dictionary y Advanced NGINX Ingress configurations.

Observability

Habilite Simple Log Service (SLS) durante la creación del clúster para acceder a informes completos de análisis de registros de acceso de NGINX Ingress y paneles de monitoreo en tiempo real. Para obtener más detalles, consulte Analyze and monitor NGINX Ingress access logs.

Escenarios de alta carga

Para mejorar el rendimiento y la estabilidad de NGINX Ingress Controller en escenarios de alta carga, consulte Configure an NGINX Ingress Controller for high-payload scenarios y Suggestions for using an NGINX Ingress Controller.

Preguntas frecuentes

Dirección IP externa inaccesible desde dentro de un clúster

Síntoma

Algunos pods del clúster no pueden acceder a los pods de backend mediante la dirección externa de NGINX Ingress Controller (la dirección IP de la instancia del load balancer), mientras que otros sí logran hacerlo.

Causa

Este problema se debe a la configuración externalTrafficPolicy del Service del controlador, la cual determina cómo se gestiona el tráfico externo. Cuando se establece en local, solo los pods de backend ubicados en el mismo nodo que el pod del controlador pueden recibir solicitudes. Cuando se establece en Cluster, el acceso funciona según lo esperado. Si un recurso dentro del clúster accede al Service mediante la dirección IP externa del load balancer, la solicitud también se trata como tráfico externo.

Solución

  • (Recomendado) Desde dentro del clúster de Kubernetes, acceda a NGINX Ingress mediante su ClusterIP o el nombre del servicio. El nombre del servicio de NGINX Ingress es nginx-ingress-lb.kube-system.

  • Ejecute kubectl edit svc nginx-ingress-lb -n kube-system para modificar el Service de NGINX Ingress. Cambie el valor externalTrafficPolicy del LoadBalancer Service a Cluster. Si el plugin de red de contenedores del clúster es Flannel, las solicitudes pierden la IP de origen del cliente. Si utiliza Terway, la IP de origen del cliente se conserva.

    Ejemplo:

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/backend-type: eni   # Passes traffic directly to the Elastic Network Interface (ENI).
      labels:
        app: nginx-ingress-lb
      name: nginx-ingress-lb
      namespace: kube-system
    spec:
      externalTrafficPolicy: Cluster

Para obtener más información sobre las anotaciones de Service, consulte Configure Classic Load Balancer (CLB) using annotations.

Encabezados o cookies de gran tamaño

Si una solicitud de cliente contiene encabezados o cookies de gran tamaño, NGINX Ingress podría devolver un error como "400 Request Header Or Cookie Too Large /Bad request". Para resolverlo, aumente el tamaño de los búferes mediante la modificación de los siguientes parámetros:

  • client-header-buffer-size: el tamaño del búfer para los encabezados de solicitud del cliente. El valor predeterminado es 1k.

  • large-client-header-buffers: el número máximo y el tamaño de los búferes utilizados para leer encabezados de solicitud de cliente de gran tamaño. El valor predeterminado es 4 8k.

Ejecute kubectl edit cm -n kube-system nginx-configuration para editar el ConfigMap y modificar estos parámetros. Ejemplo:

client-header-buffer-size: "16k"
large-client-header-buffers: "4 32k" 

Después de actualizar los parámetros, compruebe que el plano de datos de NGINX refleje los cambios. Ejecute kubectl exec <nginx-ingress-pod> -n kube-system -- cat /etc/nginx/nginx.conf | vim - para consultar el archivo nginx.conf y confirmar que los cambios del ConfigMap se hayan sincronizado.

Configuración de CORS

Habilite Cross-Origin Resource Sharing (CORS) mediante la adición de anotaciones específicas a la sección metadata.annotations de su recurso Ingress. Para obtener más información, consulte Configure CORS for NGINX Ingress.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/enable-cors: "true"     # Enables CORS.
    nginx.ingress.kubernetes.io/cors-allow-origin: "*"  # Allows access from all domains.
    nginx.ingress.kubernetes.io/cors-allow-methods: "GET, PUT, POST, DELETE, PATCH, OPTIONS"  # Allowed HTTP methods.
    nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range" # Allowed custom request headers.
    nginx.ingress.kubernetes.io/cors-expose-headers: "Content-Length,Content-Range"  # Exposed response headers.
    nginx.ingress.kubernetes.io/cors-max-age: "86400"  # Preflight request cache duration.
spec:
  ingressClassName: nginx
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: example-service
            port:
              number: 80

Paso directo de la IP del cliente

De forma predeterminada, NGINX Ingress utiliza los encabezados X-Forwarded-For y X-Real-IP para pasar la dirección IP del cliente. Sin embargo, si un cliente establece explícitamente estos encabezados en la solicitud, es posible que el servidor de backend no pueda obtener la dirección IP real del cliente.

Para habilitar el paso directo de la IP del cliente en la capa 7 para el Ingress, ejecute el comando kubectl edit cm -n kube-system nginx-configuration y agregue los siguientes parámetros al ConfigMap.

compute-full-forwarded-for: "true"
forwarded-for-header: "X-Forwarded-For"
use-forwarded-headers: "true"

Si NGINX Ingress se encuentra detrás de varias capas de proxy, ajuste la configuración según el parámetro proxy-real-ip-cidr. Agregue las direcciones IP de los proxies ascendentes a proxy-real-ip-cidr en formato CIDR y separe varios bloques CIDR con comas. Para obtener más información, consulte Use a WAF.

proxy-real-ip-cidr:  "0.0.0.0/0,::/0"  

En un escenario IPv6 con un Classic Load Balancer (CLB) ascendente, si el encabezado X-Forwarded-For que recibe NGINX Ingress está vacío, habilite Proxy Protocol en el CLB para obtener la dirección IP del cliente. Para obtener más información sobre Proxy Protocol, consulte Obtain real client IP addresses through a Layer 4 listener of a CLB instance.

Referencias