O AlbConfig é uma Custom Resource Definition (CRD) fornecida pelo ALB Ingress Controller. O ALB Ingress Controller utiliza o AlbConfig para configurar instâncias e listeners ALB. Este tópico descreve como criar, modificar e atualizar um AlbConfig, além de explicar como ativar o Log Service.
Pré-requisitos
Você possui {{XREF_0}}.
Você criou dois vSwitches em zonas de disponibilidade diferentes dentro da VPC do seu cluster. {{XREF_1}}.
Observações de uso
Recomendamos o uso do comando
kubectl editpara modificar ou atualizar diretamente as configurações de recursos. Caso seja necessário utilizar o comandokubectl apply, execute primeiro o comandokubectl diffpara visualizar as alterações antes de rodar okubectl apply. Confirme se as mudanças estão conforme o esperado e, em seguida, execute o comandokubectl applypara aplicá-las ao cluster Kubernetes.Versões anteriores do Nginx Ingress Controller não reconhecem o campo
spec.ingressClassNamenos recursos de Ingress. Se os controladores Nginx Ingress e ALB Ingress estiverem em execução no mesmo cluster, uma versão antiga do Nginx Ingress Controller pode interferir ou sobrescrever a configuração do ALB Ingress. Para evitar esse problema, atualize o Nginx Ingress Controller para a versão mais recente ou use uma annotation para especificar a ingressClass do ALB Ingress. Para mais informações, consulte {{XREF_2}}.
Criar um AlbConfig
Um AlbConfig corresponde a uma única instância ALB, mas pode ser associado a múltiplos Ingresses. Para utilizar várias instâncias ALB, crie múltiplos AlbConfigs. Os passos a seguir descrevem como criar um AlbConfig.
-
Crie um arquivo chamado alb-test.yaml e copie o conteúdo abaixo para ele.
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-demo spec: config: name: alb-test addressAllocatedMode: Dynamic # Dynamic or Fixed. Specifies the IP address mode for the ALB instance. addressType: Internet zoneMappings: # For high availability, select vSwitches in at least two different zones. - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # Replace with the actual vSwitch ID (Zone 1). - vSwitchId: vsw-uf6nun9tql5t8nh15**** # Replace with the actual vSwitch ID (Zone 2, must be different from Zone 1). listeners: - port: 80 protocol: HTTPParâmetro
Descrição
spec.config.name
(Opcional) O nome da instância ALB.
spec.config.addressType
(Obrigatório) O tipo de endereço do balanceador de carga. Valores válidos:
Internet (padrão): O balanceador de carga possui um endereço IP público. O registro DNS é resolvido para o endereço IP público, tornando o balanceador acessível pela internet.
Intranet: O balanceador de carga possui apenas um endereço IP privado. O registro DNS é resolvido para o endereço IP privado, tornando o balanceador acessível somente dentro da VPC onde está implantado.
spec.config.zoneMappings
(Obrigatório) Especifica os IDs dos vSwitches para o ALB Ingress. Em regiões com múltiplas zonas, você deve especificar os IDs de vSwitches em pelo menos duas zonas diferentes. Em regiões de zona única, um ID de vSwitch é suficiente. Os vSwitches devem estar na mesma VPC do cluster e em zonas que suportem ALB. Para mais informações sobre as regiões e zonas suportadas pelo ALB Ingress, consulte {{XREF_3}}.
ImportanteNão é possível atualizar o tipo de endereço ou as zonas de uma instância ALB. Os parâmetros
addressTypeezoneMappingstêm efeito apenas durante a criação do AlbConfig e não podem ser atualizados posteriormente.spec.config.addressAllocatedMode(Opcional) No AlbConfig, é possível especificar o modo de IP da instância ALB definindo o parâmetro addressAllocatedMode. Os valores válidos são:
Dynamic: modo de IP dinâmico.
Fixed: modo de IP fixo.
Ao instalar o add-on ALB Ingress Controller em um cluster, o sistema cria um AlbConfig por padrão. Todos os parâmetros de configuração, exceto
vSwitchId, serão criados com as configurações padrão. -
Execute o comando a seguir para criar o AlbConfig.
kubectl apply -f alb-test.yamlSaída esperada:
albconfig.alibabacloud.com/alb-demo created -
Execute o comando a seguir para visualizar o AlbConfig.
kubectl -n kube-system get AlbConfigSaída esperada:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb-demo alb-****** alb-******.<regionID>.alb.aliyuncs.com 443/HTTPS 11055487-cn-<regionID> 2d
Atualizar um AlbConfig
No Kubernetes, o comando kubectl apply realiza uma atualização por substituição, enquanto o comando kubectl edit executa uma atualização incremental baseada no objeto existente. Para uma instância ALB já criada via AlbConfig, utilize o comando kubectl edit para atualizar incrementalmente a configuração da instância. Os passos a seguir descrevem como atualizar um AlbConfig.
-
Execute o comando a seguir para visualizar o AlbConfig.
kubectl -n kube-system get AlbConfigSaída esperada:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb-demo alb-****** alb-******.<regionID>.alb.aliyuncs.com 443/HTTPS 11055487-cn-<regionID> 2d -
Execute o comando a seguir para atualizar o AlbConfig.
ImportanteRecomenda-se o uso do comando
kubectl editpara atualizar diretamente as configurações de recursos. Se for indispensável usar o comandokubectl apply, rode o comandokubectl diffpara pré-visualizar as alterações antes de executar okubectl apply. Certifique-se de que as mudanças estejam corretas e então use o comandokubectl applypara aplicá-las ao cluster Kubernetes.Ao usar o comando
kubectl applypara sobrescrever um AlbConfig, o comportamento depende da inclusão do campolistenersno arquivo YAML. Se o campo não estiver incluído, os listeners existentes não serão afetados. Caso esteja presente, os listeners serão reconciliados para corresponder à configuração atual. Portanto, é obrigatório especificar a lista completa de listeners necessários, como os listeners comuns para as portas 80 e 443.
kubectl -n kube-system edit AlbConfig alb-demoNo arquivo de configuração do AlbConfig, atualize o conteúdo desejado. Por exemplo, altere o nome do AlbConfig para
test.... spec: config: name: test # Enter the updated name. ...
Associar um AlbConfig a um Ingress
É possível associar um Ingress a um AlbConfig utilizando uma IngressClass padrão do Kubernetes. Primeiro, crie uma IngressClass que referencie o AlbConfig e, em seguida, especifique essa IngressClass no seu recurso de Ingress.
-
Crie um arquivo chamado alb.yaml e copie o conteúdo abaixo para criar uma IngressClass.
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-demo -
Execute o comando a seguir para criar a IngressClass.
kubectl apply -f alb.yamlSaída esperada:
ingressclass.networking.k8s.io/alb created -
Crie um arquivo chamado ingress.yaml e copie o conteúdo a seguir. O parâmetro
ingressClassNameespecifica a IngressClass chamadaalbpara associação com o AlbConfig.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cafe-ingress spec: ingressClassName: alb rules: - http: paths: # Configure the context path. - path: /tea pathType: ImplementationSpecific backend: service: name: tea-svc port: number: 80 # Configure the context path. - path: /coffee pathType: ImplementationSpecific backend: service: name: coffee-svc port: number: 80 -
Execute o comando a seguir para criar o Ingress.
kubectl apply -f ingress.yamlSaída esperada:
ingress.networking.k8s.io/cafe-ingress created
Após concluir estas etapas, o AlbConfig estará associado ao Ingress por meio da IngressClass.
Modificar o nome de uma instância ALB
Execute o comando a seguir para modificar o nome de uma instância ALB:
kubectl -n kube-system edit AlbConfig alb-demo
Modifique o valor de config.name no arquivo de configuração. O novo nome entra em vigor automaticamente após salvar o arquivo.
...
spec:
config:
name: test # Enter the updated name.
...
Usar um endereço IPv6
Para habilitar o suporte a IPv6 ao criar uma instância ALB, defina o campo addressIpVersion como DualStack no AlbConfig.
O campo addressIpVersion tem efeito apenas durante a criação da instância e não pode ser modificado posteriormente.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
addressIpVersion: DualStack
...
Especificar uma política de segurança TLS
É possível definir uma política de segurança TLS para um listener HTTPS em um AlbConfig. As políticas de segurança TLS incluem políticas personalizadas e políticas do sistema. Para mais informações, consulte {{XREF_4}}.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
#...
listeners:
- port: 443
protocol: HTTPS
securityPolicyId: tls_cipher_policy_1_1
#...
Ativar logs de acesso
Para ativar o registro de logs de acesso do ALB Ingress, especifique um logProject e um logStore no seu AlbConfig.
A criação do
logProjectdeve ser feita manualmente. Para mais detalhes sobre como criar umlogProject, consulte {{XREF_5}}.O nome do
logStoredeve começar comalb_. Se ologStoreespecificado não existir, ele será criado automaticamente.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
accessLogConfig:
logProject: "k8s-log-xz92lvykqj1siwvif****"
logStore: "alb_****"
#...
Após salvar a configuração, acesse o console do Log Service e selecione o LogStore de destino para visualizar os logs de acesso coletados.
Reutilizar uma instância ALB existente
Para reutilizar uma instância ALB existente, especifique o ID da instância ALB ao criar o AlbConfig. A instância ALB existente deve ser das edições Standard ou WAF-enabled, criada no console Application Load Balancer (ALB). Instâncias ALB da edição Basic não podem ser reutilizadas. Uma instância ALB só pode ser reutilizada por um único AlbConfig dentro do mesmo cluster. Não há suporte para reutilizar uma instância ALB em vários clusters, nem para reutilizar uma instância ALB por múltiplos AlbConfigs no mesmo cluster.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: reuse-alb
spec:
config:
id: **** # The ID of the Standard or WAF-enabled edition ALB instance created in the ALB console.
forceOverride: false
listenerForceOverride: false
A tabela a seguir descreve os parâmetros.
Parâmetro | Descrição |
id |
Importante Ao reutilizar uma instância, não modifique manualmente os nomes dos listeners. Isso pode causar gerenciamento incorreto dos listeners pelo ACS. Listeners criados ou atualizados por um AlbConfig são gerenciados pelo ACS, e seus nomes seguem o formato |
forceOverride | Define se os atributos da instância ALB devem ser sobrescritos forçosamente no modo de reutilização.
|
listenerForceOverride | Define se os atributos dos listeners devem ser sobrescritos forçosamente no modo de reutilização.
|
Criar um listener
Em um cenário de reutilização, adicione um novo listener ou edite as configurações de um listener existente modificando o AlbConfig. Execute o comando kubectl edit albconfig <Albconfig_Name>. Defina port e protocol no AlbConfig para criar o listener correspondente. A port e o protocol são propriedades únicas de um listener. Se você modificar a port, o protocol ou outras propriedades do listener, o sistema excluirá o listener original e criará um novo para substituí-lo.
O protocolo HTTP é automaticamente compatível com WebSocket e não requer configurações especiais.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
...
listeners:
- port: 80
protocol: HTTP # Valid values for protocol are HTTP, HTTPS, and QUIC.
...
Criar e usar múltiplas instâncias ALB
Para utilizar várias instâncias ALB, especifique uma IngressClass diferente para cada recurso de Ingress usando o parâmetro spec.ingressClassName.
-
Crie um arquivo chamado alb-demo2.yaml e copie o conteúdo abaixo para criar um AlbConfig.
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: demo spec: config: name: alb-demo2 # The name of the ALB instance. addressType: Internet # The load balancer has a public IP address. zoneMappings: # For high availability, select vSwitches in at least two different zones. - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # Replace with the actual vSwitch ID (Zone 1). - vSwitchId: vsw-uf6nun9tql5t8nh15**** # Replace with the actual vSwitch ID (Zone 2, must be different from Zone 1). -
Execute o comando a seguir para criar o AlbConfig.
kubectl apply -f alb-demo2.yamlSaída esperada:
AlbConfig.alibabacloud.com/demo created -
Crie um arquivo chamado alb.yaml e copie o conteúdo abaixo para criar uma IngressClass.
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb-demo2 spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: demo -
Execute o comando a seguir para criar a IngressClass.
kubectl apply -f alb.yamlSaída esperada:
ingressclass.networking.k8s.io/alb-demo2 created -
Crie um arquivo chamado
ingress.yamle copie o conteúdo a seguir. Utilize o parâmetroingressClassNamepara especificar diferentes instâncias ALB.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo namespace: default spec: ingressClassName: alb-demo2 rules: - host: "" http: paths: - backend: service: name: demo-service port: number: 80 path: /hello pathType: ImplementationSpecific
Definir o tempo limite de requisição do listener
Em um AlbConfig, especifique um listener e defina o tempo limite de conexão da requisição em segundos. O valor deve estar entre 1 e 180. Se um servidor backend não responder dentro do período de tempo limite, o balanceador de carga retornará um erro HTTP 504 ao cliente. O tempo limite padrão é de 60 segundos.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
requestTimeout: 60
...
Usar compressão de dados
Em um AlbConfig, especifique um listener e ative ou desative a compressão de dados. A lista a seguir descreve os valores válidos de gzipEnabled.
true: Comprime tipos específicos de arquivos.
false: Não comprime nenhum tipo de arquivo.
O Brotli suporta a compressão de todos os tipos de arquivos. O Gzip suporta a compressão dos seguintes tipos de arquivos: text/xml, text/plain, text/css, application/javascript, application/x-javascript, application/rss+xml, application/atom+xml, application/xml e application/json.
O código a seguir fornece um exemplo YAML para desativar a compressão de dados:
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
gzipEnabled: false
...
Recuperar endereços IP do cliente
Configure o listener para incluir o campo de cabeçalho X-Forwarded-For, permitindo que os servidores backend recuperem o endereço IP real do cliente. A lista a seguir descreve os valores válidos de XForwardedForEnabled.
true: Recupera os endereços IP reais dos clientes.
false: Não recupera os endereços IP reais dos clientes.
Este parâmetro pode ser configurado apenas para listeners HTTP e HTTPS.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
#...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForEnabled: true
#...
Recuperar o protocolo do listener
No AlbConfig, utilize o campo XForwardedForProtoEnabled para recuperar o protocolo do listener da instância. Os valores são os seguintes:
true: Recupera o protocolo do listener da instância.
false: Não recupera o protocolo do listener da instância.
Este parâmetro pode ser configurado apenas para listeners HTTP e HTTPS.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForProtoEnabled: true
...
Recuperar o ID do balanceador de carga
Configure o listener para incluir o cabeçalho SLB-ID, permitindo que os servidores backend recuperem o ID da instância do balanceador de carga. A lista a seguir descreve os valores válidos de XForwardedForSLBIdEnabled.
true: Recupera o ID da instância do balanceador de carga.
false: Não recupera o ID da instância do balanceador de carga.
Este parâmetro pode ser configurado apenas para listeners HTTP e HTTPS.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBIdEnabled: true
...
Recuperar a porta do listener
Configure o listener para incluir o cabeçalho X-Forwarded-Port, permitindo que os servidores backend recuperem a porta do listener da instância. A lista a seguir descreve os valores válidos de XForwardedForSLBPortEnabled.
true: Recupera a porta do listener da instância.
false: Não recupera a porta do listener da instância.
Este parâmetro pode ser configurado apenas para listeners HTTP e HTTPS.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBPortEnabled: true
...
Recuperar a porta do cliente
Configure o listener para incluir o cabeçalho X-Forwarded-Client-srcport, permitindo que os servidores backend recuperem a porta de origem do cliente. A lista a seguir descreve os valores válidos de XForwardedForClientSrcPortEnabled.
true: Recupera a porta do cliente da instância do balanceador de carga.
false: Não recupera a porta do cliente da instância do balanceador de carga.
Este parâmetro pode ser configurado apenas para listeners HTTP e HTTPS.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSrcPortEnabled: true
...
Configurar controle de acesso ACL
Utilize um AlbConfig para ativar o controle de acesso em um listener ALB. Ao definir regras de permissão ou negação para o tráfego de entrada, é possível controlar com precisão as requisições dos clientes e gerenciar o encaminhamento dessas requisições. Para mais informações sobre listas de controle de acesso (ACLs), consulte {{XREF_6}}.
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
#...
listeners:
- port: 80
protocol: HTTPS
aclConfig:
aclEntries:
- 127.0.0.1/32
aclType: White
#...
A lista a seguir descreve alguns dos parâmetros:
aclType: Define se a ACL do listener é uma lista de bloqueios ou uma lista de permissões. Valores válidos: Black (lista de bloqueios) e White (lista de permissões).
aclEntries: Especifica os intervalos de endereços IP para as entradas de controle de acesso, como 127.0.0.1/32.
Excluir uma instância ALB
Uma instância ALB corresponde a um AlbConfig. Portanto, exclua um AlbConfig para remover a instância ALB correspondente. Antes de excluir o AlbConfig, remova todos os Ingresses associados a ele.
kubectl delete -n kube-system AlbConfig alb-demo
Substitua alb-demo pelo nome do AlbConfig que deseja excluir.
Excluir o AlbConfig de uma instância reutilizada
Caso deseje excluir o AlbConfig de uma instância ALB reutilizada, siga os passos abaixo.
-
Exclua todos os Ingresses associados ao AlbConfig.
kubectl delete -n <NAMESPACE> ingress <INGRESS_NAME> # Replace <INGRESS_NAME> and <NAMESPACE> with the name and namespace of the Ingress that you want to delete. -
Use o comando
kubectl editpara modificar o AlbConfig e excluir todos os seus listeners. Para isso, remova todas as entradas sob o campospec.listeners.ImportanteExecute esta etapa apenas se a versão do seu ALB Ingress Controller for v2.10.0-aliyun.1 ou anterior.
-
Exclua o AlbConfig.
kubectl -n kube-system delete AlbConfig alb-demo # Replace alb-demo with the name of the AlbConfig that you want to delete.