O campo listeners em um AlbConfig configura os listeners de um Application Load Balancer (ALB). Este tópico aborda o comportamento de atualização do campo listeners e demonstra como criar, configurar e excluir listeners.
Pré-requisitos
Antes de começar, verifique se você tem:
Dois vSwitches em zonas diferentes, na mesma VPC do cluster e em zonas compatíveis com ALB. Para mais informações, consulte Criar e gerenciar vSwitches.
-
O controlador de Ingress do ALB instalado no cluster. Para mais informações, consulte Gerenciar o controlador de Ingress do ALB.
Para usar um Ingress do ALB e acessar serviços implantados em um cluster ACK dedicado, conceda primeiro ao cluster as permissões necessárias para o controlador de Ingress do ALB. Para mais informações, consulte Conceder acesso de um cluster ACK dedicado ao controlador de Ingress do ALB .
Um recurso AlbConfig. Para mais informações, consulte Criar AlbConfig.
Parâmetros do listener
A tabela a seguir lista todos os parâmetros disponíveis em spec.listeners de um AlbConfig.
|
Parâmetro |
Tipo |
Padrão |
Protocolos |
Descrição |
|
|
integer |
— |
HTTP, HTTPS, QUIC |
Porta do listener. Obrigatório. Alterar este valor exclui o listener original e cria um novo. |
|
|
string |
— |
HTTP, HTTPS, QUIC |
Protocolo do listener. Obrigatório. Alterar este valor exclui o listener original e cria um novo. |
|
|
string |
— |
HTTPS |
ID do certificado a atribuir ao listener. |
|
|
boolean |
— |
HTTPS |
Indica se este é o certificado padrão. |
|
|
boolean |
|
HTTPS |
Define se a verificação de certificado CA deve ser ativada. |
|
|
string |
— |
HTTPS |
ID da política de segurança TLS. Por exemplo, |
|
|
integer |
|
HTTP, HTTPS |
Tempo máximo (em segundos) de espera por uma resposta do backend antes de retornar HTTP 504. Valores válidos: 1–600. |
|
|
string |
— |
— |
Chave da tag. |
|
|
string |
— |
— |
Valor da tag. |
|
|
boolean |
— |
HTTP, HTTPS |
Controla a ativação da compactação de dados. |
|
|
boolean |
|
HTTP, HTTPS |
Define se o IP do cliente deve ser incluído no cabeçalho |
|
|
boolean |
— |
HTTP, HTTPS |
Inclui o protocolo do listener nos cabeçalhos de solicitação encaminhados aos servidores backend. |
|
|
boolean |
— |
HTTP, HTTPS |
Adiciona o ID da instância SLB aos cabeçalhos de solicitação encaminhados aos servidores backend. |
|
|
boolean |
— |
HTTP, HTTPS |
Insere a porta de escuta nos cabeçalhos de solicitação encaminhados aos servidores backend. |
|
|
boolean |
— |
HTTP, HTTPS |
Recupera o IP real do cliente a partir do cabeçalho |
|
|
string |
— |
HTTP, HTTPS |
Lista separada por ponto e vírgula de endereços IP ou blocos CIDR de proxy confiáveis. Entra em vigor apenas quando |
|
|
string |
— |
HTTP, HTTPS |
Tipo de ACL: |
|
|
string |
— |
HTTP, HTTPS |
Blocos CIDR para controle de acesso. Cada entrada deve ser um bloco CIDR completo. |
Comportamento de atualização do campo listeners
Como o campo listeners é um array, sua atualização ocorre por substituição completa: a nova configuração substitui integralmente a existente. Compreender esse comportamento ajuda a prever o resultado ao aplicar um AlbConfig atualizado.
Termos principais
Arquivo de configuração do objeto: O arquivo YAML aplicado, contendo o estado desejado do AlbConfig.
Arquivo de configuração existente: A configuração já em execução no cluster.
last-applied-configuration: Uma anotação do Kubernetes que registra a configuração anterior. Não é atualizada em tempo real.
Regras de atualização
|
Cenário |
Na nova config |
Na config existente |
**Em |
Resultado |
|
① |
Sim |
Sim |
— |
Mesclagem: aplica valores da nova configuração para atualizar o objeto existente. |
|
② |
Sim |
Não |
— |
Criação: adiciona o novo listener. |
|
③ |
Não |
— |
Sim |
Exclusão: remove o listener. Pode redefinir para o valor padrão. |
|
④ |
Não |
Sim |
Não |
Remoção: exclui o listener da configuração existente. |
Exemplo
O exemplo a seguir ilustra a aplicação das regras durante a atualização do campo listeners.
Nova configuração (arquivo de configuração do objeto):
listeners:
- port: 8001
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8005 # New — will be added
protocol: HTTP
Configuração existente:
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # Missing from new config and in last-applied-configuration — will be deleted
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8004 # Missing from new config but not in last-applied-configuration — will be deleted
protocol: HTTP
last-applied-configuration:
listeners:
- port: 8001
protocol: HTTP
- port: 8002
protocol: HTTP
- port: 8003
protocol: HTTP
Resultado após aplicar a nova configuração:
listeners:
- port: 8001 # Meets condition ① — retained
protocol: HTTP
- port: 8003 # Meets condition ① — retained
protocol: HTTP
- port: 8005 # Meets condition ② — added
protocol: HTTP
# port 8002 meets condition ③ — deleted
# port 8004 meets condition ④ — deleted
Criar um listener
Um listener atua como ponto de entrada pelo qual uma instância ALB recebe e distribui tráfego com base em informações da camada de aplicação. Os campos port e protocol identificam exclusivamente um listener.
Modificar port, protocol ou qualquer outra propriedade do listener exclui o listener original e cria um novo.
Listeners HTTP suportam WebSocket automaticamente. Nenhuma configuração adicional é necessária.
Opções de protocolo para protocol: HTTP, HTTPS, QUIC.
Console
Faça login no console do Container Service e clique em Clusters no painel de navegação à esquerda.
Clique no nome do cluster. No painel de navegação à esquerda, escolha Workloads > Custom Resources.
Na aba Resource Object Browser, insira
AlbConfigna caixa de pesquisa e clique no resultado AlbConfig.No painel AlbConfig, localize o recurso AlbConfig (nomeado
albpor padrão) e clique em Edit YAML na coluna Actions.-
No painel View YAML, adicione os campos
spec.listeners.portespec.listeners.protocole clique em OK.
kubectl
Execute o comando a seguir para editar o AlbConfig:
kubectl edit albconfig <AlbConfig_Name>
Adicione o campo listeners em spec:
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
# ... other config fields
listeners:
- port: 80
protocol: HTTP # Options: HTTP, HTTPS, QUIC
Configurar certificados HTTPS
Defina o campo certificates para atribuir um ou mais certificados a um listener HTTPS. O ALB define o primeiro certificado como padrão. Outros certificados são usados para criptografia de solicitações apenas se o certificado padrão expirar ou deixar de ser aplicável.
Se você não especificar um certificado, o listener não será criado imediatamente. Em vez disso, ele será criado após a associação de um Ingress e a descoberta automática de um certificado com base no nome de domínio. Para detalhes, consulte Configurar certificados HTTPS para comunicação criptografada .
listeners:
- caEnabled: false
certificates:
- CertificateId: 756****-cn-hangzhou # Certificate ID
IsDefault: true
port: 443
protocol: HTTPS
Configurar uma política de segurança TLS
Defina securityPolicyId para aplicar uma política de segurança TLS a um listener HTTPS. As políticas podem ser personalizadas ou predefinidas. Para mais informações, consulte Política de segurança TLS.
listeners:
- port: 443
protocol: HTTPS
securityPolicyId: tls_cipher_policy_1_1 # Security policy ID
Definir o tempo limite da solicitação
Configure requestTimeout para controlar por quanto tempo o Server Load Balancer (SLB) aguarda uma resposta de um servidor backend após receber uma solicitação do cliente. Caso nenhuma resposta seja retornada dentro do tempo limite, a instância SLB interrompe a espera e devolve um erro HTTP 504 ao cliente.
Padrão:
60segundosValores válidos: 1–600 (inteiro, em segundos)
Para utilizar um valor acima de 600, solicite um aumento de cota no Quota Center.
listeners:
- port: 80
protocol: HTTP
requestTimeout: 60 # Seconds. Default: 60. Valid values: 1–600.
Adicionar tags ao listener
Use o campo tags para adicionar tags de chave-valor a um listener.
listeners:
- port: 80
protocol: HTTP
tags:
- key: "key"
value: "value1"
Ativar compactação de dados
Defina gzipEnabled para controlar se o ALB compacta os dados de resposta antes de encaminhá-los aos clientes.
true: Compacta respostas usando Brotli ou Gzip, dependendo do tipo de conteúdo.false: Desativa a compactação para todos os tipos de conteúdo.
A compactação ocorre apenas quando Content-Length no cabeçalho de resposta excede 1.024 bytes. Os dois algoritmos funcionam da seguinte forma:
Brotli: Compacta todos os tipos de conteúdo.
Gzip: Compacta
text/plain,text/css,application/javascript,application/x-javascript,application/rss+xml,application/atom+xml,application/xmleapplication/json.
O exemplo abaixo desativa a compactação:
listeners:
- port: 80
protocol: HTTP
gzipEnabled: false # true: compress specific content types. false: disable all compression.
Configurar cabeçalhos X-Forwarded-For
Use o campo xForwardedForConfig para controlar quais informações o ALB inclui nos cabeçalhos de solicitação ao encaminhar tráfego para servidores backend.
Todos os parâmetros de xForwardedForConfig aplicam-se apenas a listeners HTTP e HTTPS.
Recuperar o endereço IP do cliente
XForwardedForEnabled permanece sempre ativo e não pode ser desativado. Quando habilitado, o ALB adiciona o IP de origem do cliente ao cabeçalho X-Forwarded-For.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForEnabled: true
Recuperar o protocolo do listener
Defina XForwardedForProtoEnabled como true para incluir o protocolo do listener nos cabeçalhos encaminhados aos servidores backend.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForProtoEnabled: true
Recuperar o ID da instância SLB
Configure XForwardedForSLBIdEnabled como true para inserir o ID da instância SLB nos cabeçalhos encaminhados aos servidores backend.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBIdEnabled: true # true: include SLB instance ID. false: omit it.
Recuperar a porta de escuta
Defina XForwardedForSLBPortEnabled como true para incluir a porta de escuta nos cabeçalhos encaminhados aos servidores backend.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBPortEnabled: true # true: include listening port. false: omit it.
Recuperar o IP real do cliente atrás de proxies
Quando as solicitações passam por proxies, o cabeçalho X-Forwarded-For pode conter uma cadeia de endereços IP. Defina XForwardedForClientSourceIpsEnabled como true para permitir que o ALB identifique o IP real do cliente percorrendo a lista da direita para a esquerda e selecionando o primeiro IP que não esteja na lista de confiáveis.
Use XForwardedForClientSourceIpsTrusted para especificar quais IPs de proxy são confiáveis. Isso viabiliza cenários como limitação de taxa por IP de origem.
Formato: endereços IP ou blocos CIDR separados por ponto e vírgula, sem espaços.
XForwardedForClientSourceIpsTrustedentra em vigor somente quandoXForwardedForClientSourceIpsEnabledétrue.
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSourceIpsEnabled: true
XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16 # Semicolon-separated, no spaces
Definir controle de acesso
Use o campo aclConfig para ativar o controle de acesso em um listener do ALB. Esse mecanismo permite autorizar ou bloquear endereços IP específicos mediante a configuração de uma lista de permissões ou de bloqueios. Para mais informações, consulte Configurar ACLs para controle de acesso.
aclType: Defina comoWhitepara lista de permissões ouBlackpara lista de bloqueios.aclEntries: Lista de blocos CIDR. Cada entrada deve ser um bloco CIDR completo.
listeners:
- port: 80
protocol: HTTP
aclConfig:
aclEntries:
- 127.0.0.1/32 # CIDR block must be complete
aclType: White # White: allowlist. Black: blocklist.
Excluir um listener
Para excluir um listener, remova-o do campo albconfig.spec.listeners.
Remova todos os Ingresses associados ao listener antes de excluí-lo. Se algum Ingress ainda estiver associado, a exclusão falhará.
Antes:
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # Listener to delete
protocol: HTTP
Depois:
listeners:
- port: 8001
protocol: HTTP