Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Advanced ALB Ingress usage

Última atualização: Oct 15, 2026

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.

  1. 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.

    Exemplo de YAML

    Kubernetes 1.19 ou posterior

    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

    Kubernetes anterior à 1.19

    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
  2. Execute kubectl get ing para obter o endereço da instância do ALB. Em seguida, execute o comando a seguir, substituindo ADDRESS pelo 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: 80

    Saí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.

  1. Implante o manifesto a seguir para criar um Service, um Deployment e um Ingress.

    Exemplo de YAML

    Kubernetes 1.19 ou posterior

    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

    Kubernetes anterior à 1.19

    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
  2. Execute kubectl get ing para obter o endereço da instância do ALB. Em seguida, execute o comando a seguir, substituindo ADDRESS pelo 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: 80

    Saí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.

Importante
  • Quando o pathType é Exact ou Prefix, 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.

  1. Implante o manifesto a seguir para criar o recurso de ingress.

    Exemplo de YAML

    Kubernetes 1.19 ou posterior

    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

    Kubernetes anterior à 1.19

    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
  2. Execute kubectl get ing para obter o endereço da instância do ALB. Em seguida, execute o comando a seguir, substituindo ADDRESS pelo 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: 80

    Saí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.

  1. Implante o manifesto a seguir para criar o recurso de ingress.

    Exemplo de YAML

    Kubernetes 1.19 ou posterior

    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

    Kubernetes anterior à 1.19

    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
  2. Execute kubectl get ing para obter o endereço da instância do ALB. Em seguida, execute o comando a seguir, substituindo ADDRESS pelo 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: 80

    Saí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.

Clique para ver o exemplo completo de YAML

Kubernetes 1.19 e posterior

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

Kubernetes anterior à 1.19

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

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

alb.ingress.kubernetes.io/healthcheck-enabled

Especifica se as verificações de integridade devem ser ativadas para o grupo de servidores de backend.

  • true: ativa as verificações de integridade.

  • false: desativa as verificações de integridade.

false

alb.ingress.kubernetes.io/healthcheck-path

O caminho usado para as verificações de integridade.

/

alb.ingress.kubernetes.io/healthcheck-protocol

O protocolo usado para as verificações de integridade.

  • HTTP: Envia uma solicitação HEAD ou GET para verificar a integridade do servidor.

  • HTTPS: Envia uma solicitação HEAD ou GET para verificar a integridade do servidor.

  • TCP: Envia um pacote de handshake SYN para verificar a disponibilidade da porta.

  • GRPC: Envia uma solicitação POST ou GET para verificar a integridade do servidor.

HTTP

alb.ingress.kubernetes.io/healthcheck-httpversion

Versão do protocolo HTTP. Só entra em vigor quando o healthcheck-protocol é definido como HTTP ou HTTPS.

  • HTTP1.0

  • HTTP1.1

HTTP1.1

alb.ingress.kubernetes.io/healthcheck-method

O método usado para as verificações de integridade.

  • HEAD

  • POST

  • GET

Importante

Se o healthcheck-protocol for definido como GRPC, você deve definir este parâmetro como POST ou GET.

HEAD

alb.ingress.kubernetes.io/healthcheck-httpcode

Código(s) de status que indicam um servidor de backend íntegro.

Especifique uma ou mais opções, separadas por vírgulas.

  • http_2xx

  • http_3xx

  • http_4xx

  • http_5xx

http_2xx

alb.ingress.kubernetes.io/healthcheck-code

Código(s) de status que indicam um servidor de backend íntegro. Tem precedência sobre o healthcheck-httpcode se ambos forem especificados.

Os valores válidos dependem do healthcheck-protocol:

  • HTTP ou HTTPS:

    Especifique uma ou mais opções, separadas por vírgulas.

    • http_2xx

    • http_3xx

    • http_4xx

    • http_5xx

  • GRPC: O valor deve ser um número inteiro de 0 a 99.

    Especifique até 20 intervalos de valores, separados por vírgulas.

  • HTTP ou HTTPS

    http_2xx

  • GRPC

    0

alb.ingress.kubernetes.io/healthcheck-timeout-seconds

O tempo limite da verificação de integridade em segundos. Valores válidos: 1 a 300.

5

alb.ingress.kubernetes.io/healthcheck-interval-seconds

O intervalo da verificação de integridade em segundos. Valores válidos: 1 a 50.

2

alb.ingress.kubernetes.io/healthy-threshold-count

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.

3

alb.ingress.kubernetes.io/unhealthy-threshold-count

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.

3

alb.ingress.kubernetes.io/healthcheck-connect-port

A porta usada para as verificações de integridade.

0

Nota

Um valor de 0 indica que a porta do servidor de backend é usada para a verificação de integridade.

