Configure o NGINX Ingress globalmente pelo ConfigMap nginx-configuration ou individualmente por Ingress usando anotações.
Consulte a documentação do ConfigMap do NGINX Ingress e a documentação de anotações do NGINX Ingress.
ConfigMap
O ConfigMap nginx-configuration define padrões globais para todos os Ingresses gerenciados pelo controlador NGINX Ingress.
Edite o ConfigMap
kubectl edit cm -n kube-system nginx-configuration
Configuração padrão
O ConfigMap a seguir apresenta os padrões do ACK. Campos não listados herdam os padrões upstream do ingress-nginx.
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-configuration
namespace: <namespace> # Default: kube-system
labels:
app: ingress-nginx
data:
log-format-upstream: '$remote_addr - [$remote_addr] - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_length $request_time [$proxy_upstream_name] $upstream_addr $upstream_response_length $upstream_response_time $upstream_status $req_id $host [$proxy_alternative_upstream_name]'
proxy-body-size: 20m
proxy-connect-timeout: "10"
max-worker-connections: "65536"
enable-underscores-in-headers: "true"
reuse-port: "true"
worker-cpu-affinity: "auto"
server-tokens: "false"
ssl-redirect: "false"
allow-backend-server-header: "true"
ignore-invalid-headers: "true"
generate-request-id: "true"
upstream-keepalive-timeout: "900"
Descrição dos campos
|
Campo |
Padrão |
Descrição |
|
|
(veja acima) |
Formato de log para requisições upstream. Ao alterar este campo, atualize também o AliyunLogConfig |
|
|
|
Tamanho máximo do corpo da requisição do cliente. Corresponde a client_max_body_size. |
|
|
|
Tempo limite (segundos) para estabelecer conexão com um servidor proxy. Máximo: 75. Para gRPC, defina também |
|
|
|
Número máximo de conexões simultâneas por processo worker. Defina como |
|
|
|
Indica se underscores ( |
|
|
|
Crie um socket de escuta separado por worker usando |
|
|
|
Associa cada processo worker a um núcleo de CPU disponível. Recomendado para cargas de trabalho de alto desempenho. |
|
|
|
Quando definido como |
|
|
|
Se |
|
|
|
Com valor |
|
|
|
Define se campos de cabeçalho inválidos nas requisições devem ser ignorados. |
|
|
|
Se |
|
|
|
Tempo limite de ociosidade (segundos) para conexões keep-alive com servidores upstream. Mapeia para a diretiva NGINX |
Anotações
Adicione anotações a recursos Ingress individuais para substituir ou estender as configurações globais do ConfigMap.
Consulte a documentação de anotações do NGINX Ingress.
Balanceamento de carga
|
Anotação |
Tipo |
Descrição |
|
|
|
|
|
Algoritmo de balanceamento de carga para serviços de backend. O padrão |
|
|
string |
Ative hash consistente. O valor corresponde à variável usada como chave de hash. Exemplos: |
Exemplo: hash consistente por URI de requisição
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-test
namespace: default
annotations:
nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri"
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: <your-service-name>
port:
number: <your-service-port>
Para clusters Kubernetes anteriores à versão 1.22, useapiVersion: networking.k8s.io/v1beta1e os camposserviceName/servicePortdentro debackend.
Afinidade por cookie
|
Anotação |
Tipo |
Padrão |
Descrição |
|
|
|
|
— |
Tipo de afinidade. Apenas |
|
|
|
|
|
|
O modo |
|
|
string |
— |
Nome do cookie usado como chave de hash para roteamento de sessão. |
|
|
|
string |
|
Atributo de caminho definido no cookie de sessão. Não suporta expressões regulares quando |
|
|
|
inteiro (segundos) |
— |
Atributo |
|
|
|
inteiro (segundos) |
— |
Tempo de vida do cookie (segundos). Defina o atributo |
Exemplo: afinidade de sessão baseada em cookie
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-test
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
spec:
ingressClassName: nginx
rules:
- host: stickyingress.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: http-svc
port:
number: 80
Redirecionamentos
|
Anotação |
Tipo |
Padrão |
Descrição |
|
|
|
|
|
— |
Redireciona HTTP para HTTPS neste Ingress quando há um certificado TLS configurado. Veja Redirecionamento de HTTP para HTTPS. |
|
|
|
|
|
Força o redirecionamento de HTTP para HTTPS mesmo sem certificado TLS. |
|
|
URL |
— |
URL de destino para redirecionamento permanente. Deve incluir esquema ( |
|
|
|
inteiro |
|
Código de status HTTP para o redirecionamento permanente. |
|
|
|
URL |
— |
URL de destino para redirecionamento temporário. Requer esquema ( |
|
|
|
caminho |
— |
Redireciona requisições para |
Exemplo: redirecionamento permanente de foo.com para bar.com
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-nginx
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/permanent-redirect: "https://bar.com"
spec:
ingressClassName: nginx
rules:
- host: foo.com
http:
paths:
- path: "/"
pathType: ImplementationSpecific
backend:
service:
name: httpbin
port:
number: 8000
Reescritas
|
Anotação |
Tipo |
Descrição |
|
|
string |
Caminho de destino da reescrita. Suporta grupos de captura. Consulte Configurar redirecionamento de URL. |
|
|
string |
Reescreve o cabeçalho |
Exemplo: reescrever o cabeçalho Host para test.com em requisições a example.com/test
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
annotations:
nginx.ingress.kubernetes.io/upstream-vhost: "test.com"
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: demo-service
port:
number: 80
Limitação de taxa
Limite as taxas de requisição e conexões simultâneas por IP de cliente para proteger os serviços de backend contra picos de tráfego.
|
Anotação |
Tipo |
Padrão |
Descrição |
|
|
inteiro |
— |
Máximo de conexões simultâneas por IP. Requisições excedentes recebem erro 503. |
|
|
inteiro (KB) |
— |
Volume máximo de dados transmitidos por conexão por segundo (KB). Defina como |
|
|
inteiro |
— |
Limite de requisições por segundo por endereço IP. Requisições acima do limite de burst (taxa × |
|
|
inteiro |
— |
Limite de requisições por minuto por endereço IP. Segue o mesmo comportamento de burst de |
|
|
inteiro |
|
Multiplicador do limite de taxa de burst. |
|
|
lista CIDR |
— |
Blocos CIDR separados por vírgula excluídos da limitação de taxa. |
Exemplo: limitação de taxa com lista de permissões de IP
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-nginx
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/limit-rate: "100K"
nginx.ingress.kubernetes.io/limit-rps: "1"
nginx.ingress.kubernetes.io/limit-rpm: "30"
nginx.ingress.kubernetes.io/limit-whitelist: "10.1.10.100"
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: backend-svc
port:
number: 80
Fallback
Encaminhe o tráfego para um serviço de backup quando o backend principal estiver indisponível.
|
Anotação |
Tipo |
Descrição |
|
|
string |
Serviço de fallback usado quando nenhum nó de backend está disponível. Configure globalmente pela página Add-ons no console ACK. |
|
|
códigos de status HTTP |
Funciona em conjunto com |
Lançamentos canary
Implemente lançamentos canary e implantações blue-green. Consulte Usar o controlador NGINX Ingress para implementar lançamentos canary e implantações blue-green.
|
Anotação |
Tipo |
Descrição |
|
|
|
|
|
Defina se os lançamentos canary estão habilitados. |
|
|
string |
Chave de cabeçalho para divisão de tráfego. |
|
|
|
string |
Valor de correspondência exata para a chave de cabeçalho. Encaminha requisições correspondentes para o canary. |
|
|
|
regex |
Expressão regular para correspondência do valor do cabeçalho. |
|
|
|
string |
Chave de cookie usada para divisão de tráfego. |
|
|
|
inteiro |
Percentual de tráfego roteado para o canary (0– |
|
|
|
inteiro |
Denominador de peso para |
Timeout
Configurações globais de timeout
Edite o ConfigMap nginx-configuration para definir timeouts globalmente:
kubectl edit cm -n kube-system nginx-configuration
|
Campo |
Padrão |
Descrição |
|
|
|
Tempo limite de conexão do proxy. Máximo: 75s. |
|
|
|
Intervalo máximo entre leituras consecutivas do proxy (não é o tempo total de resposta). |
|
|
|
Intervalo máximo entre escritas consecutivas do proxy (não é o tempo total de transmissão). |
|
|
|
Tempo máximo para passar uma conexão ao próximo servidor upstream. Defina como |
|
|
|
Tempo limite de ociosidade em conexões de cliente ou proxy. Fecha a conexão se não houver transferência de dados. |
|
|
|
Tempo limite de ociosidade para conexões keep-alive com servidores upstream. |
|
|
|
Tempo limite para desligamento gracioso. |
|
|
|
Tempo limite para recebimento do cabeçalho PROXY protocol. Evita que handlers de TLS passthrough bloqueiem em conexões quebradas. |
|
|
|
Tempo de vida do cache de sessão SSL. Cada entrada consome aproximadamente 0,25 MB. |
|
|
|
Tempo limite para leitura do corpo da requisição do cliente. |
|
|
|
Tempo limite para leitura dos cabeçalhos da requisição do cliente. |
Configurações de timeout por Ingress
Substitua os timeouts globais para Ingresses específicos usando estas anotações:
|
Anotação |
Descrição |
|
|
Tempo limite de conexão do proxy. |
|
|
Tempo limite de envio do proxy. |
|
|
Tempo limite de leitura do proxy. |
|
|
Modo de buffering de requisição. |
CORS
Ative o compartilhamento de recursos de origem cruzada (CORS) para requisições de navegador. Consulte Configurar CORS em NGINX Ingresses.
|
Anotação |
Descrição |
|
|
Ative CORS para este Ingress. |
|
|
Origens permitidas para requisições CORS. |
|
|
Métodos de requisição permitidos, incluindo GET, POST e PUT. |
|
|
Cabeçalhos de requisição permitidos. |
|
|
Cabeçalhos de resposta expostos ao navegador. |
|
|
Defina se credenciais (cookies, cabeçalhos de autorização) são permitidas em requisições CORS. |
|
|
Duração do cache de preflight CORS (segundos). |
Políticas de nova tentativa
|
Anotação |
Padrão |
Descrição |
|
|
|
Número de novas tentativas quando as condições forem atendidas. |
|
|
— |
Tempo limite (segundos) para toda a sequência de novas tentativas. Sem padrão (ilimitado). |
|
|
— |
Condições para nova tentativa. Separe múltiplos valores com espaços. Valores válidos: |
Controle de acesso baseado em endereço IP
|
Anotação |
Tipo |
Descrição |
|
|
lista CIDR |
Lista de permissões de IP. Apenas endereços IP ou blocos CIDR listados são permitidos. Separe por vírgulas. |
|
|
lista CIDR |
Lista de bloqueios de IP. Endereços IP ou blocos CIDR listados são negados. Separe por vírgulas. |
Exemplo: permitir apenas um endereço IP específico
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-nginx
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/whitelist-source-range: "10.1.10.2"
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: backend-svc
port:
number: 80
Para aplicar globalmente, defina whitelist-source-range no ConfigMap nginx-configuration.
Espelhamento de tráfego
Duplique requisições de produção para um ambiente sombra para testes, sem afetar o tráfego ativo. Consulte Usar um controlador Ingress para espelhar tráfego de rede.
|
Anotação |
Tipo |
Descrição |
|
|
|
URL |
Destino do espelhamento. Aceita endereço IP de Service ou URL externa. Use |
|
|
|
|
|
Defina se o corpo da requisição deve ser espelhado. |
|
|
string |
Cabeçalho |
Proteção de segurança
Configure criptografia TLS entre clientes e o controlador NGINX Ingress, e entre o controlador e os serviços de backend. Consulte Criptografia do controlador NGINX Ingress.
Criptografia cliente-gateway
|
Anotação |
Escopo |
Descrição |
|
|
Domínio |
Suítes de cifra TLS (separadas por vírgula). Aplica-se apenas a handshakes TLS 1.0–1.2. Suítes padrão: |
|
|
Domínio |
Secret contendo certificado CA para verificação de certificados de cliente em mTLS. Deve incluir um arquivo |
Criptografia gateway-backend
|
Anotação |
Escopo |
Descrição |
|
|
Serviço |
Secret com certificado de cliente apresentado aos backends. Deve estar no formato PEM com |
|
|
Serviço |
Valor SNI (Server Name Indication) para handshake TLS com o backend. |
|
|
Serviço |
Ative ou desative SNI para handshake TLS com o backend. |
Autenticação de segurança
Restrinja o acesso com Basic Authentication. Apenas requisições autenticadas chegam aos serviços de backend.
|
Anotação |
Escopo |
Descrição |
|
|
Ingress |
Tipo de autenticação. Defina como |
|
|
Ingress |
Nome do Secret de credenciais. Formato: |
|
|
Ingress |
Formato dos dados do Secret. |
|
|
Ingress |
Realm de autenticação exibido ao cliente ao solicitar credenciais. |
Configurar Basic Authentication
-
Gere um arquivo de senhas com
htpasswd:htpasswd -c auth jokerVerifique o arquivo:
cat auth # Expected output: joker:$apr1$R.G4krs/$hh0mX8xe4A3lYKMjvlVs1/ -
Crie um Secret a partir do arquivo de senhas:
kubectl create secret generic basic-auth --from-file=auth -
Adicione as anotações ao seu Ingress:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-nginx annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/auth-secret: basic-auth spec: ingressClassName: nginx rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: backend-svc port: number: 80