Todos os produtos
Search
Central de documentação

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

Última atualização: Sep 12, 2026

Este tópico descreve as melhores práticas para configurar o NGINX Ingress controller e garantir desempenho ideal em diversos cenários.

Neste tópico

Desempenho e estabilidade do NGINX Ingress controller

Réplicas adequadas e limites de recursos

Por padrão, um NGINX Ingress controller instalado durante a criação do cluster ou pela página Add-ons possui duas réplicas. Ajuste esse número conforme as necessidades do seu negócio. Garanta que os pods do NGINX Ingress controller estejam distribuídos em nós diferentes para evitar contenção de recursos e pontos únicos de falha. Também é possível atribuir nós exclusivos para assegurar desempenho e estabilidade. Para mais informações, consulte Use exclusive nodes to improve NGINX Ingress performance and stability. Para evitar interrupções de tráfego causadas por eventos de falta de memória (OOM), não defina limites de recursos para o NGINX Ingress controller. Caso seja obrigatório definir limites, configure o limite de CPU para pelo menos 1.000 millicores e o limite de memória para no mínimo 2 GiB.

Uso de nós exclusivos

Otimização do desempenho do NGINX Ingress

O ajuste de desempenho do NGINX Ingress controller envolve duas áreas principais: parâmetros de sistema e parâmetros do NGINX.

  • Parâmetros de sistema: os sistemas operacionais da Alibaba Cloud já incluem otimizações padrão para parâmetros comuns. Outros parâmetros que podem exigir ajuste incluem o backlog máximo do sistema e o intervalo de portas disponíveis. Ajustar esses parâmetros ajuda a garantir que o NGINX lide com alta concorrência e evita falhas de conexão com backends devido à exaustão de portas.

  • Parâmetros do NGINX:

    • Ajuste o número máximo de conexões por processo worker para garantir que o NGINX Ingress controller suporte alta concorrência.

    • Aumente o tempo limite de conexão: diferentemente do comportamento padrão do NGINX, o NGINX Ingress controller utiliza conexões keep-alive para enviar requisições aos pods de backend. Portanto, aumente o tempo limite de conexão para permitir que uma única conexão processe mais requisições e reduza a sobrecarga de criação de novas conexões.

    • Defina o tempo limite de keep-alive: configure o tempo limite de keep-alive dos serviços de backend como igual ou superior ao tempo limite de conexão do NGINX Ingress controller, cujo valor padrão é 900s em clusters ACK.

O componente NGINX Ingress inclui parâmetros de ajuste padrão que oferecem desempenho ideal na maioria dos cenários. Se você tiver requisitos específicos, otimize ainda mais os parâmetros de sistema e do NGINX usando os campos relevantes no ConfigMap. Para mais informações sobre ConfigMaps, consulte ConfigMaps.

Dimensionamento automático com HPA

Na maioria dos casos, o NGINX Ingress controller consegue lidar com picos repentinos de tráfego. Se a capacidade padrão for insuficiente para seus cenários de alta carga, configure um Horizontal Pod Autoscaler (HPA) para dimensionar automaticamente o NGINX Ingress controller. Para mais informações, consulte Use Horizontal Pod Autoscaler (HPA).

Importante

Eventos de dimensionamento de pods podem interromper temporariamente conexões existentes. Configure esse recurso com cautela.

A seguir, um exemplo de configuração 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

Configuração de hook preStop

Durante uma atualização contínua de um service de backend, o NGINX Ingress controller remove o endpoint de um pod em encerramento, mantendo as conexões das requisições em andamento. Se um pod do service de backend sair imediatamente após receber o sinal de encerramento, as requisições em andamento podem falhar. Devido a questões de sincronismo, parte do novo tráfego ainda pode ser roteada para o pod encerrado, resultando em perda de tráfego.

Para evitar perda de tráfego durante atualizações contínuas, configure um hook preStop nos pods do service de backend. Esse hook permite que o pod continue processando requisições em andamento mesmo após a remoção do endpoint, prevenindo interrupções no service.

Adicione o seguinte código à configuração do container no modelo de 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"

Observabilidade do NGINX Ingress controller

Log Service e Managed Service for Prometheus