Redirecionar solicitações HTTP para HTTPS

Adicione a seguinte anotação para redirecionar solicitações HTTP para a porta HTTPS 443.

Importante
  • 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, InsertHeader e Cors.

  • 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.

Exemplo de YAML

Kubernetes 1.19 ou posterior

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

Kubernetes anterior à 1.19

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

Exemplo de anotação

alb.ingress.kubernetes.io/ssl-redirect: "true"

Redireciona solicitações HTTP para a porta HTTPS 443.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/ssl-redirect: "true"
  name: demo-ssl
 ... ...

Configure HTTPS ou gRPC no backend

Adicione a seguinte anotação para usar HTTPS ou gRPC como protocolo de backend.

Exemplos de YAML

Kubernetes 1.19 and later

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

Kubernetes earlier than 1.19

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
Nota

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

alb.ingress.kubernetes.io/backend-protocol

  • https: Define HTTPS como o protocolo de backend.

  • grpc: Define gRPC como o protocolo de backend.

    Ao encaminhar requisições para um service gRPC por meio de um ingress, é necessário configurar um certificado SSL para o nome de domínio e usar o protocolo TLS.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/backend-protocol: "grpc"
  name: demo-alb-ingress
... ...

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.

Importante
  • Aplica-se apenas a regras de caminho com pathType: Prefix. Ativa a sintaxe de regex no campo path de spec.rules, independentemente das condições de encaminhamento personalizadas.

  • Esta anotação ativa a correspondência de regex independentemente do seu valor (true ou false). 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ção use-regex. Para ativar a correspondência de regex, adicione o prefixo ~* ou ~ ao valor do caminho. A anotação use-regex afeta apenas o campo path em spec.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

alb.ingress.kubernetes.io/use-regex: "true"

Ativa expressões regulares para regras de caminho em spec.rules com pathType: Prefix.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/use-regex: "true"
  name: demo-alb-ingress
... ...

alb.ingress.kubernetes.io/conditions.YOUR-SVC-NAME

Configura uma condição de encaminhamento personalizada. Consulte Personalizar regras de encaminhamento para um ALB Ingress.

Substitua YOUR-SVC-NAME pelo nome real do Service. Este nome deve corresponder a backend.service.name abaixo.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/conditions.YOUR-SVC-NAME: | ## Replace YOUR-SVC-NAME with the actual Service name. It must match backend.service.name below.
     [{
       "type": "Path",
       "pathConfig": {
           "values": [
              "~*/pathvalue1", ## Add the ~* or ~ prefix to a regular expression. The text after the prefix is the regular expression itself. ~* indicates a case-sensitive match, and ~ indicates a case-insensitive match.
              "/pathvalue2"    ## An exact match does not require a prefix.
           ]
       }
      }]
  name: ingress-example
... ...

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

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

/API

Sim

Caminhos aceitam correspondência de expressões regulares sem diferenciar maiúsculas de minúsculas.

Começa com ~*

~*/api

/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.

    Importante
    • Use 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 pathType do Ingress deve ser definido como Prefix.

  • alb.ingress.kubernetes.io/use-regex: true: Ativa o uso de uma expressão regular no caminho. Isso é ativado por padrão ao configurar o rewrite-target.

    Importante
    • Esta anotação ativa a correspondência de regex independentemente do seu valor (true ou false). 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 /something ou 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

/something

Correspondência. O segundo grupo de captura está vazio.

/

/something/

Correspondência. O segundo grupo de captura está vazio.

/

/something/new

Correspondência. O segundo grupo de captura é new.

/new

/something-new/item

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

/items/electronics/computers/554

Correspondência. O segundo grupo de captura é computers, e o terceiro é 554.

/computers?code=554

/items/produce/fruits/12

Correspondência. O segundo grupo de captura é fruits, e o terceiro é 12.

/fruits?code=12

/items/headphones/5

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.

/drinks/41

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

/app-a/item1

Correspondência. O segundo grupo de captura é item1.

/app-c/item1

/app-a/item2

Correspondência. O segundo grupo de captura é item2.

/app-c/item2

/app-a ou /app-a/

Correspondência. O segundo grupo de captura está vazio.

/app-c/

/drinks/41

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.

  1. 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
  2. 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 \2 em 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: 80

    A 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).

Exemplo completo de YAML

Kubernetes 1.19 or later

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

Kubernetes earlier than 1.19

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
Importante

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

alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'

Expõe o service nas portas 80 e 443.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 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:

Clique para visualizar o exemplo completo de YAML

Kubernetes 1.19 or later

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

Kubernetes earlier than 1.19

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

Valor

Exemplo de YAML

