Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Best practices for the Nginx Ingress Controller

Última atualização: Jun 27, 2026

Diferentes cenários de negócios podem exigir ajustes nas configurações do Nginx Ingress Controller. Este tópico descreve práticas recomendadas para configurar o Nginx Ingress Controller com desempenho ideal.

Índice

Melhorar o desempenho e a estabilidade do Nginx Ingress Controller

Usar um número adequado de réplicas e limites de recursos

Por padrão, o Nginx Ingress Controller possui 2 réplicas, seja criado com o cluster ou instalado pelo centro de componentes. Ajuste o número de réplicas conforme necessário. Distribua o Nginx Ingress Controller em diferentes nós para evitar contenção de recursos e pontos únicos de falha. Também é possível usar nós dedicados para o Nginx Ingress Controller, garantindo desempenho e estabilidade. Para mais informações, consulte Usar nós dedicados para melhorar o desempenho e a estabilidade do Nginx Ingress. Recomendamos não definir limites de recursos para o Nginx Ingress Controller, evitando interrupções de tráfego causadas por erros de falta de memória (OOM). 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.

Usar nós dedicados para melhorar o desempenho e a estabilidade do Nginx Ingress

Otimizar o desempenho do Nginx Ingress

A otimização de desempenho do Nginx Ingress Controller divide-se em parâmetros do sistema e parâmetros do Nginx:

  • Parâmetros do sistema: Os sistemas operacionais na Alibaba Cloud possuem alguns parâmetros comuns já otimizados por padrão. Outros parâmetros que exigem ajuste incluem o backlog máximo do sistema e o intervalo máximo de portas disponíveis. Após essa otimização, o Nginx consegue lidar com requisições de alta concorrência, e as conexões de backend não falham devido ao esgotamento de portas.

  • Parâmetros do Nginx:

    • Ajuste o número máximo de conexões por worker para garantir que o Nginx Ingress Controller suporte requisições de alta concorrência.

    • Aumente o tempo limite de conexão: Por padrão, o Nginx Ingress Controller usa conexões persistentes para enviar requisições aos pods da aplicação de backend. Para permitir que uma única conexão processe mais requisições e reduza a sobrecarga, aumente o tempo limite de conexão.

    • Defina o tempo limite de conexão persistente: Garanta que o tempo limite de conexão persistente do serviço de backend não seja menor que o do Nginx Ingress Controller. O valor padrão em clusters ACK é 900s.

O componente Nginx Ingress possui otimizações integradas que oferecem desempenho ideal na maioria dos cenários. Se houver requisitos específicos, otimize ainda mais os parâmetros do sistema e do Nginx usando os campos relevantes no ConfigMap. Para mais informações sobre ConfigMaps, consulte ConfigMaps.

Configurar HPA para dimensionar automaticamente o Nginx Ingress Controller

Na maioria dos casos, o Nginx Ingress Controller lida bem com picos de tráfego. Se ele não atender às necessidades em cenários de alta carga, configure o Horizontal Pod Autoscaler (HPA) para dimensionar o Nginx Ingress Controller. Para mais informações, consulte Usar Horizontal Pod Autoscaling (HPA).

Importante

O dimensionamento de pods pode interromper algumas conexões de serviço. Configure o HPA com cautela.

O código a seguir apresenta um exemplo de arquivo YAML:

apiVersion: autoscaling/v2beta1
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
        targetAverageUtilization: 50

Configurar um hook preStop adequado para serviços de backend

Durante uma atualização contínua de um serviço de backend, o Nginx Ingress Controller remove os endpoints dos pods em encerramento e mantém as conexões das requisições em processamento. Se um pod do serviço de backend sair imediatamente após receber o sinal de encerramento, as requisições em andamento podem falhar. Devido a questões de temporização, parte do tráfego ainda pode ser encaminhada ao pod encerrado, causando perda de tráfego.

Para evitar perda de tráfego durante atualizações contínuas, recomendamos configurar um hook preStop nos pods do serviço de backend. Dessa forma, os pods continuam em execução por um período após a remoção de seus endpoints, prevenindo interrupções de tráfego.

Adicione o seguinte conteúdo à 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 exist in the container.
          preStop:
            exec:
              command:
              - sleep
              - 30

Melhorar a observabilidade do Nginx Ingress Controller

Usar SLS e Alibaba Cloud Prometheus para melhorar a observabilidade