O NGINX Ingress controller fornece painéis de monitoramento baseados em logs do Log Service (SLS) e Prometheus para ajudar você a compreender melhor o tráfego do service.

  • Logs do Log Service (SLS):

    • Se você selecionar Enable Log Service e Create Ingress Dashboard ao criar um cluster, acesse o ACK console, escolha Network > Ingresses e visualize o painel baseado no Log Service na página NGINX Ingress Overview. Você também pode acessar Operations > Log Center para visualizar os logs gerados pelo NGINX Ingress controller. Para mais informações, consulte Collect and analyze NGINX Ingress access logs.

    • Caso não tenha ativado essas opções durante a criação do cluster, configure manualmente o componente de coleta de logs e as regras. Para mais informações, consulte Collect and analyze NGINX Ingress access logs. Para mais detalhes sobre monitoramento, consulte Ingress dashboard monitoring.

  • Monitoramento do Managed Service for Prometheus: você pode optar por instalar o monitoramento do Managed Service for Prometheus durante a criação do cluster. Alternativamente, após criar o cluster, instale ou visualize-o escolhendo Operations > Prometheus Monitoring. Para mais informações, consulte Connect and configure Managed Service for Prometheus.

    Nota

    Ao usar o Managed Service for Prometheus, adicione o campo host aos recursos de Ingress no cluster. Caso contrário, algumas métricas do Ingress ficarão ausentes por padrão. Como alternativa, adicione o argumento de inicialização --metrics-per-host=false ao controller no Deployment do NGINX Ingress controller.

Recursos avançados do NGINX Ingress controller

Uso de múltiplos NGINX Ingress controllers

Pode ser necessário implantar vários NGINX Ingress controllers em um cluster, por exemplo, para isolar tráfego interno e externo. Para mais informações, consulte Deploy multiple Ingress controllers for traffic isolation.

Acesso intracluster

Em um cluster, o tráfego destinado ao endpoint externo de um LoadBalancer Service (o endereço IP público do NGINX Ingress controller) é normalmente interceptado e encaminhado por iptables ou IPVS. Quando externalTrafficPolicy está definido como Local e nenhum pod do NGINX Ingress está em execução em um nó, ocorrem problemas de conectividade de rede. Por padrão, o NGINX Ingress controller em um cluster ACK usa um LoadBalancer Service no modo Local. Consequentemente, você pode enfrentar problemas de conectividade ao acessar o endereço do Classic Load Balancer (CLB) associado de dentro do cluster. Portanto, para acesso intracluster, utilize o ClusterIP do Service ou o nome de domínio interno (nginx-ingress-lb.kube-system). Além disso, evite cenários em que o NGINX Ingress controller tenta acessar a si mesmo, pois isso pode levar a falhas de rede devido a problemas de hairpinning. Para mais informações sobre como resolver esse problema, consulte Cannot access the SLB instance of a LoadBalancer Service from within a Kubernetes cluster.

Uso do WAF

Para bloquear requisições maliciosas, ative o Web Application Firewall (WAF) no Classic Load Balancer (CLB) utilizado pelo NGINX Ingress controller do seu cluster. Ao ativar o WAF em uma porta HTTPS, configure também o certificado necessário no console do WAF. Isso pode causar os seguintes problemas:

  • As requisições TLS são terminadas na camada do WAF. Portanto, os certificados configurados em um Secret do Kubernetes não serão usados para o endpoint público.

  • Ao acessar a porta 443 de dentro do cluster usando o endereço IP do CLB ou o ClusterIP do Service, o tráfego pode não passar pelo WAF, causando erros de certificado.

  • Com o WAF ativado, o NGINX Ingress controller não consegue obter o endereço IP real do cliente por padrão. Adicione o conteúdo abaixo ao ConfigMap (por padrão, nginx-configuration no namespace kube-system para NGINX Ingress controllers instalados via gerenciamento de componentes) para ativar o módulo Realip do NGINX e usar o cabeçalho X-Forwarded-For para obter o endereço IP real do 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>

Implantações blue-green ou canary releases

Implemente um canary release com o NGINX Ingress controller usando o recurso disponível no ACK console ou adicionando manualmente uma annotation. Para mais informações, consulte Use NGINX Ingress to implement canary releases and blue-green deployments.

Importante

Os Services original e canary devem ser referenciados apenas pelo Ingress canary. Caso contrário, podem ocorrer conflitos de regras canary, levando a erros de roteamento de tráfego.

Proxy de requisições não HTTP

Por padrão, o NGINX Ingress controller se conecta aos Services de backend usando o protocolo HTTP. No entanto, ele também suporta múltiplos protocolos de backend, sendo WebSocket, HTTPS e gRPC os mais comuns. Para uma lista completa dos protocolos de backend suportados, consulte Backend Protocol.

  • WebSocket: o NGINX Ingress controller oferece suporte nativo a WebSocket. Nenhuma configuração adicional é necessária para encaminhar conexões WebSocket. Se você tiver conexões WebSocket de longa duração, use uma annotation para ajustar o tempo limite de conexão do backend e evitar desconexões por timeout. Para mais informações sobre como fazer ajustes, consulte Custom timeouts.

  • HTTPS: para Services de backend que usam HTTPS, adicione a annotation nginx.ingress.kubernetes.io/backend-protocol:"HTTPS" ao Ingress para alternar para conexões HTTPS.

  • gRPC: o gRPC só pode ser acessado por portas TLS. Portanto, garanta o uso de uma porta TLS criptografada quando sua aplicação acessar serviços gRPC através do NGINX Ingress controller. Para mais informações sobre como configurar gRPC, consulte Configure a gRPC service for NGINX Ingress.