alb.ingress.kubernetes.io/order

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

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/order: "2"
spec:
... ...

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

alb.ingress.kubernetes.io/canary: "true"

Ativa o recurso de liberação canário.

  • É possível distribuir o tráfego canário com base em cabeçalhos, cookies ou pesos.

    O ALB aplica essas regras na seguinte ordem de prioridade (da maior para a menor): cabeçalho > cookie > peso.
  • Não exclua o Ingress original durante uma liberação canário. Após verificar que a versão canário está estável, atualize o Ingress original para usar o novo Service e, em seguida, exclua o Ingress 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-header

    Essas 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 header e o header-value em 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-value

    Se 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.

    Exemplo completo de YAML

    Kubernetes 1.19 ou posterior

    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

    Kubernetes anterior ao 1.19

    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
  • 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 always e never.

    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 contiver Cookie: demo=never, o ALB não roteará o tráfego para o Service canário.

    Exemplo completo de YAML

    Kubernetes 1.19 ou posterior

    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

    Kubernetes anterior ao 1.19

    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
  • Distribua o tráfego por peso

    Parâmetro

    Descrição

    Exemplo de YAML

    alb.ingress.kubernetes.io/canary-weight

    Porcentagem 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

    Exemplo completo de YAML

    Kubernetes 1.19 ou posterior

    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

    Kubernetes anterior ao 1.19

    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 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.

Exemplo de YAML

Kubernetes 1.19 ou posterior

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

Kubernetes anterior ao 1.19

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

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

alb.ingress.kubernetes.io/sticky-session

Define se a persistência de sessão será ativada.

  • true: Ativa a persistência de sessão.

  • false: Desativa a persistência de sessão.

false

alb.ingress.kubernetes.io/sticky-session-type

Define como o balanceador de carga lida com o cookie.

  • Insert: O balanceador de carga insere um cookie SERVERID na primeira resposta. As solicitações subsequentes com esse cookie são roteadas para o mesmo servidor de backend.

  • Server: O balanceador de carga reescreve o cookie original com um cookie personalizado. As solicitações subsequentes com o novo cookie são roteadas para o mesmo servidor de backend.

Nota

Aplica-se apenas quando alb.ingress.kubernetes.io/sticky-session é definido como "true". Consulte Criar um grupo de servidores para ver os parâmetros do grupo de servidores.

Insert

alb.ingress.kubernetes.io/cookie-timeout

O tempo limite do cookie em segundos. Valores válidos: 1 a 86400.

Aplica-se apenas quando alb.ingress.kubernetes.io/sticky-session-type é definido como Insert.

1000

alb.ingress.kubernetes.io/cookie

O valor do cookie personalizado.

Obrigatório (não vazio) quando alb.ingress.kubernetes.io/sticky-session-type é definido como Server.

""

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.

Exemplo de YAML

Kubernetes 1.19 e posterior

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

Kubernetes anterior ao 1.19

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

Valor

Descrição

alb.ingress.kubernetes.io/backend-scheduler

wrr

Round robin ponderado. Servidores com pesos maiores recebem mais solicitações. (Padrão)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/backend-scheduler: "uch" # Set this to wrr, sch, or wlc as needed.
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # This parameter is required only when the load balancing algorithm is uch. It is not needed for wrr, sch, or wlc.
spec:
... ... 

wlc

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.

sch

Roteia solicitações do mesmo IP de origem para o mesmo servidor de backend.

uch

Roteia solicitações com base em um hash de um parâmetro de URL especificado.

Use a anotação alb.ingress.kubernetes.io/backend-scheduler-uch-value para especificar qual parâmetro de URL usar para o hash.

Configuração de CORS

Use as seguintes anotações para configurar o Cross-Origin Resource Sharing (CORS) para o ALB Ingress.

Clique para visualizar o exemplo completo de YAML

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

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

alb.ingress.kubernetes.io/enable-cors

Ativa o Cross-Origin Resource Sharing (CORS).

Valor padrão: "false"

alb.ingress.kubernetes.io/cors-allow-origin

Define quais origens podem acessar recursos no servidor.

Use uma vírgula (,) para separar várias origens. Cada valor deve começar com http:// ou https:// seguido por um nome de domínio válido ou um nome de domínio curinga. Endereços IP não são aceitos.
  • Valor padrão: *

  • Exemplo: alb.ingress.kubernetes.io/cors-allow-origin: "https://example.com:4443, http://aliyundoc.com, https://example.org:1199"

alb.ingress.kubernetes.io/cors-allow-methods

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.
  • Valor padrão: GET, PUT, POST, DELETE, PATCH, OPTIONS

  • Exemplo: alb.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS"

alb.ingress.kubernetes.io/cors-allow-headers