O Nginx Ingress Controller fornece painéis baseados em logs do Simple Log Service (SLS) e monitoramento Prometheus para ajudar a compreender melhor o tráfego dos serviços.

  • Logs do SLS:

  • Monitoramento com Alibaba Cloud Prometheus: Instale o monitoramento com Alibaba Cloud Prometheus durante a criação do cluster, ou instale e visualize-o na página Operations Management > Prometheus Monitoring após criar o cluster. Para mais informações, consulte Usar Alibaba Cloud Prometheus para monitoramento.

    Nota

    Ao usar o monitoramento com Alibaba Cloud Prometheus, adicione o campo host aos recursos Ingress no cluster. Caso contrário, algumas métricas do Ingress não serão coletadas por padrão. Também é possível adicionar --metrics-per-host=false aos parâmetros de inicialização do controller na implantação do Nginx Ingress Controller para resolver esse problema.

Recursos avançados do Nginx Ingress Controller

Usar vários Nginx Ingress Controllers

Em algumas aplicações, pode ser necessário implantar múltiplos Nginx Ingress Controllers em um cluster para finalidades como isolamento de redes públicas e privadas. Para mais informações, consulte Implantar vários controladores Ingress.

Acessar o Nginx Ingress Controller de dentro de um cluster

Dentro de um cluster, o tráfego destinado ao endereço IP externo de um serviço LoadBalancer — correspondente ao IP público do Nginx Ingress Controller — geralmente é roteado via iptables ou IPVS. Se externalTrafficPolicy estiver definido como Local e não houver um pod correspondente do Nginx Ingress no nó, ocorrerá uma falha de conexão de rede. Por padrão, o Nginx Ingress Controller em um cluster ACK utiliza um serviço LoadBalancer no modo Local. Portanto, pode ocorrer falha de conexão ao acessar o endereço SLB vinculado ao Nginx Ingress Controller de dentro do cluster. Recomendamos usar o ClusterIP do serviço ou o nome de domínio interno (nginx-ingress-lb.kube-system) para acessar o Nginx Ingress Controller. Evite acessar o Nginx Ingress Controller a partir dele mesmo, pois isso também pode causar falhas de conexão devido a problemas de hairpin. Para mais informações sobre a solução desse problema, consulte Falha ao acessar o endereço SLB exposto por um serviço LoadBalancer em um cluster Kubernetes.

Usar WAF

Para bloquear requisições maliciosas, ative o WAF na instância SLB usada pelo Nginx Ingress Controller do cluster. Ao habilitar o WAF em uma porta HTTPS, configure o certificado a ser utilizado no console. Nesse cenário, podem ocorrer os seguintes problemas:

  • As requisições TLS são terminadas no WAF. Assim, os certificados configurados via Secrets no cluster não ficam expostos na saída para a internet.

  • O acesso à porta 443 usando o endereço IP do SLB ou o ClusterIP do serviço, quando feito de dentro do cluster, pode não passar pelo WAF, resultando em erro 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 para ativar o módulo Realip do Nginx e utilizar o cabeçalho X-Forwarded-For como endereço IP real do cliente. Para um Nginx Ingress Controller instalado via gerenciamento de componentes, o ConfigMap padrão é nginx-configuration no namespace kube-system.

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

Usar o Nginx Ingress Controller para implantações blue-green ou liberações graduais de aplicações

Utilize o recurso de liberação gradual no console do Container Service for Kubernetes (ACK) ou adicione manualmente uma anotação para aproveitar a funcionalidade de liberação gradual oferecida pelo Nginx Ingress Controller. Para mais informações, consulte Usar Nginx Ingress para implementar liberações graduais e implantações blue-green.

Importante

Garanta que os serviços destinados à liberação gradual, incluindo o serviço original e o serviço da liberação gradual, não sejam referenciados por recursos Ingress além do Ingress de liberação gradual. Caso contrário, poderão ocorrer conflitos nas regras de liberação gradual, causando erros no roteamento de tráfego.

Usar o Nginx Ingress Controller para fazer proxy de requisições não HTTP

Por padrão, o Nginx Ingress Controller utiliza HTTP para se conectar aos serviços de backend. Ele também suporta diversos protocolos de backend, como WebSocket, HTTPS e gRPC. Para mais informações sobre os 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 houver conexões WebSocket de longa duração, ajuste o tempo limite das conexões de backend por meio de uma anotação para evitar desconexões causadas por timeout. Para mais informações sobre como ajustar o tempo limite, consulte Custom timeouts.

  • HTTPS: Para serviços de backend que utilizam HTTPS, adicione a anotação nginx.ingress.kubernetes.io/backend-protocol:"HTTPS" ao Ingress para alternar para conexões HTTPS.

  • gRPC: O acesso ao gRPC só é possível através de uma porta TLS. Portanto, certifique-se de usar uma porta TLS criptografada ao acessar serviços gRPC por meio do Nginx Ingress Controller. Para mais informações sobre como configurar gRPC, consulte Implantar um serviço gRPC no backend de um Nginx Ingress Controller.