O MSE Ingress oferece balanceamento de carga na camada 7 para gerenciar o acesso externo aos serviços em um cluster Kubernetes. Configure recursos baseados em anotações nos recursos de Ingress — desde canary releases e limitação de taxa até TLS e espelhamento de tráfego.
Todos os exemplos incluem configurações tanto para Kubernetes v1.19+ (networking.k8s.io/v1) quanto para versões anteriores (networking.k8s.io/v1beta1).
Referência rápida de anotações
Todas as anotações neste documento usam o prefixo nginx.ingress.kubernetes.io/ ou mse.ingress.kubernetes.io/. A tabela abaixo lista cada anotação com seus valores aceitos, valor padrão e escopo.
|
Anotação |
Valores aceitos |
Padrão |
Escopo |
|
|
|
— |
Rota |
|
|
string |
— |
Rota |
|
|
string |
— |
Rota |
|
|
string |
— |
Rota |
|
|
inteiro (0–100 ou 0–total) |
— |
Rota |
|
|
inteiro |
|
Rota |
|
|
string |
— |
Rota |
|
|
string |
— |
Rota |
|
|
string |
— |
Rota |
|
|
|
— |
Rota |
|
|
|
|
Rota |
|
|
origens separadas por vírgula ou |
|
Rota |
|
|
métodos HTTP separados por vírgula ou |
|
Rota |
|
|
cabeçalhos separados por vírgula ou |
|
Rota |
|
|
cabeçalhos separados por vírgula |
— |
Rota |
|
|
|
|
Rota |
|
|
inteiro (segundos) |
|
Rota |
|
|
|
— |
Rota |
|
|
string de caminho |
— |
Rota |
|
|
hostname |
— |
Rota |
|
|
|
|
Rota |
|
|
|
|
Rota |
|
|
URL (com esquema) |
— |
Rota |
|
|
código de status HTTP |
|
Rota |
|
|
URL (com esquema) |
— |
Rota |
|
|
|
— |
Rota |
|
|
|
— |
Rota |
|
|
nomes de cabeçalhos separados por vírgula |
— |
Rota |
|
|
|
— |
Rota |
|
|
|
— |
Rota |
|
|
nomes de cabeçalhos separados por vírgula |
— |
Rota |
|
|
inteiro |
|
Rota |
|
|
inteiro (segundos) |
sem timeout |
Rota |
|
|
condições separadas por vírgula |
|
Rota |
|
|
IPs ou CIDRs separados por vírgula |
— |
Rota |
|
|
IPs ou CIDRs separados por vírgula |
— |
Rota |
|
|
IPs ou CIDRs separados por vírgula |
— |
Domínio |
|
|
IPs ou CIDRs separados por vírgula |
— |
Domínio |
|
|
inteiro |
— |
Rota |
|
|
inteiro |
— |
Rota |
|
|
inteiro |
|
Rota |
|
|
inteiro (RPS) |
— |
Rota |
|
|
código de status HTTP |
|
Rota |
|
|
|
|
Rota |
|
|
string |
|
Rota |
|
|
URL |
— |
Rota |
|
|
inteiro |
— |
Rota |
|
|
código de status HTTP |
|
Rota |
|
|
|
|
Rota |
|
|
string |
|
Rota |
|
|
URL |
— |
Rota |
|
|
|
— |
Rota |
|
|
inteiro (0–100) |
|
Rota |
|
|
|
— |
Rota |
|
|
|
|
Rota |
|
|
variável ou expressão NGINX |
— |
Rota |
|
|
inteiro (segundos) |
desativado |
Rota |
|
|
|
— |
Rota |
|
|
|
|
Rota |
|
|
string |
|
Rota |
|
|
string de caminho |
|
Rota |
|
|
inteiro (segundos) |
escopo de sessão |
Rota |
|
|
inteiro (segundos) |
escopo de sessão |
Rota |
|
|
inteiro |
— |
Rota |
|
|
inteiro |
— |
Rota |
|
|
inteiro |
— |
Rota |
|
|
|
|
Domínio |
|
|
|
|
Domínio |
|
|
suítes de criptografia separadas por vírgula |
ver padrões |
Domínio |
|
|
|
— |
Rota |
|
|
hostname |
— |
Rota |
|
|
|
— |
Rota |
Canary release
O MSE Ingress suporta quatro estratégias de canary release. Ative o canary em qualquer recurso de Ingress adicionando a anotação nginx.ingress.kubernetes.io/canary: "true". Em seguida, aplique uma ou mais das anotações específicas de estratégia abaixo.
O MSE Ingress suporta mais de duas versões de serviço em um único canary release, sem limite superior. O NGINX Ingress e o ALB Ingress suportam no máximo duas versões.
Quando várias estratégias são configuradas simultaneamente, o MSE Ingress as aplica nesta ordem de precedência:
Baseada em cabeçalho ou parâmetro de consulta (maior prioridade)
Baseada em cookie
Baseada em peso (menor prioridade)
Canary release baseado em cabeçalho
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Encaminha requisições para a versão canary quando o cabeçalho especificado está presente e definido como |
— |
Sim (para canary baseado em cabeçalho) |
|
|
Encaminha requisições para a versão canary apenas quando o cabeçalho corresponde tanto à chave (de |
— |
Não |
Exemplo 1: Roteamento pela presença de cabeçalho
Quando o cabeçalho da requisição mse está definido como always, as requisições vão para demo-service-canary. Todas as outras requisições vão para demo-service.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "mse"
name: demo-canary
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service-canary
port:
number: 80
path: /hello
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /hello
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "mse"
name: demo-canary
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service-canary
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service
servicePort: 80
Exemplo 2: Roteamento de múltiplas versões canary por valor exato de cabeçalho
Quando o cabeçalho mse: v1 está presente, as requisições vão para demo-service-canary-v1. Quando mse: v2 está presente, elas vão para demo-service-canary-v2. Todas as outras requisições vão para demo-service.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "mse"
nginx.ingress.kubernetes.io/canary-by-header-value: "v1"
name: demo-canary-v1
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service-canary-v1
port:
number: 80
path: /hello
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "mse"
nginx.ingress.kubernetes.io/canary-by-header-value: "v2"
name: demo-canary-v2
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service-canary-v2
port:
number: 80
path: /hello
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /hello
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "mse"
nginx.ingress.kubernetes.io/canary-by-header-value: "v1"
name: demo-canary-v1
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service-canary-v1
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "mse"
nginx.ingress.kubernetes.io/canary-by-header-value: "v2"
name: demo-canary-v2
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service-canary-v2
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service
servicePort: 80
Canary release baseado em parâmetro de consulta
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Encaminha requisições para a versão canary quando o parâmetro de consulta especificado está presente e definido como |
— |
Sim (para canary baseado em consulta) |
|
|
Encaminha requisições para a versão canary apenas quando o parâmetro de consulta corresponde tanto à chave quanto a este valor. |
— |
Não |
É possível combinar condições baseadas em cabeçalho e em parâmetro de consulta. As requisições são enviadas para a versão canary apenas quando ambas as condições correspondem simultaneamente.
Exemplo 1: Roteamento por valor de parâmetro de consulta
Quando a URL contém canary=gray, as requisições vão para demo-service-canary. Todas as outras requisições vão para demo-service.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
mse.ingress.kubernetes.io/canary-by-query: "canary"
mse.ingress.kubernetes.io/canary-by-query-value: "gray"
name: demo-canary
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service-canary
port:
number: 80
path: /hello
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /hello
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
mse.ingress.kubernetes.io/canary-by-query: "canary"
mse.ingress.kubernetes.io/canary-by-query-value: "gray"
name: demo-canary
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service-canary
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service
servicePort: 80
Exemplo 2: Combinação de parâmetro de consulta com condições de cabeçalho
Quando a URL contém canary=gray E o cabeçalho da requisição contém x-user-id: test, as requisições vão para demo-service-canary. Ambas as condições devem corresponder.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
mse.ingress.kubernetes.io/canary-by-query: "canary"
mse.ingress.kubernetes.io/canary-by-query-value: "gray"
nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
nginx.ingress.kubernetes.io/canary-by-header-value: "test"
name: demo-canary
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service-canary
port:
number: 80
path: /hello
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /hello
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
mse.ingress.kubernetes.io/canary-by-query: "canary"
mse.ingress.kubernetes.io/canary-by-query-value: "gray"
nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
nginx.ingress.kubernetes.io/canary-by-header-value: "test"
name: demo-canary
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service-canary
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service
servicePort: 80
Canary release baseado em cookie
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Encaminha requisições para a versão canary quando o cookie especificado está definido como |
— |
Sim (para canary baseado em cookie) |
Example: Quando o cookie da requisição demo=always está presente, as requisições vão para demo-service-canary. Todas as outras requisições vão para demo-service.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-cookie: "demo"
name: demo-canary
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service-canary
port:
number: 80
path: /hello
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /hello
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-cookie: "demo"
name: demo-canary
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service-canary
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service
servicePort: 80
Canary release baseado em peso
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Porcentagem de requisições enviadas para a versão canary. Inteiro no intervalo de 0–100 (ou 0– |
— |
Sim (para canary baseado em peso) |
|
|
Peso total usado como denominador ao calcular a distribuição de requisições. |
|
Não |
Example: Distribua o tráfego entre três versões — 30% para demo-service-canary-v1, 20% para demo-service-canary-v2 e 50% para demo-service.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "30"
name: demo-canary-v1
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service-canary-v1
port:
number: 80
path: /hello
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"
name: demo-canary-v2
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service-canary-v2
port:
number: 80
path: /hello
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /hello
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "30"
name: demo-canary-v1
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service-canary-v1
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"
name: demo-canary-v2
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service-canary-v2
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service
servicePort: 80
Subconjunto de serviço
Um subconjunto de serviço permite rotear requisições para um grupo específico de Pods dentro de um único Serviço Kubernetes — útil quando um Serviço é sustentado por múltiplos Deployments executando versões diferentes. O MSE Ingress fornece dois métodos para definir subconjuntos.
Uso de rótulos de pod no MseIngressConfig
Utilize a anotação mse.ingress.kubernetes.io/service-subset para selecionar Pods pelos seus rótulos canary do OpenSergo:
""oubase: roteia para Pods sem um prefixo de rótuloopensergo.io/canary, ou comopensergo.io/canary: "".Qualquer outro valor (por exemplo,
gray): roteia para Pods rotulados comopensergo.io/canary-{value}: {value}— por exemplo,opensergo.io/canary-gray: gray.
Example: Um Serviço chamado go-httpbin é sustentado por dois Deployments. Os Pods base não possuem rótulo canary do OpenSergo. Os Pods gray possuem o rótulo opensergo.io/canary-gray: gray.
Manifests do Serviço e do Deployment:
# go-httpbin Service
apiVersion: v1
kind: Service
metadata:
name: go-httpbin
namespace: default
spec:
ports:
- port: 8080
protocol: TCP
selector:
app: go-httpbin
---
# Base Deployment — no OpenSergo canary label
apiVersion: apps/v1
kind: Deployment
metadata:
name: go-httpbin-base
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: go-httpbin
template:
metadata:
labels:
app: go-httpbin
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/mse/go-httpbin
args:
- "--version=base"
imagePullPolicy: Always
name: go-httpbin
---
# Gray Deployment — has the OpenSergo canary label
apiVersion: apps/v1
kind: Deployment
metadata:
name: go-httpbin-gray
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: go-httpbin
template:
metadata:
labels:
app: go-httpbin
opensergo.io/canary-gray: gray
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/mse/go-httpbin
args:
- "--version=gray"
imagePullPolicy: Always
name: go-httpbin
Configuração do Ingress — requisições com x-user-id: test vão para go-httpbin-gray; todas as outras vão para go-httpbin-base:
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
nginx.ingress.kubernetes.io/canary-by-header-value: "test"
# Forward to Pods labeled opensergo.io/canary-gray: gray
mse.ingress.kubernetes.io/service-subset: gray
name: demo-canary
namespace: default
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: go-httpbin
port:
number: 8080
path: /test
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
# Forward to Pods without the opensergo.io/canary label prefix
mse.ingress.kubernetes.io/service-subset: ""
name: demo
namespace: default
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: go-httpbin
port:
number: 8080
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
nginx.ingress.kubernetes.io/canary-by-header-value: "test"
# Forward to Pods labeled opensergo.io/canary-gray: gray
mse.ingress.kubernetes.io/service-subset: gray
name: demo-canary
namespace: default
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /test
backend:
serviceName: go-httpbin
servicePort: 8080
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
# Forward to Pods without the opensergo.io/canary label prefix
mse.ingress.kubernetes.io/service-subset: ""
name: demo
namespace: default
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /test
backend:
serviceName: go-httpbin
servicePort: 8080
Uso de rótulos personalizados
Combine mse.ingress.kubernetes.io/service-subset com mse.ingress.kubernetes.io/subset-labels para definir o subconjunto por qualquer rótulo de Pod em vez do prefixo opensergo.io/canary.
Quandosubset-labelsestá definido, o subconjunto não é mais mapeado para rótulos com o prefixoopensergo.io/canary.
Example: O Deployment gray possui version: gray em vez de um rótulo OpenSergo.
Manifests do Serviço e do Deployment:
# go-httpbin Service
apiVersion: v1
kind: Service
metadata:
name: go-httpbin
namespace: default
spec:
ports:
- port: 8080
protocol: TCP
selector:
app: go-httpbin
---
# Base Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: go-httpbin-base
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: go-httpbin
template:
metadata:
labels:
app: go-httpbin
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/mse/go-httpbin
args:
- "--version=base"
imagePullPolicy: Always
name: go-httpbin
---
# Gray Deployment — uses a custom label instead of opensergo.io/canary
apiVersion: apps/v1
kind: Deployment
metadata:
name: go-httpbin-gray
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: go-httpbin
template:
metadata:
labels:
app: go-httpbin
version: gray
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/mse/go-httpbin
args:
- "--version=gray"
imagePullPolicy: Always
name: go-httpbin
Configuração do Ingress — requisições com x-user-id: test vão para go-httpbin-gray; todas as outras vão para go-httpbin-base:
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
nginx.ingress.kubernetes.io/canary-by-header-value: "test"
# Forward to Pods labeled version: gray
mse.ingress.kubernetes.io/service-subset: gray
mse.ingress.kubernetes.io/subset-labels: version gray
name: demo-canary
namespace: default
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: go-httpbin
port:
number: 8080
path: /test
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/service-subset: ""
name: demo
namespace: default
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: go-httpbin
port:
number: 8080
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "x-user-id"
nginx.ingress.kubernetes.io/canary-by-header-value: "test"
# Forward to Pods labeled version: gray
mse.ingress.kubernetes.io/service-subset: gray
mse.ingress.kubernetes.io/subset-labels: version gray
name: demo-canary
namespace: default
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /test
backend:
serviceName: go-httpbin
servicePort: 8080
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/service-subset: ""
name: demo
namespace: default
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /test
backend:
serviceName: go-httpbin
servicePort: 8080
CORS
O Cross-Origin Resource Sharing (CORS) permite que aplicações web acessem recursos em uma origem diferente. Para a especificação CORS, consulte Cross-Origin Resource Sharing (CORS).
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Habilita o CORS neste Ingress. |
|
Sim (para habilitar CORS) |
|
|
Origens de terceiros permitidas. Aceita valores separados por vírgula e curingas ( |
|
Não |
|
|
Métodos HTTP permitidos. Aceita valores separados por vírgula e curingas ( |
|
Não |
|
|
Cabeçalhos de requisição permitidos. Aceita valores separados por vírgula e curingas ( |
|
Não |
|
|
Cabeçalhos de resposta expostos ao navegador. Aceita valores separados por vírgula. |
— |
Não |
|
|
Se credenciais podem ser incluídas nas requisições CORS. |
|
Não |
|
|
Duração do cache para resultados de preflight, em segundos. |
|
Não |
Example: Permita example.com como origem, restrinja métodos a GET e POST, permita o cabeçalho de requisição X-Foo-Bar e desabilite a passagem de credenciais.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "example.com"
nginx.ingress.kubernetes.io/cors-allow-methods: "GET,POST"
nginx.ingress.kubernetes.io/cors-allow-headers: "X-Foo-Bar"
nginx.ingress.kubernetes.io/cors-allow-credentials: "false"
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /hello
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "example.com"
nginx.ingress.kubernetes.io/cors-allow-methods: "GET,POST"
nginx.ingress.kubernetes.io/cors-allow-headers: "X-Foo-Bar"
nginx.ingress.kubernetes.io/cors-allow-credentials: "false"
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service
servicePort: 80
Correspondência por expressão regular
Além da correspondência exata e por prefixo, o MSE Ingress suporta correspondência por expressão regular. Defina nginx.ingress.kubernetes.io/use-regex: "true" para tratar o caminho definido na especificação do Ingress como uma expressão regular.
Example: Encaminhe requisições para example.com cujos caminhos começam com /app ou /test para o serviço demo.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/use-regex: 'true'
name: regex-match
namespace: default
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo
port:
number: 8080
path: /(app|test)/(.*)
pathType: Prefix
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/use-regex: 'true'
name: regex-match
namespace: default
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /(app|test)/(.*)
backend:
serviceName: demo
servicePort: 8080
Reescrita de caminho e host
As operações de reescrita modificam o caminho ou o host em uma requisição antes que ela chegue ao serviço de backend.
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Caminho de destino. Suporta grupos de captura do padrão de caminho do Ingress. |
— |
Sim (para reescrita de caminho) |
|
|
Host de destino. |
— |
Sim (para reescrita de host) |
Reescrita de caminho
Example 1: Reescreva example.com/test para example.com/dev antes de encaminhar para o backend.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: "/dev"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: "/dev"
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /test
pathType: Exact
backend:
serviceName: demo-service
servicePort: 80
Example 2: Remova o prefixo /v1 — reescreva example.com/v1/xxx para example.com/xxx.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: "/$1"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /v1/(.*)
pathType: Prefix
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: "/$1"
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /v1/(.*)
pathType: Prefix
backend:
serviceName: demo-service
servicePort: 80
Example 3: Substitua o prefixo /v1 por /v2 — reescreva example.com/v1/xxx para example.com/v2/xxx.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: "/v2/$1"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /v1/(.*)
pathType: Prefix
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: "/v2/$1"
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /v1/(.*)
pathType: Prefix
backend:
serviceName: demo-service
servicePort: 80
Reescrita de host
Example: Reescreva o host de example.com para test.com antes de encaminhar example.com/test para o backend.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/upstream-vhost: "test.com"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/upstream-vhost: "test.com"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Redirecionamento
Redirecionamento de HTTP para HTTPS
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Força o redirecionamento de requisições HTTP para HTTPS. |
|
Sim (para habilitar redirecionamento) |
|
|
Força o redirecionamento de requisições HTTP para HTTPS. |
|
Sim (alternativa a |
O MSE Ingress trata tantossl-redirectquantoforce-ssl-redirectde forma idêntica — ambos forçam o redirecionamento de HTTP para HTTPS.
Example: Redirecione http://example.com/test para https://example.com/test.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Redirecionamento permanente
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
URL de destino para o redirecionamento permanente. Deve incluir o esquema ( |
— |
Sim (para redirecionamento permanente) |
|
|
Código de status HTTP para o redirecionamento. |
|
Não |
Example: Redirecione permanentemente http://example.com/test para http://example.com/app.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/permanent-redirect: "http://example.com/app"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/permanent-redirect: "http://example.com/app"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Redirecionamento temporário
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
URL de destino para o redirecionamento temporário. Deve incluir o esquema ( |
— |
Sim (para redirecionamento temporário) |
Example: Redirecione temporariamente http://example.com/test para http://example.com/app.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/temporal-redirect: "http://example.com/app"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/temporal-redirect: "http://example.com/app"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Controle de cabeçalhos
O controle de cabeçalhos permite adicionar, modificar ou remover cabeçalhos de requisição antes que o MSE Ingress encaminhe uma requisição para um serviço de backend, e cabeçalhos de resposta antes que a resposta seja retornada ao cliente.
Controle de cabeçalhos de requisição
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
|
Adiciona um cabeçalho à requisição. Se o cabeçalho já existir, o valor é anexado ao valor original. Para um único cabeçalho, use um par chave-valor. Para múltiplos cabeçalhos, use bloco escalar YAML (` |
`) com um par chave-valor por linha. |
— |
Não |
|
|
Modifica um cabeçalho existente na requisição. Se o cabeçalho já existir, o valor sobrescreve o original. Mesma sintaxe de |
— |
Não |
|
|
|
Remove um cabeçalho da requisição. Para múltiplos cabeçalhos, separe-os com vírgulas ( |
— |
Não |
Example 1: Adicione foo: bar e test: true a todas as requisições para example.com/test.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/request-header-control-add: |
foo bar
test true
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/request-header-control-add: |
foo bar
test true
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Example 2: Combine controle de cabeçalhos com canary releases. Quando o cabeçalho da requisição for mse: v1, a requisição vai para demo-service-canary-v1 com stage: gray adicionado. Todas as outras requisições vão para demo-service com stage: production adicionado.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "mse"
nginx.ingress.kubernetes.io/canary-by-header-value: "v1"
mse.ingress.kubernetes.io/request-header-control-add: "stage gray"
name: demo-canary-v1
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service-canary-v1
port:
number: 80
path: /hello
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/request-header-control-add: "stage production"
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /hello
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "mse"
nginx.ingress.kubernetes.io/canary-by-header-value: "v1"
mse.ingress.kubernetes.io/request-header-control-add: "stage gray"
name: demo-canary-v1
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service-canary-v1
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/request-header-control-add: "stage production"
name: demo
spec:
ingressClassName: mse
rules:
- http:
paths:
- path: /hello
backend:
serviceName: demo-service
servicePort: 80
Controle de cabeçalhos de resposta
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Adiciona um cabeçalho à resposta do backend antes de encaminhar para o cliente. Se o cabeçalho já existir, o valor é anexado. Mesma sintaxe do controle de cabeçalhos de requisição. |
— |
Não |
|
|
Modifica um cabeçalho de resposta existente. Se o cabeçalho já existir, o valor sobrescreve o original. Mesma sintaxe do controle de cabeçalhos de requisição. |
— |
Não |
|
|
Remove um cabeçalho de resposta antes de encaminhar para o cliente. Para múltiplos cabeçalhos, separe-os com vírgulas ( |
— |
Não |
Example: Remova o cabeçalho req-cost-time das respostas para example.com/test.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/response-header-control-remove: "req-cost-time"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/response-header-control-remove: "req-cost-time"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Retry
O MSE Ingress fornece retry automático no nível de rota para requisições com falha. Configure condições de retry, limites e timeouts com as seguintes anotações.
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Número máximo de tentativas de retry. |
|
Não |
|
|
Timeout para todas as tentativas de retry combinadas, em segundos. |
Sem timeout |
Não |
|
|
Condições de retry, separadas por vírgula. Valores válidos: |
|
Não |
Por padrão, o MSE Ingress não realiza retry de requisições não idempotentes (POST, PATCH) mesmo quando outras condições de retry são atendidas. Adicionenon_idempotentaproxy-next-upstreampara habilitar retries para esses métodos.
Example: Para example.com/test, defina um máximo de 2 retries com timeout de 5 segundos, acione retries apenas em HTTP 502 e habilite retries para requisições não idempotentes.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-next-upstream-tries: "2"
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: "5"
nginx.ingress.kubernetes.io/proxy-next-upstream: "http_502,non_idempotent"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-next-upstream-tries: "2"
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: "5"
nginx.ingress.kubernetes.io/proxy-next-upstream: "http_502,non_idempotent"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Listas de permissões e listas de bloqueios de endereços IP
O MSE Ingress suporta listas de permissões (whitelists) e listas de bloqueios (blacklists) de endereços IP tanto no nível de rota quanto no nível de domínio. As regras no nível de rota têm precedência sobre as regras no nível de domínio.
Controle de IP no nível de rota
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Endereços IP ou blocos CIDR permitidos para esta rota. Separados por vírgula. |
— |
Não |
|
|
Endereços IP ou blocos CIDR bloqueados para esta rota. Separados por vírgula. |
— |
Não |
Example 1: Permita acesso a example.com/test apenas a partir de 1.1.X.X.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: 1.1.X.X
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: 1.1.X.X
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Example 2: Bloqueie acesso a example.com/test a partir de 2.2.2.2.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/blacklist-source-range: 2.2.2.2
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/blacklist-source-range: 2.2.2.2
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Controle de IP no nível de domínio
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Endereços IP ou blocos CIDR permitidos para todas as rotas de um domínio. Listas de permissões no nível de rota têm precedência. Separados por vírgula. |
— |
Não |
|
|
Endereços IP ou blocos CIDR bloqueados para todas as rotas de um domínio. Listas de bloqueios no nível de rota têm precedência. Separados por vírgula. |
— |
Não |
Example 1: Permita acesso a todas as rotas de example.com a partir de 1.1.X.X e 2.2.2.2.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/domain-whitelist-source-range: 1.1.X.X,2.2.2.2
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
- backend:
service:
name: app-service
port:
number: 80
path: /app
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/domain-whitelist-source-range: 1.1.X.X,2.2.2.2
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
- path: /app
backend:
serviceName: app-service
servicePort: 80
Example 2: Permita todas as rotas de example.com a partir de 1.1.X.X e 2.2.2.2, mas restrinja /order apenas a 3.3.X.X. A lista de permissões no nível de rota em /order substitui a lista de permissões no nível de domínio para essa rota.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/domain-whitelist-source-range: 1.1.X.X,2.2.2.2
name: demo-domain
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
- backend:
service:
name: app-service
port:
number: 80
path: /app
pathType: Exact
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: 3.3.X.X
name: demo-route
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /order
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/domain-whitelist-source-range: 1.1.X.X,2.2.2.2
name: demo-domain
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
- path: /app
backend:
serviceName: app-service
servicePort: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: 3.3.X.X
name: demo-route
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /order
backend:
serviceName: demo-service
servicePort: 80
Limitação de taxa por gateway único
A limitação de taxa por gateway único restringe a taxa de requisições em uma rota por réplica de gateway. Use este recurso para controle de taxa por instância. Para controle de taxa em todo o cluster, consulte Controle global de limitação de taxa.
O MSE Ingress usa um modelo de token bucket para controle de burst. A anotação route-limit-rpm ou route-limit-rps define a taxa sustentada — a velocidade com que o token bucket é reabastecido. A anotação route-limit-burst-multiplier define a capacidade de burst como um múltiplo dessa taxa: limite de burst = taxa x multiplicador. Requisições que excedem a capacidade de burst são rejeitadas com local_rate_limited no corpo da resposta.
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Máximo de requisições por minuto (RPM) por réplica de gateway. Limite de burst = RPM x |
— |
Não |
|
|
Máximo de requisições por segundo (RPS) por réplica de gateway. Limite de burst = RPS x |
— |
Não |
|
|
Multiplicador de capacidade de burst aplicado ao limite configurado de RPM ou RPS. |
|
Não |
Example 1: Limite example.com/test a 100 RPM com um limite de burst de 200 (multiplicador = 2).
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/route-limit-rpm: "100"
mse.ingress.kubernetes.io/route-limit-burst-multiplier: "2"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/route-limit-rpm: "100"
mse.ingress.kubernetes.io/route-limit-burst-multiplier: "2"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Example 2: Limite example.com/test a 10 RPS com o limite de burst padrão de 50 (multiplicador = 5).
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/route-limit-rps: "10"
# Default burst multiplier is 5, giving a burst limit of 50 RPS
# mse.ingress.kubernetes.io/route-limit-burst-multiplier: "5"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/route-limit-rps: "10"
# Default burst multiplier is 5, giving a burst limit of 50 RPS
# mse.ingress.kubernetes.io/route-limit-burst-multiplier: "5"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Controle global de limitação de taxa
O MSE Ingress integra-se ao Sentinel para impor um limite global de RPS em todas as réplicas de um cluster de gateway no nível de rota. Quando a limitação é acionada, o código de resposta padrão é 429 e o corpo da resposta é sentinel rate limited.
O controle global de limitação de taxa requer a versão 1.2.25 ou posterior do gateway MSE Ingress.
Configure o limite de taxa em todo o cluster com mse.ingress.kubernetes.io/rate-limit. Para personalizar a resposta de limitação, escolha uma das duas abordagens: resposta personalizada ou redirecionamento. Apenas uma abordagem pode estar ativa por vez.
Resposta personalizada
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
RPS máximo para esta rota em todo o cluster de gateway. |
— |
Sim |
|
|
Código de resposta HTTP retornado quando a limitação é acionada. |
|
Não |
|
|
Tipo de conteúdo do corpo da resposta. |
|
Não |
|
|
Conteúdo do corpo da resposta quando a limitação é acionada. |
|
Não |
Example 1: Limite example.com/test a 100 RPS em todo o cluster com a resposta padrão (HTTP 429, sentinel rate limited).
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/rate-limit: "100"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/rate-limit: "100"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Example 2: Limite example.com/test a 100 RPS em todo o cluster. Quando limitado, retorne HTTP 503 com o corpo server is overload.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/rate-limit: "100"
mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-code: 503
mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-body: "server is overload"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/rate-limit: "100"
mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-code: 503
mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-body: "server is overload"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Redirecionamento
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
URL para redirecionar o cliente quando a limitação é acionada. |
— |
Não |
Example: Limite example.com/test a 100 RPS em todo o cluster. Quando limitado, redirecione para example.com/fallback.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/rate-limit: "100"
mse.ingress.kubernetes.io/rate-limit-fallback-redirect-url: "example.com/fallback"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/rate-limit: "100"
mse.ingress.kubernetes.io/rate-limit-fallback-redirect-url: "example.com/fallback"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Controle global de concorrência
O MSE Ingress integra-se ao Sentinel para limitar o número de requisições em andamento em uma rota em todo o cluster de gateway. Quando o limite é excedido, o código de resposta padrão é 429 e o corpo da resposta é sentinel rate limited.
O controle global de concorrência requer a versão 1.2.25 ou posterior do gateway MSE Ingress.
Configure o limite de concorrência em todo o cluster com mse.ingress.kubernetes.io/concurrency-limit. Para personalizar a resposta quando o limite é excedido, use resposta personalizada ou redirecionamento. Apenas uma abordagem pode estar ativa por vez.
Resposta personalizada
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Número máximo de requisições em andamento para esta rota em todo o cluster de gateway. |
— |
Sim |
|
|
Código de resposta HTTP quando o controle de concorrência é acionado. |
|
Não |
|
|
Tipo de conteúdo do corpo da resposta. |
|
Não |
|
|
Conteúdo do corpo da resposta quando o controle de concorrência é acionado. |
|
Não |
Example 1: Limite requisições simultâneas em andamento para example.com/test a 1.000 em todo o cluster, com a resposta padrão.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/concurrency-limit: "1000"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/concurrency-limit: "1000"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Example 2: Limite requisições simultâneas em andamento para example.com/test a 1.000 em todo o cluster. Quando o limite for excedido, retorne HTTP 503 com o corpo server is overload.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/concurrency-limit: "1000"
mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-code: 503
mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body: "server is overload"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/concurrency-limit: "1000"
mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-code: 503
mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body: "server is overload"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Redirecionamento
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
URL para redirecionar o cliente quando o controle de concorrência é acionado. |
— |
Não |
Example: Limite requisições simultâneas em andamento para example.com/test a 1.000 em todo o cluster. Quando o limite for excedido, redirecione para example.com/fallback.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/concurrency-limit: "1000"
mse.ingress.kubernetes.io/concurrency-limit-fallback-redirect-url: "example.com/fallback"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/concurrency-limit: "1000"
mse.ingress.kubernetes.io/concurrency-limit-fallback-redirect-url: "example.com/fallback"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Espelhamento de tráfego
O espelhamento de tráfego copia requisições ativas para um serviço secundário sem afetar a resposta original. Utilize este recurso para auditoria, testes ou depuração de tráfego em um ambiente sombra.
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Serviço de destino para o tráfego espelhado. Formato: |
— |
Sim (para habilitar espelhamento) |
|
|
Porcentagem de tráfego a ser espelhada. Intervalo válido: 0–100. |
|
Não |
Quando o tráfego espelhado é encaminhado para o serviço de destino, o sufixo-shadowé automaticamente anexado ao cabeçalhoHost. Por exemplo,example.comtorna-seexample.com-shadow.
Example 1: Espelhe 100% das requisições para example.com/test para test/app:8080.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/mirror-target-service: test/app:8080
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/mirror-target-service: test/app:8080
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Example 2: Espelhe 10% das requisições para example.com/test para test/app:8080.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/mirror-target-service: test/app:8080
mse.ingress.kubernetes.io/mirror-percentage: 10
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/mirror-target-service: test/app:8080
mse.ingress.kubernetes.io/mirror-percentage: 10
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Protocolos de serviço de backend: HTTPS e gRPC
Por padrão, o MSE Ingress usa HTTP para encaminhar requisições aos containers de backend. Use nginx.ingress.kubernetes.io/backend-protocol para alternar para HTTPS ou gRPC.
Se o recurso de Serviço Kubernetes para seu backend tiver uma porta chamadagrpcouhttp2, o MSE Ingress usa automaticamente o protocolo correspondente sem exigir a anotaçãobackend-protocol. Isso difere do comportamento padrão do NGINX Ingress.
Example 1: Encaminhe requisições para um backend via HTTPS.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Example 2: Encaminhe requisições para um backend gRPC. Dois métodos estão disponíveis.
Método 1 — use a anotação backend-protocol:
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Método 2 — nomeie a porta do Serviço como grpc para que o MSE Ingress detecte automaticamente o protocolo:
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /order
pathType: Exact
---
apiVersion: v1
kind: Service
metadata:
name: demo-service
spec:
ports:
- name: grpc
port: 80
protocol: TCP
selector:
app: demo-service
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
name: demo-service
spec:
ports:
- name: grpc
port: 80
protocol: TCP
selector:
app: demo-service
Algoritmos de balanceamento de carga
O MSE Ingress suporta vários algoritmos de balanceamento de carga para distribuir requisições aos Pods de backend. Escolha com base na distribuição de tráfego e nos requisitos de sessão:
|
Algoritmo |
Valor da anotação |
Descrição |
Use quando |
|
Round robin |
|
Distribui requisições uniformemente entre os Pods em rotação. |
Padrão; adequado para backends stateless com desempenho uniforme. |
|
Least connections |
|
Roteia cada requisição para o Pod com o menor número de conexões ativas. |
Backends com durações de requisição variáveis. |
|
Random |
|
Roteia requisições para um Pod selecionado aleatoriamente. |
Distribuição uniforme simples sem estado. |
|
Consistent hashing |
Veja abaixo |
Roteia requisições com a mesma chave de hash para o mesmo Pod. |
Afinidade de sessão por IP, cabeçalho ou parâmetro de consulta. |
O algoritmo de média móvel ponderada exponencialmente (EWMA) não é suportado. Se configurado, ele reverte para round robin.
Algoritmos comuns de balanceamento de carga
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Algoritmo de balanceamento de carga. Valores válidos: |
|
Não |
Example: Use least connections para demo-service.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/load-balance: "least_conn"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /order
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/load-balance: "least_conn"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Consistent hashing
O consistent hashing roteia requisições com a mesma chave de hash para o mesmo Pod de backend. O MSE Ingress suporta hashing por variáveis NGINX, cabeçalhos de requisição ou parâmetros de consulta.
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Expressão da chave de hash. Valores suportados: variáveis NGINX (ex.: |
— |
Sim (para consistent hashing) |
Example 1: Hash por IP do cliente — requisições do mesmo IP sempre chegam ao mesmo Pod.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Example 2: Hash pelo cabeçalho de requisição X-Stage — requisições com o mesmo valor de X-Stage sempre chegam ao mesmo Pod.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/upstream-hash-by: "$http_x-stage"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/upstream-hash-by: "$http_x-stage"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Example 3: Hash pelo parâmetro de consulta x-stage — requisições com o mesmo valor de x-stage sempre chegam ao mesmo Pod.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/upstream-hash-by: "$arg_x-stage"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/upstream-hash-by: "$arg_x-stage"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Warm-up (inicialização gradual)
O recurso de warm-up aumenta gradualmente o tráfego para um Pod recém-iniciado durante uma janela de tempo especificada, evitando que um Pod frio receba carga total imediatamente. Apenas os algoritmos round robin e least connections suportam warm-up.
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Duração da janela de warm-up em segundos. Quando um novo Pod inicia, o tráfego aumenta gradualmente durante este período. |
Warm-up desativado |
Não |
Example: Habilite uma janela de warm-up de 30 segundos para demo-service.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/warmup: "30"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/warmup: "30"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Afinidade de cookie (persistência de sessão)
A afinidade de cookie fixa um cliente ao mesmo Pod de backend entre requisições usando um cookie gerado pelo gateway. Na primeira requisição, o MSE Ingress define um cookie na resposta. Requisições subsequentes do mesmo cliente incluem esse cookie e são roteadas para o mesmo Pod.
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Habilita afinidade de cookie. O único valor válido é |
— |
Sim (para habilitar afinidade de cookie) |
|
|
Modo de afinidade. O único valor válido é |
|
Não |
|
|
Nome do cookie usado como chave de hash. |
|
Não |
|
|
Atributo de caminho do cookie gerado. |
|
Não |
|
|
Tempo de expiração do cookie gerado, em segundos. |
Escopo de sessão |
Não |
|
|
Tempo de expiração do cookie gerado, em segundos. |
Escopo de sessão |
Não |
Example 1: Habilite afinidade de cookie com padrões — nome do cookie INGRESSCOOKIE, caminho /, tempo de vida com escopo de sessão.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Example 2: Habilite afinidade de cookie com um cookie personalizado chamado test, caminho / e expiração de 10 segundos.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "test"
nginx.ingress.kubernetes.io/session-cookie-max-age: "10"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "test"
nginx.ingress.kubernetes.io/session-cookie-max-age: "10"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Pool de conexões entre gateway e serviço de backend
Configure um pool de conexões para controlar o número de conexões entre o gateway e um serviço de backend. Isso evita que o backend seja sobrecarregado durante picos de tráfego.
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Máximo total de conexões TCP entre o gateway e o serviço de backend. |
— |
Não |
|
|
Máximo de conexões TCP entre o gateway e um único Pod do serviço de backend. |
— |
Não |
|
|
Máximo de requisições HTTP por conexão entre o gateway e o serviço de backend. |
— |
Não |
Example: Para demo-service, defina um máximo de 10 conexões totais e 2 conexões por Pod.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/connection-policy-tcp-max-connection: 10
mse.ingress.kubernetes.io/connection-policy-tcp-max-connection-per-endpoint: 2
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/connection-policy-tcp-max-connection: 10
mse.ingress.kubernetes.io/connection-policy-tcp-max-connection-per-endpoint: 2
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Versões TLS e suítes de criptografia
O intervalo padrão de versões TLS para o MSE Ingress é de TLSv1.0 (mais antiga) a TLSv1.3 (mais recente). As suítes de criptografia padrão são:
ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES128-SHA
ECDHE-RSA-AES128-SHA
AES128-GCM-SHA256
AES128-SHA
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-ECDSA-AES256-SHA
ECDHE-RSA-AES256-SHA
AES256-GCM-SHA384
AES256-SHA
Use as seguintes anotações para configurar definições TLS por nome de domínio.
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Versão TLS mais antiga aceita. Valores válidos: |
|
Não |
|
|
Versão TLS mais recente aceita. |
|
Não |
|
|
Suítes de criptografia TLS, separadas por vírgula. Tem efeito apenas para versões TLS 1.0–1.2. |
Ver lista padrão acima |
Não |
Example: Restrinja example.com apenas a TLSv1.2.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/tls-min-protocol-version: "TLSv1.2"
mse.ingress.kubernetes.io/tls-max-protocol-version: "TLSv1.2"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
mse.ingress.kubernetes.io/tls-min-protocol-version: "TLSv1.2"
mse.ingress.kubernetes.io/tls-max-protocol-version: "TLSv1.2"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80
Mutual TLS (mTLS) entre gateway e serviço de backend
Por padrão, o MSE Ingress usa HTTP para encaminhar requisições aos containers de backend. Quando nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" está definido, o MSE Ingress usa TLS unidirecional: ele autentica o certificado do backend, que deve ser emitido por uma autoridade certificadora (CA) reconhecida.
Para Mutual TLS (mTLS), tanto o gateway quanto o serviço de backend autenticam os certificados um do outro.
|
Anotação |
Descrição |
Padrão |
Obrigatório |
|
|
Certificado de cliente usado pelo gateway para autenticação no backend. Formato: |
— |
Sim (para mTLS) |
|
|
Server Name Indication (SNI) usado durante o handshake TLS. |
— |
Não |
|
|
Habilita ou desabilita SNI durante o handshake TLS. |
— |
Não |
Example: Configure mTLS entre o gateway e demo-service usando gateway-cert no namespace default.
Kubernetes v1.19+:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-ssl-secret: "default/gateway-cert"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- backend:
service:
name: demo-service
port:
number: 80
path: /test
pathType: Exact
Kubernetes anterior à v1.19:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/proxy-ssl-secret: "default/gateway-cert"
name: demo
spec:
ingressClassName: mse
rules:
- host: example.com
http:
paths:
- path: /test
backend:
serviceName: demo-service
servicePort: 80