Configure recursos avançados do ALB Ingress, como regras de roteamento, redirecionamentos HTTPS, reescritas, implantações canário e persistência de sessão.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
namespace: default
annotations:
alb.ingress.kubernetes.io/cross-zone-enabled: "false"
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
Encaminhar solicitações com base em nomes de domínio
Crie um Ingress para encaminhar solicitações com base em um nome de domínio ou em um nome de domínio vazio.
Nome de domínio
Este exemplo define o caminho de roteamento como /hello. As solicitações para demo.domain.ingress.top/hello são encaminhadas para o service de backend.
-
Implante o manifesto a seguir para criar um Service, um Deployment e um Ingress que encaminha solicitações com base no nome de domínio especificado.
-
Execute
kubectl get ingpara obter o endereço da instância do ALB. Em seguida, execute o comando a seguir, substituindoADDRESSpelo endereço da instância.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress namespace: default annotations: alb.ingress.kubernetes.io/cross-zone-enabled: "false" spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /test pathType: Prefix backend: service: name: tea-svc port: number: 80Saída esperada:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress namespace: default annotations: alb.ingress.kubernetes.io/cross-zone-enabled: "false" spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /test pathType: Prefix backend: service: name: tea-svc port: number: 80
Nome de domínio vazio
Com um nome de domínio vazio e o caminho de roteamento /hello, as solicitações para ADDRESS/hello são encaminhadas para o service de backend.
-
Implante o manifesto a seguir para criar um Service, um Deployment e um Ingress.
-
Execute
kubectl get ingpara obter o endereço da instância do ALB. Em seguida, execute o comando a seguir, substituindoADDRESSpelo endereço da instância.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress namespace: default annotations: alb.ingress.kubernetes.io/cross-zone-enabled: "false" spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /test pathType: Prefix backend: service: name: tea-svc port: number: 80Saída esperada:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress namespace: default annotations: alb.ingress.kubernetes.io/cross-zone-enabled: "false" spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /test pathType: Prefix backend: service: name: tea-svc port: number: 80
Encaminhamento com base em caminho
O ALB Ingress encaminha solicitações com base nos caminhos da URL. Especifique o modo de correspondência no campo pathType. O pathType oferece suporte a três modos.
Correspondência exata (Exact): Corresponde exatamente ao caminho da URL.
Padrão (ImplementationSpecific): O ALB Ingress Controller trata isso como uma correspondência exata. Se o caminho não for especificado, o padrão será
/.Correspondência de prefixo (Prefix): Corresponde ao prefixo do caminho da URL.
Quando o
pathTypeéExactouPrefix, o caminho deve ser um caminho absoluto não vazio. Caso contrário, a validação falha.Se as políticas de correspondência de URL entrarem em conflito, as solicitações serão encaminhadas com base na prioridade da regra de encaminhamento.
-
Caminhos simples (/, /foo, /foo/)
Modo de correspondência
Caminho da regra
Caminho da solicitação
Correspondência?
Correspondência de prefixo (Prefix)
/
/ (corresponde a todos os caminhos)
Sim
/foo
-
/foo
-
/foo/
Sim
/foo/
-
/foo
-
/foo/
Sim
/aaa
/ccc
Não. O prefixo não corresponde.
Correspondência exata (Exact) ou padrão (ImplementationSpecific)
/foo
/foo
Sim
/bar
Não
/foo/
Não
/foo/
/foo
Não
-
-
Caminhos hierárquicos (/aaa/bb, /aaa/bbb, /aaa/bbb/)
Modo de correspondência
Caminho da regra
Caminho da solicitação
Correspondência?
Correspondência de prefixo (Prefix)
/aaa/bb
/aaa/bbb
Não
/aaa/bbb
/aaa/bbb
Sim
/aaa/bbb/
/aaa/bbb
Sim. A barra final no caminho da regra é ignorada.
/aaa/bbb
/aaa/bbb/
Sim. A barra final no caminho da solicitação é correspondida.
/aaa/bbb/ccc
Sim. O caminho da regra é um prefixo do caminho da solicitação.
-
Dois caminhos de regra
Modo de correspondência
Caminho da regra
Caminho da solicitação
Correspondência?
Correspondência de prefixo (Prefix)
-
/
-
/aaa
/aaa/ccc
Sim. O caminho da solicitação corresponde ao caminho da regra
/aaa.-
/aaa
-
/
/aaa/ccc
Sim. O caminho da solicitação corresponde ao caminho da regra
/aaa./ccc
Sim. O caminho da solicitação corresponde ao caminho da regra
/.-
/aaa
-
/bbb
/ccc
Não. O prefixo não corresponde.
-
Exemplos para cada modo de correspondência:
Correspondência de prefixo (Prefix)
Este modo executa uma correspondência de prefixo que diferencia maiúsculas de minúsculas nos elementos do caminho da URL, separados por /.
O caminho da regra / corresponde a todos os caminhos que começam com /, como /hello.
-
Implante o manifesto a seguir para criar o recurso de ingress.
-
Execute
kubectl get ingpara obter o endereço da instância do ALB. Em seguida, execute o comando a seguir, substituindoADDRESSpelo endereço obtido.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress namespace: default annotations: alb.ingress.kubernetes.io/cross-zone-enabled: "false" spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /test pathType: Prefix backend: service: name: tea-svc port: number: 80Saída esperada:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress namespace: default annotations: alb.ingress.kubernetes.io/cross-zone-enabled: "false" spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /test pathType: Prefix backend: service: name: tea-svc port: number: 80
Correspondência exata ou padrão
O caminho da regra /hello corresponde apenas a solicitações para /hello.
-
Implante o manifesto a seguir para criar o recurso de ingress.
-
Execute
kubectl get ingpara obter o endereço da instância do ALB. Em seguida, execute o comando a seguir, substituindoADDRESSpelo endereço obtido.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress namespace: default annotations: alb.ingress.kubernetes.io/cross-zone-enabled: "false" spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /test pathType: Prefix backend: service: name: tea-svc port: number: 80Saída esperada:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress namespace: default annotations: alb.ingress.kubernetes.io/cross-zone-enabled: "false" spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /test pathType: Prefix backend: service: name: tea-svc port: number: 80
Configurar verificações de integridade
Use anotações para configurar verificações de integridade para o ALB Ingress.
Exemplos de anotações:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
namespace: default
annotations:
alb.ingress.kubernetes.io/cross-zone-enabled: "false"
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
|
Parâmetro |
Descrição |
Padrão |
|
|
Especifica se as verificações de integridade devem ser ativadas para o grupo de servidores de backend.
|
|
|
|
O caminho usado para as verificações de integridade. |
|
|
|
O protocolo usado para as verificações de integridade.
|
|
|
|
Versão do protocolo HTTP. Só entra em vigor quando o
|
|
|
|
O método usado para as verificações de integridade.
Importante
Se o |
|
|
|
Código(s) de status que indicam um servidor de backend íntegro. Especifique uma ou mais opções, separadas por vírgulas.
|
|
|
|
Código(s) de status que indicam um servidor de backend íntegro. Tem precedência sobre o Os valores válidos dependem do
|
|
|
|
O tempo limite da verificação de integridade em segundos. Valores válidos: 1 a 300. |
|
|
|
O intervalo da verificação de integridade em segundos. Valores válidos: 1 a 50. |
|
|
|
O número de verificações de integridade bem-sucedidas consecutivas necessárias para marcar um servidor de backend como íntegro. Valores válidos: 2 a 10. |
|
|
|
O número de verificações de integridade com falha consecutivas necessárias para marcar um servidor de backend como não íntegro. Valores válidos: 2 a 10. |
|
|
|
A porta usada para as verificações de integridade. |
Nota
Um valor de |
Redirecionar solicitações HTTP para HTTPS
Adicione a seguinte anotação para redirecionar solicitações HTTP para a porta HTTPS 443.
Este recurso se aplica apenas a regras de encaminhamento HTTP na porta do listener 80.
Esta anotação deve ser usada com anotações para ações de encaminhamento personalizadas, como
RemoveHeader,InsertHeadereCors.Antes de usar esta anotação, certifique-se de que um listener HTTPS esteja configurado na porta 443 no AlbConfig. Consulte Usar um AlbConfig para configurar um listener do ALB.
|
Parâmetro |
Descrição |
Exemplo de anotação |
|
|
Redireciona solicitações HTTP para a porta HTTPS 443. |
|
Configure HTTPS ou gRPC no backend
Adicione a seguinte anotação para usar HTTPS ou gRPC como protocolo de backend.
Não é possível modificar o protocolo de backend após a criação do ingress. Para alterá-lo, exclua e recrie o ingress.
|
Parâmetro |
Descrição |
Exemplo de YAML |
|
|
|
|
Configure expressões regulares
Use a anotação alb.ingress.kubernetes.io/use-regex: "true" para ativar a correspondência de expressões regulares nas regras de caminho em spec.rules com pathType: Prefix.
Aplica-se apenas a regras de caminho com
pathType: Prefix. Ativa a sintaxe de regex no campopathdespec.rules, independentemente das condições de encaminhamento personalizadas.Esta anotação ativa a correspondência de regex independentemente do seu valor (
trueoufalse). Remova a anotação para desativar.Sem esta anotação, a criação do Ingress falha se o caminho contiver caracteres especiais como
=^()[]|, etc..Os valores de caminho em uma condição de encaminhamento personalizada (
alb.ingress.kubernetes.io/conditions.YOUR-SVC-NAME) são passados diretamente para o ALB e não exigem a anotaçãouse-regex. Para ativar a correspondência de regex, adicione o prefixo~*ou~ao valor do caminho. A anotaçãouse-regexafeta apenas o campopathemspec.rules.
Custom forwarding rules
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
namespace: default
annotations:
alb.ingress.kubernetes.io/cross-zone-enabled: "false"
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
Spec.rules
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
namespace: default
annotations:
alb.ingress.kubernetes.io/cross-zone-enabled: "false"
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
|
Parâmetro |
Descrição |
|
|
|
Ativa expressões regulares para regras de caminho em |
|
|
|
Configura uma condição de encaminhamento personalizada. Consulte Personalizar regras de encaminhamento para um ALB Ingress. Substitua |
|
A tabela a seguir descreve as regras de correspondência de expressões regulares.
|
Objeto |
Prefixo |
Exemplo de regra |
Caminho do cliente |
Correspondência? |
Descrição |
|
Nome de domínio |
Começa com |
|
test.EXAMPLE.com |
Sim |
Nomes de domínio aceitam correspondência de expressões regulares sem diferenciar maiúsculas de minúsculas. |
|
Caminho |
Começa com |
|
/API |
Sim |
Caminhos aceitam correspondência de expressões regulares sem diferenciar maiúsculas de minúsculas. |
|
Começa com |
|
/Api |
Não |
Caminhos aceitam correspondência de expressões regulares diferenciando maiúsculas de minúsculas. |
Correspondência de prefixo com regex
A correspondência de regex usa por padrão a "correspondência de contêm". Para corresponder apenas a caminhos que começam com um conteúdo específico, adicione ^ no início da expressão. Por exemplo, ^/api corresponde apenas a caminhos que começam com /api.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
namespace: default
annotations:
alb.ingress.kubernetes.io/cross-zone-enabled: "false"
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
Configure reescritas
O ALB Ingress reescreve os caminhos das requisições antes de encaminhá-las ao Service de backend. Use as duas anotações a seguir:
-
alb.ingress.kubernetes.io/rewrite-target: /path/${number}: Especifica o caminho para o qual as requisições são reescritas.ImportanteUse variáveis
${number}para referenciar grupos de captura da expressão regular no caminho do Ingress. É possível referenciar até três grupos de captura usando${1},${2}e${3}.O
pathTypedo Ingress deve ser definido comoPrefix.
-
alb.ingress.kubernetes.io/use-regex: true: Ativa o uso de uma expressão regular no caminho. Isso é ativado por padrão ao configurar orewrite-target.ImportanteEsta anotação ativa a correspondência de regex independentemente do seu valor (
trueoufalse). Remova a anotação para desativar.Sem esta anotação, a criação do Ingress falha se o caminho contiver caracteres especiais como
"%#;!()[]^,"\"".
Exemplos de configuração
Exemplo 1: Remover um prefixo
No exemplo de YAML a seguir, o path: /something(/|$)(.*) usa uma expressão regular para dividir o caminho da requisição do cliente em três partes:
/something: Corresponde ao prefixo a ser removido.(/|$): O primeiro grupo de captura, que corresponde a uma/após/somethingou ao fim do caminho ($).(.*): O segundo grupo de captura, que corresponde a todos os caracteres após/something/e é referenciado como${2}no caminho reescrito.
A anotação alb.ingress.kubernetes.io/rewrite-target especifica o caminho reescrito como / seguido por ${2}. A tabela a seguir mostra os resultados da reescrita.
|
Caminho original do cliente |
Correspondência de regex do caminho |
Caminho reescrito |
|
|
Correspondência. O segundo grupo de captura está vazio. |
|
|
|
Correspondência. O segundo grupo de captura está vazio. |
|
|
|
Correspondência. O segundo grupo de captura é |
|
|
|
Sem correspondência. Neste exemplo, como a requisição não corresponde a nenhuma regra de roteamento, o ALB Ingress retorna um código de status 503. |
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
namespace: default
annotations:
alb.ingress.kubernetes.io/cross-zone-enabled: "false"
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
Exemplo 2: Capturar e reorganizar várias partes
O exemplo a seguir captura e reorganiza várias partes do caminho /items/(.*)/(.*)/(.*). Ele também converte segmentos de caminho em parâmetros de consulta, o que não exige alterações no lado do cliente. O caminho reescrito é construído como /, seguido pelo segundo grupo de captura ${2}, a string ?code= e o terceiro grupo de captura ${3}. A tabela a seguir mostra os resultados da reescrita.
Este exemplo exige que o cliente use um formato de caminho fixo com quatro segmentos.
|
Caminho original do cliente |
Correspondência de regex do caminho |
Caminho reescrito |
|
|
Correspondência. O segundo grupo de captura é |
|
|
|
Correspondência. O segundo grupo de captura é |
|
|
|
Sem correspondência. Neste exemplo, como a requisição não corresponde a nenhuma regra de roteamento, o ALB Ingress retorna um código de status 503. |
|
|
|
Sem correspondência. Neste exemplo, como a requisição não corresponde a nenhuma regra de roteamento, o ALB Ingress retorna um código de status 503. |
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
namespace: default
annotations:
alb.ingress.kubernetes.io/cross-zone-enabled: "false"
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
Exemplo 3: Reescrever vários caminhos para um único caminho
O exemplo a seguir usa uma expressão regular para corresponder a vários caminhos (/app-a(/|$)(.*) e /app-b(/|$)(.*)) e os reescreve para um único caminho. O caminho reescrito é /app-c/ seguido por ${2}. A tabela a seguir mostra os resultados da reescrita.
|
Caminho original do cliente |
Correspondência de regex do caminho |
Caminho reescrito |
|
|
Correspondência. O segundo grupo de captura é |
|
|
|
Correspondência. O segundo grupo de captura é |
|
|
|
Correspondência. O segundo grupo de captura está vazio. |
|
|
|
Sem correspondência. Neste exemplo, como a requisição não corresponde a nenhuma regra de roteamento, o ALB Ingress retorna um código de status 503. |
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
namespace: default
annotations:
alb.ingress.kubernetes.io/cross-zone-enabled: "false"
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
Exemplo 4: Reescrever nome de domínio
A anotação alb.ingress.kubernetes.io/rewrite-target oferece suporte apenas à alteração do caminho. Para alterar outras partes da URL, como o nome de domínio ou parâmetros de consulta, use uma regra de encaminhamento personalizada.
Testar regras de reescrita
Use o comando sed para testar se um caminho do cliente corresponde à expressão regular do caminho e para visualizar o caminho reescrito.
Este exemplo usa o caminho de captura /items/(.*)/(.*)/(.*) e a regra de reescrita /${2}?code=${3} do Exemplo 2: Capturar e reorganizar várias partes.
-
Salve os seguintes caminhos de exemplo em um arquivo chamado
path2.txt:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress namespace: default annotations: alb.ingress.kubernetes.io/cross-zone-enabled: "false" spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /test pathType: Prefix backend: service: name: tea-svc port: number: 80 -
Verifique se os caminhos correspondem e visualize os caminhos reescritos:
O comando a seguir adapta a expressão regular do caminho do exemplo (
/items/(.*)/(.*)/(.*)) e o caminho reescrito (/${2}?code=${3}) para o sed. Ao usar o sed, caracteres especiais como/devem ser escapados com uma barra invertida (\), e as referências de grupos de captura são escritas como\2em vez de${2}.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress namespace: default annotations: alb.ingress.kubernetes.io/cross-zone-enabled: "false" spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /test pathType: Prefix backend: service: name: tea-svc port: number: 80A saída esperada é a seguinte. Os dois primeiros caminhos correspondem à regra e são reescritos, enquanto os dois últimos não correspondem e permanecem inalterados.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress namespace: default annotations: alb.ingress.kubernetes.io/cross-zone-enabled: "false" spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /test pathType: Prefix backend: service: name: tea-svc port: number: 80
Configure portas de listener personalizadas
Adicione uma anotação para expor um service tanto na porta 80 (HTTP) quanto na porta 443 (HTTPS).
O ALB não oferece suporte à criação de listeners diretamente em um Ingress. Primeiro crie as portas e os protocolos de listener necessários em um AlbConfig e, em seguida, referencie-os no Ingress. Consulte Usar um AlbConfig para configurar um listener do ALB.
|
Parâmetro |
Descrição |
Exemplo de YAML |
|
|
Expõe o service nas portas 80 e 443. |
|
Configure a prioridade da regra de encaminhamento
Por padrão, o ALB prioriza as regras de encaminhamento com base nos seguintes critérios:
-
O sistema classifica os recursos do Ingress em ordem lexicográfica por
namespace/name. Um Ingress com um valor lexicográfico menor tem uma prioridade maior.Os namespaces são comparados primeiro e, em seguida, os nomes caractere por caractere.
-
Dentro de um único Ingress, as regras são priorizadas pela ordem no campo
rules. As regras listadas primeiro têm uma prioridade maior.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress namespace: default annotations: alb.ingress.kubernetes.io/cross-zone-enabled: "false" spec: ingressClassName: alb rules: - host: alb.ingress.alibaba.com http: paths: - path: /test pathType: Prefix backend: service: name: tea-svc port: number: 80
Para especificar a prioridade de uma regra de encaminhamento do ALB sem alterar o namespace/name do Ingress, adicione a seguinte anotação ao Ingress:
|
Parâmetro |
Descrição |
Valor |
Exemplo de YAML |
|
|
Especifica a prioridade da regra de encaminhamento do ALB. Um valor menor indica uma prioridade maior. A prioridade de cada regra deve ser única dentro do mesmo listener. |
[1, 1000] Padrão: 10 |
|
Implemente liberações canário com anotações
O ALB oferece suporte a liberações canário com base em cabeçalhos, cookies e pesos. Consulte Implemente liberações canário usando um ALB Ingress para conhecer as melhores práticas.
|
Parâmetro |
Descrição |
Descrição |
|
|
Ativa o recurso de liberação canário. |
|
-
Distribua o tráfego canário com base em um cabeçalho especificado
Parâmetro
Descrição
Exemplo de YAML
alb.ingress.kubernetes.io/canary-by-headerEssas anotações definem um cabeçalho e um valor de solicitação personalizados para o roteamento de tráfego. Ambas as anotações são obrigatórias.
-
Quando o
headere oheader-valueem uma solicitação correspondem aos valores configurados, o ALB direciona o tráfego da solicitação para o ponto de entrada do service canário. -
O ALB avalia as solicitações não correspondentes em relação a regras de prioridade mais baixa.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/order: "1" alb.ingress.kubernetes.io/canary: "true" alb.ingress.kubernetes.io/canary-by-header: "location" alb.ingress.kubernetes.io/canary-by-header-value: "hz" name: demo-canary spec: ... ...alb.ingress.kubernetes.io/canary-by-header-valueSe uma solicitação contiver o cabeçalho
location: hz, o ALB roteará o tráfego para o Service canário. Outras solicitações são avaliadas com base em regras de prioridade mais baixa, como aquelas baseadas em cookie ou peso. -
-
Distribua o tráfego canário com base em um cookie especificado
Parâmetro
Valor do cookie
Exemplo de YAML
alb.ingress.kubernetes.io/canary-by-cookie-
always: Roteia todas as solicitações para o Service canário. -
never: Nunca roteia solicitações para o Service canário.
As liberações canário baseadas em cookie não aceitam valores personalizados, apenas
alwaysenever.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/order: "2" alb.ingress.kubernetes.io/canary: "true" alb.ingress.kubernetes.io/canary-by-cookie: "demo" name: demo-canary-cookie ... ...Se uma solicitação contiver o cabeçalho
Cookie: demo=always, o ALB roteará o tráfego para o Service canário. Se o cabeçalho contiverCookie: demo=never, o ALB não roteará o tráfego para o Service canário. -
-
Distribua o tráfego por peso
Parâmetro
Descrição
Exemplo de YAML
alb.ingress.kubernetes.io/canary-weightPorcentagem de tráfego roteado para o Service canário. Valores válidos: 0 a 100.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/order: "3" alb.ingress.kubernetes.io/canary: "true" alb.ingress.kubernetes.io/canary-weight: "50" name: demo-canary-weight
Configure a persistência de sessão com anotações
Use as seguintes anotações para configurar a persistência de sessão para um ALB Ingress.
Anotações de exemplo:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
namespace: default
annotations:
alb.ingress.kubernetes.io/cross-zone-enabled: "false"
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
|
Parâmetro |
Descrição |
Padrão |
|
|
Define se a persistência de sessão será ativada.
|
|
|
|
Define como o balanceador de carga lida com o cookie.
Nota
Aplica-se apenas quando |
|
|
|
O tempo limite do cookie em segundos. Valores válidos: 1 a 86400. Aplica-se apenas quando |
1000 |
|
|
O valor do cookie personalizado. Obrigatório (não vazio) quando |
"" |
Especifique o algoritmo de balanceamento de carga
Use uma anotação para especificar o algoritmo de balanceamento de carga para um grupo de servidores de backend.
|
Parâmetro |
Valor |
Descrição |
|
|
|
|
Round robin ponderado. Servidores com pesos maiores recebem mais solicitações. (Padrão) |
|
|
|
Distribui solicitações com base no peso e na contagem de conexões atuais. Se os pesos forem iguais, o ALB seleciona o servidor com menos conexões. |
||
|
|
Roteia solicitações do mesmo IP de origem para o mesmo servidor de backend. |
||
|
|
Roteia solicitações com base em um hash de um parâmetro de URL especificado. Use a anotação
|
Configuração de CORS
Use as seguintes anotações para configurar o Cross-Origin Resource Sharing (CORS) para o ALB Ingress.
Anotações de exemplo:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: alb-ingress
namespace: default
annotations:
alb.ingress.kubernetes.io/cross-zone-enabled: "false"
spec:
ingressClassName: alb
rules:
- host: alb.ingress.alibaba.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: tea-svc
port:
number: 80
|
Parâmetro |
Descrição |
Padrão |
|
|
Ativa o Cross-Origin Resource Sharing (CORS). |
Valor padrão: |
|
|
Define quais origens podem acessar recursos no servidor. Use uma vírgula (,) para separar várias origens. Cada valor deve começar com |
|
|
|
Define os métodos HTTP permitidos para solicitações de origem cruzada. Os valores não diferenciam maiúsculas de minúsculas. Use uma vírgula (,) para separar vários métodos HTTP. |
|
|
|
Define os cabeçalhos de solicitação permitidos para solicitações de origem cruzada. Defina este parâmetro como
|
|
|
|
Define quais cabeçalhos de resposta expor ao cliente. Defina este parâmetro como
|
|
|
|
Define se as credenciais devem ser incluídas nas solicitações de origem cruzada. |
|
|
|
Duração do cache para respostas de preflight, em segundos. Valores válidos: 0 a 172.800. |
Valor padrão: |
Conexão persistente de backend
As conexões persistentes de backend permitem que o ALB reutilize conexões TCP para servidores de backend, reduzindo a sobrecarga de conexão em cenários de alto throughput.
|
Parâmetro |
Descrição |
Exemplo de YAML |
|
|
Ativa conexões persistentes de backend para reduzir a sobrecarga de conexão TCP. |
|
Associação de backend IPv6 para grupos de servidores
A associação de backend IPv6 permite Pods IPv4 e IPv6 em um grupo de servidores, mas requer um cluster dual-stack. Consulte Criar um cluster gerenciado ACK.
As seguintes limitações se aplicam quando a associação de backend IPv6 está ativada:
Para ativar a associação de backend IPv6 para um grupo de servidores, é necessário ativar o IPv6 para a VPC do grupo de servidores.
Não há suporte para a associação de backend IPv6 em grupos de servidores do tipo IP ou Function Compute quando a associação usa uma ação de encaminhamento personalizada.
Se um Ingress estiver associado a uma instância ALB apenas IPv4, não é possível ativar a associação de backend IPv6 para seus grupos de servidores.
Configure o Service e o ALB Ingress para dual-stack. Após criar uma instância ALB dual-stack, você pode associar servidores de backend IPv4 e IPv6 ao grupo de servidores.
|
Objeto de configuração |
Parâmetro |
Valor |
Descrição |
Exemplo de YAML |
|
Service |
|
|
Define os tipos de endereço IP disponíveis para o Service. |
|
|
|
|
Define a política de IP para o Service, ativando a rede dual-stack. |
||
|
ALB Ingress |
|
|
Ativa a associação de backend IPv6 para o grupo de servidores. |
|
Configure a limitação de QPS
Adicione a anotação a seguir e ative a limitação de QPS nas regras de encaminhamento.
|
Anotação |
Descrição |
Exemplo de YAML |
|
|
Especifica o limite de QPS para as regras de encaminhamento. Valores válidos: 1 a 1.000.000. |
|
Início lento
O início lento aumenta gradualmente o tráfego para os Pods recém-adicionados, o que evita sobrecargas causadas por picos repentinos de tráfego.
|
Parâmetro |
Descrição |
Exemplo de YAML |
|
|
Indica se o início lento está ativado. Desativado por padrão.
|
|
|
|
Determina a duração da aceleração do início lento em segundos. Valores válidos: 30 a 900. Padrão: 30. |
Drenagem de conexões
Quando um Pod entra no estado Terminating, o ALB Ingress o remove do grupo de servidores, mas não fecha as conexões existentes imediatamente, o que pode causar erros de requisição ou impedir o encerramento graceful. A drenagem de conexões mantém as conexões existentes abertas por um tempo limite configurável antes de fechá-las. Consulte Usar a drenagem de conexões com um ALB Ingress para encerrar um service de forma graceful.
O ALB Ingress não garante que os Pods continuem em execução até que a drenagem de conexões seja concluída. Para controlar a disponibilidade do Pod durante o encerramento, configure spec.terminationGracePeriodSeconds ou use um preStop Hook.
|
Parâmetro |
Descrição |
Exemplo de YAML |
|
|
Controla se a drenagem de conexões está ativada.
|
|
|
|
Estabelece o tempo limite da drenagem de conexões em segundos. Valores válidos: [0, 900]. Padrão: 300. |
Desative o balanceamento de carga entre zonas
Por padrão, o ALB distribui o tráfego entre as zonas de disponibilidade. Desativar o balanceamento de carga entre zonas restringe o tráfego aos services de backend na mesma zona.
Se você desativar o balanceamento de carga entre zonas, certifique-se de que cada zona de disponibilidade tenha recursos de backend suficientes.
Use o exemplo a seguir para desativar o balanceamento de carga entre zonas:
|
Parâmetro |
Descrição |
Exemplo de YAML |
|
|
Informa se o balanceamento de carga entre zonas está ativado. Ativado por padrão.
|
|