Define os cabeçalhos de solicitação permitidos para solicitações de origem cruzada.

Defina este parâmetro como * ou uma lista de valores de cabeçalho separados por vírgulas. Cada valor pode conter apenas letras maiúsculas, letras minúsculas e dígitos. Um valor não pode começar ou terminar com um sublinhado (_) ou um hífen (-). O comprimento máximo de um único valor é de 32 caracteres.
  • Valor padrão: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization

  • Exemplo: alb.ingress.kubernetes.io/cors-allow-headers: "X-Forwarded-For, X-app123-XPTO"

alb.ingress.kubernetes.io/cors-expose-headers

Define quais cabeçalhos de resposta expor ao cliente.

Defina este parâmetro como * ou uma lista de valores de cabeçalho separados por vírgulas. Cada valor pode conter apenas letras maiúsculas, letras minúsculas e dígitos. Um valor não pode começar ou terminar com um sublinhado (_) ou um hífen (-). O comprimento máximo de um único valor é de 32 caracteres.
  • Valor padrão: ""

  • Exemplo: alb.ingress.kubernetes.io/cors-expose-headers: "*,X-CustomResponseHeader"

alb.ingress.kubernetes.io/cors-allow-credentials

Define se as credenciais devem ser incluídas nas solicitações de origem cruzada.

  • Valor padrão: true

  • Exemplo: alb.ingress.kubernetes.io/cors-allow-credentials: "false"

alb.ingress.kubernetes.io/cors-max-age

Duração do cache para respostas de preflight, em segundos. Valores válidos: 0 a 172.800.

Valor padrão: 172800

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.

Exemplo de YAML

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

Exemplo de YAML

alb.ingress.kubernetes.io/backend-keepalive: "true"

Ativa conexões persistentes de backend para reduzir a sobrecarga de conexão TCP.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: alb-ingress
  annotations:
    alb.ingress.kubernetes.io/backend-keepalive: "true"
spec:

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.

Nota

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.

Exemplo de YAML

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 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

ipFamilies

  • IPv4

  • IPv6

Define os tipos de endereço IP disponíveis para o Service.

apiVersion: v1
kind: Service
metadata:
  name: tea-svc
spec:
  # To configure dual-stack, set ipFamilyPolicy to RequireDualStack or PreferDualStack and specify both IPv4 and IPv6 in ipFamilies.
  ipFamilyPolicy: RequireDualStack
  ipFamilies:
  - IPv4
  - IPv6
... ...

ipFamilyPolicy

  • RequireDualStack

  • PreferDualStack

Define a política de IP para o Service, ativando a rede dual-stack.

ALB Ingress

alb.ingress.kubernetes.io/enable-ipv6

"true"

Ativa a associação de backend IPv6 para o grupo de servidores.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/enable-ipv6: "true"
spec:
... ...

Configure a limitação de QPS

Adicione a anotação a seguir e ative a limitação de QPS nas regras de encaminhamento.

Visualize o exemplo completo de YAML

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

Anotação

Descrição

Exemplo de YAML

alb.ingress.kubernetes.io/traffic-limit-qps

Especifica o limite de QPS para as regras de encaminhamento. Valores válidos: 1 a 1.000.000.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/traffic-limit-qps: "50"
spec:
... ...

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.

Exemplo de YAML

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

Exemplo de YAML

alb.ingress.kubernetes.io/slow-start-enabled

Indica se o início lento está ativado. Desativado por padrão.

  • true: Ativa o recurso de início lento.

  • false: Desativa o recurso de início lento.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/slow-start-enabled: "true"
    alb.ingress.kubernetes.io/slow-start-duration: "100"
  name: alb-ingress
... ...

alb.ingress.kubernetes.io/slow-start-duration

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.

Importante

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.

Exemplo de YAML

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

Exemplo de YAML

alb.ingress.kubernetes.io/connection-drain-enabled

Controla se a drenagem de conexões está ativada.

  • true: Ativa a drenagem de conexões.

  • false: Desativa a drenagem de conexões. (Padrão)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/connection-drain-enabled: "true"
    alb.ingress.kubernetes.io/connection-drain-timeout: "199"
  name: alb-ingress
... ...

alb.ingress.kubernetes.io/connection-drain-timeout

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.

Importante

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:

Exemplo completo de YAML

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

Exemplo de YAML

alb.ingress.kubernetes.io/cross-zone-enabled

Informa se o balanceamento de carga entre zonas está ativado. Ativado por padrão.

  • true: Ativa o balanceamento de carga entre zonas.

  • false: Desativa o balanceamento de carga entre zonas.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: alb-ingress
  namespace: default
  annotations:
    alb.ingress.kubernetes.io/cross-zone-enabled: "false"
... ...