O ALB Ingress oferece gerenciamento de tráfego na camada 7 baseado no Application Load Balancer (ALB) do Alibaba Cloud, com suporte a HTTP, HTTPS e QUIC. Este tutorial demonstra como rotear tráfego para diferentes services de backend com base no caminho da URL.
Como funciona o ALB Ingress
Conceitos principais:
ALB Ingress Controller: este componente gerencia os resources de Ingress. Ele recupera dinamicamente as alterações nos resources de Ingress e AlbConfig diretamente do API Server do cluster e atualiza as instâncias do ALB conforme necessário. Diferentemente do NGINX Ingress Controller, o ALB Ingress Controller atua como plano de controle para as instâncias do ALB. Ele gerencia essas instâncias, mas não processa o tráfego do usuário diretamente; em vez disso, as próprias instâncias do ALB encaminham o tráfego. O ALB Ingress Controller obtém dinamicamente as mudanças nos resources de Ingress a partir do API Server do cluster e atualiza as instâncias do ALB com base nas regras de encaminhamento definidas no Ingress.
Um AlbConfig é uma Custom Resource Definition (CRD) no nível do cluster, criada pelo ALB Ingress Controller. Cada AlbConfig contém parâmetros que definem a configuração de uma única instância do ALB. Essa instância funciona como ponto de entrada do tráfego e encaminha as requisições para os services de backend. Ela é totalmente gerenciada por Application Load Balancer (ALB). Ao contrário do Nginx Ingress Controller, o ALB Ingress não exige operações e manutenção (O&M) e oferece maior elasticidade.
IngressClass: define a associação entre um Ingress e um AlbConfig.
Ingress: no Kubernetes, o Ingress é um objeto de resource que estabelece as regras de acesso e roteamento de tráfego externo. O ALB Ingress Controller monitora alterações nos resources de Ingress e atualiza as instâncias do ALB para realizar o encaminhamento do tráfego.
Service: ponto de entrada estável para um conjunto de Pods com a mesma função. Outras aplicações acessam os Pods de backend por meio do IP virtual e da porta do Service, sem depender das alterações individuais de cada Pod.
A figura a seguir ilustra a relação entre uma instância do ALB e o ALB Ingress.
Limitações
Os nomes dos resources AlbConfig, namespace, ingress e service não devem começar com aliyun.
Cenário de exemplo
Este tutorial implanta quatro Pods Nginx e configura o ALB Ingress para rotear tráfego por caminho de URL sob o mesmo domínio.
|
Requisição frontend |
Service de backend |
|
|
Service |
|
|
Service |
Pré-requisitos
Você possui installed the ALB Ingress Controller.
Você criou dois vSwitches em zonas de disponibilidade diferentes dentro da VPC do seu cluster. Create and manage VSwitches.
Etapa 1: Implantar o service de backend
Usando o console
Faça login no console do ACS. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha Workloads > Deployments.
Na página Deployments, clique em Create from YAML no canto superior direito.
-
Na página Create, configure os parâmetros.
Sample Template: Selecione Custom.
-
Template: Insira a configuração YAML para implantar dois Deployments (
coffeeetea) e dois Services (coffee-svcetea-svc).
Clique em Create. Uma mensagem Created. será exibida.
-
Verifique se os Deployments e Services foram criados.
No painel de navegação à esquerda, escolha Workloads > Stateless. Os Deployments chamados
coffeeeteaaparecerão.No painel de navegação à esquerda, escolha Network > Services. Os Services chamados
coffee-svcetea-svcaparecerão.
Usando kubectl
-
Crie um arquivo chamado
cafe-service.yamlcom o conteúdo a seguir. Isso implantará dois Deployments (coffeeetea) e dois Services (coffee-svcetea-svc). -
Execute o comando a seguir para implantar os resources.
kubectl apply -f cafe-service.yamlSaída esperada:
deployment "coffee" created service "coffee-svc" created deployment "tea" created service "tea-svc" created -
Verifique os Deployments e Services.
-
Verifique os Deployments.
kubectl get deploymentSaída esperada:
NAME READY UP-TO-DATE AVAILABLE AGE coffee 2/2 2 2 2m26s tea 2/2 2 2 2m26s -
Verifique os Services.
kubectl get svcSaída esperada:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE coffee-svc ClusterIP 172.16.XX.XX <none> 80/TCP 9m38s tea-svc ClusterIP 172.16.XX.XX <none> 80/TCP 9m38s
-
Etapa 2: Criar um AlbConfig
Console
Faça login no console do ACS. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha Workloads > Custom Resources.
-
Na aba CRDs, clique em Create from YAML.
Sample Template: Selecione Custom.
-
Template: Cole o manifesto YAML.
A tabela a seguir descreve os parâmetros.
Parâmetro
Obrigatório
Descrição
metadata.nameSim
Nome do AlbConfig.
NotaO nome do AlbConfig deve ser exclusivo dentro do cluster para evitar conflitos de nomenclatura.
spec.config.nameNão
Nome da instância do ALB.
spec.config.addressTypeNão
Tipo de rede da instância do ALB. Valores válidos:
-
Internet (padrão): a instância fornece services de balanceamento de carga públicos pela internet.
NotaInstâncias do ALB voltadas para a Internet usam um Elastic IP Address (EIP). Há cobrança pela instância EIP, largura de banda e transferência de dados. Pay-as-you-go.
-
Intranet: a instância fornece services de balanceamento de carga privados dentro de uma VPC.
spec.config.zoneMappingsSim
IDs dos vSwitches para a instância do ALB. Para obter instruções sobre como criar um vSwitch, consulte Create and manage vSwitches.
Nota-
Os vSwitches devem estar em uma zona de disponibilidade compatível com o ALB e na mesma VPC do cluster. Regions and availability zones supported by ALB.
-
Se sua região oferecer múltiplas zonas de disponibilidade, recomendamos selecionar vSwitches de pelo menos duas zonas diferentes para garantir alta disponibilidade.
spec.listenersNão
Porta e protocolo do listener. Este exemplo usa HTTP na porta 80.
O ALB Ingress requer um listener. Mantenha este padrão para evitar configurações manuais.
-
Clique em Create. Uma mensagem Created. será exibida.
-
Verifique a instância do ALB:
Faça login no console do Application Load Balancer (ALB).
Na barra de navegação superior, selecione a região da instância.
Na página Instance, verifique se a instância do ALB chamada alb-test aparece na lista de instâncias.
Kubectl
-
Copie o conteúdo a seguir para um arquivo chamado alb-test.yaml para criar um AlbConfig.
A tabela a seguir descreve os parâmetros.
Parâmetro
Obrigatório
Descrição
metadata.nameSim
Nome do AlbConfig.
NotaO nome do AlbConfig deve ser exclusivo dentro do cluster para evitar conflitos de nomenclatura.
spec.config.nameNão
Nome da instância do ALB.
spec.config.addressTypeNão
Tipo de rede da instância do ALB. Valores válidos:
-
Internet (padrão): a instância fornece services de balanceamento de carga públicos pela internet.
NotaInstâncias do ALB voltadas para a Internet usam um Elastic IP Address (EIP). Há cobrança pela instância EIP, largura de banda e transferência de dados. Pay-as-you-go.
-
Intranet: a instância fornece services de balanceamento de carga privados dentro de uma VPC.
spec.config.zoneMappingsSim
IDs dos vSwitches para a instância do ALB. Para obter instruções sobre como criar um vSwitch, consulte Create and manage vSwitches.
Nota-
Os vSwitches devem estar em uma zona de disponibilidade compatível com o ALB e na mesma VPC do cluster. Regions and availability zones supported by ALB.
-
Se sua região oferecer múltiplas zonas de disponibilidade, recomendamos selecionar vSwitches de pelo menos duas zonas diferentes para garantir alta disponibilidade.
spec.listenersNão
Porta e protocolo do listener. Este exemplo usa HTTP na porta 80.
O ALB Ingress requer um listener. Mantenha este padrão para evitar configurações manuais.
-
-
Execute o comando a seguir para criar o AlbConfig.
kubectl apply -f alb-test.yamlSaída esperada:
albconfig.alibabacloud.com/alb-demo createdEssa saída confirma que o AlbConfig foi criado.
Etapa 3: Criar a IngressClass
Recomendamos criar uma IngressClass para cada AlbConfig.
Console
Faça login no console do ACS. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha Workloads > Custom Resources.
-
Na aba CRDs, clique em Create from YAML.
Sample Template: Selecione Custom.
-
Template: Insira o manifesto YAML.
A tabela a seguir descreve os parâmetros.
Parâmetro
Obrigatório
Descrição
metadata.name
Sim
Nome da IngressClass.
NotaO nome deve ser exclusivo dentro do cluster.
spec.parameters.name
Sim
Nome do AlbConfig associado.
Clique em Create. Uma mensagem de confirmação será exibida.
-
Verifique se a IngressClass foi criada:
No painel de navegação à esquerda, escolha .
Clique na aba Resource Objects.
Na caixa de pesquisa API Group, insira IngressClass. A IngressClass criada aparecerá.
Kubectl
-
Crie um arquivo chamado alb.yaml com o conteúdo a seguir.
A tabela a seguir descreve os parâmetros.
Parâmetro
Obrigatório
Descrição
metadata.nameSim
Nome da IngressClass.
NotaO nome deve ser exclusivo dentro do cluster.
spec.parameters.nameSim
Nome do AlbConfig associado.
-
Execute o comando a seguir para criar a IngressClass.
kubectl apply -f alb.yamlSaída esperada:
ingressclass.networking.k8s.io/alb created
Etapa 4: Criar um Ingress
Console
Faça login no console do ACS. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha Network > Ingresses.
-
Na página Ingress, clique em Create Ingress. Na caixa de diálogo Create Ingress, configure o Ingress.
Parâmetro
Descrição
Valor de exemplo
Gateway Type
Selecione o tipo de gateway. As opções incluem ALB e MSE.
ALB Ingress
Name
Um nome personalizado para o Ingress.
cafe-ingress
IngressClass
Uma classe personalizada para o Ingress.
alb
Rules
Clique em +Add Rule para adicionar várias regras de roteamento.
-
Domain Name: Um nome de domínio personalizado.
-
Mappings: Configure os seguintes parâmetros.
-
Path: O caminho da URL para acessar o service. Neste exemplo, este parâmetro é deixado vazio para usar o caminho raiz /.
-
Rule: Suporta Prefix (Prefix-based Match), Exact (Exact Match) e ImplementationSpecific (Default Value).
-
Service: O backend de destino, que é um Kubernetes Service.
-
Port: A porta que o service expõe.
-
-
Um Ingress suporta vários caminhos sob o mesmo nome de domínio. Clique em +Add para adicionar um novo caminho.
-
Domain Name: demo.domain.ingress.top
-
Path mapping:
-
Path: /tea
-
Rule: ImplementationSpecific
-
Service: tea-svc
-
Port: 80
-
-
Mappings:
-
Path: /coffee
-
Rule: ImplementationSpecific
-
Service: coffee-svc
-
Port: 80
-
TLS Settings
Ative esta opção para proteger o Ingress com um certificado TLS (HTTPS).
-
Domain Name: Insira um nome de domínio personalizado.
-
Secrets: Selecione o Secret que contém o certificado TLS.
Para criar um Secret, execute as seguintes etapas:
-
À direita de Secrets, clique em Create.
-
Na caixa de diálogo Create Secret, defina o Name, Cert e Key e clique em OK.
-
Na lista suspensa Secrets, selecione o Secret criado.
-
Clique em Add para configurar várias definições de TLS.
Para mais informações, consulte Configure an HTTPS certificate for encrypted communication.
Mantenha TLS Settings desativado. Esta configuração não é necessária para este exemplo.
More
-
Canary Release: Ative a chave canary release. É possível definir regras de canary com base em cabeçalhos de solicitação, cookies ou pesos.
NotaÉ possível definir regras com base no cabeçalho da solicitação, cookie ou peso. Se você configurar vários tipos de regra, eles serão correspondidos na seguinte ordem de precedência: cabeçalho da solicitação, cookie e, em seguida, peso.
-
Based on Request Header: Divide o tráfego com base no cabeçalho da solicitação. Se você configurar essa definição, as anotações
alb.ingress.kubernetes.io/canary-by-headerealb.ingress.kubernetes.io/canary-by-header-valueserão adicionadas. -
Based on Cookie: Divide o tráfego com base em um cookie. Se você configurar essa definição, a anotação
alb.ingress.kubernetes.io/canary-by-cookieserá adicionada. -
Based on Weight: Define a porcentagem de solicitações a serem roteadas para um service específico. O valor deve ser um número inteiro de 0 a 100. Se você configurar essa definição, a anotação
alb.ingress.kubernetes.io/canary-weightserá adicionada.
-
-
Protocol: Suporta backend services that use the HTTPS and gRPC protocols. Configurar essa definição adiciona a anotação
alb.ingress.kubernetes.io/backend-protocol. -
Rewrite Path: Reescreve o caminho da solicitação antes de encaminhá-lo ao backend service. Esta definição adiciona a anotação alb.ingress.kubernetes.io/rewrite-target.
Mantenha o canary release desativado e preserve as configurações padrão de protocolo e reescrita de caminho. Essas configurações não são necessárias para este exemplo.
Custom Forwarding Rules
Ative regras de encaminhamento personalizadas para gerenciar o tráfego de entrada com controle refinado.
NotaÉ possível adicionar no máximo 10 entradas de condição a uma regra de encaminhamento.
-
Na lista suspensa Add Condition, selecione uma opção:
-
Domain Name:
Corresponde ao domínio da solicitação. Se você especificar vários domínios, uma solicitação será correspondida se usar qualquer um dos domínios especificados. Ao configurar esta condição, a anotação
alb.ingress.kubernetes.io/conditions.host-exampleé adicionada. -
Path:
Corresponde ao caminho da solicitação. Se você especificar vários caminhos, uma solicitação será correspondida se usar qualquer um dos caminhos especificados. Ao configurar esta condição, a anotação
alb.ingress.kubernetes.io/conditions.path-exampleé adicionada. -
HTTP Header:
Corresponde ao cabeçalho da solicitação como um par chave-valor. Por exemplo, Key é
headernamee Value éheadervalue1. Se vários valores de cabeçalho forem configurados, a relação entre eles será OR. Ao configurar esta condição, a anotaçãoalb.ingress.kubernetes.io/conditions.http-header-exampleé adicionada.
-
-
Na lista suspensa Action, selecione uma opção:
-
Forward To
Encaminha solicitações para um ou mais services de backend com base no peso. No campo Service, selecione o service de destino. No campo Port, selecione o número da porta de destino. Em seguida, especifique um peso.
NotaSe você selecionar esta ação, não precisará configurar path mapping na regra.
-
Return Fixed Response
Configura o ALB para retornar uma resposta fixa ao cliente. É possível definir o código de status da resposta, o conteúdo do corpo e o tipo de conteúdo. Conforme necessário, configure Response Status Code, Response Content Type (Optional) e Response Content (Optional).
Response Body Type:
-
text/plain: texto simples.
-
text/css: conteúdo CSS.
-
text/html: conteúdo HTML.
-
application/javascript: conteúdo JavaScript.
-
application/json: conteúdo JSON.
-
-
As regras de encaminhamento personalizadas suportam condições baseadas em domínio, caminho ou cabeçalho HTTP, além de ações como encaminhar para um service ou retornar uma resposta fixa. Customize forwarding rules for an ALB Ingress.
Mantenha as regras de encaminhamento personalizadas desativadas. Esta configuração não é necessária para este exemplo.
Annotations
É possível especificar um nome e valor de anotação personalizados, ou selecionar ou pesquisar uma anotação para configurar. Para mais informações sobre anotações de Ingress, consulte Annotations.
Não necessário para este exemplo.
Labels
Especifica rótulos a serem adicionados ao Ingress. Rótulos são pares chave-valor anexados a objetos para especificar atributos de identificação.
Não necessário para este exemplo.
-
No canto inferior esquerdo da página Create Ingress, clique em OK.
-
Verifique o Ingress:
No painel de navegação à esquerda, escolha Network > Routes. O ingress cafe-ingress aparecerá.
A coluna Endpoint do cafe-ingress exibe o endereço do endpoint.
kubectl
-
Crie um arquivo chamado cafe-ingress.yaml e adicione o seguinte conteúdo:
A tabela a seguir descreve os parâmetros.
Parâmetro
Obrigatório
Descrição
metadata.nameSim
O nome do Ingress.
NotaO nome deve ser exclusivo dentro do cluster para evitar conflitos.
spec.ingressClassNameSim
O nome da IngressClass associada.
spec.rules.hostNão
O nome de domínio no cabeçalho HTTP
Host. Defina isso como seu próprio nome de domínio.O Kubernetes corresponde aos cabeçalhos Host recebidos com as regras do Ingress e roteia as solicitações correspondidas para o service de backend especificado.
Nota-
Nomes de domínio personalizados exigem um registro ICP válido para acesso na China continental. ICP filing process.
-
Se você não definir este parâmetro, a regra do Ingress corresponderá a todas as solicitações que chegarem ao controlador de Ingress.
spec.rules.http.paths.pathSim
A URL do caminho de encaminhamento.
spec.rules.http.paths.pathTypeSim
A regra de correspondência de URL. Route requests based on URL paths.
spec.rules.http.paths.backend.service.nameSim
O nome do Service de backend.
spec.rules.http.paths.backend.service.port.numberSim
O número da porta do Service de backend.
Certifique-se de que esta porta corresponda à definição do Service.
-
-
Execute o comando a seguir para criar o Ingress com roteamento baseado em
pathpara os servicescoffeeetea.kubectl apply -f cafe-ingress.yamlSaída esperada:
ingress.networking.k8s.io/cafe-ingress created -
(Opcional) Obtenha o nome DNS do ALB atribuído ao Ingress.
kubectl get ingressSaída esperada:
NAME CLASS HOSTS ADDRESS PORTS AGE cafe-ingress alb demo.domain.ingress.top alb-m551oo2zn63yov****.cn-hangzhou.alb.aliyuncs.com 80 50s
(Opcional) Etapa 5: Configurar a resolução de nome de domínio
Se você especificou um domínio personalizado em spec.rules.host, adicione um registro CNAME apontando-o para o nome DNS do ALB para habilitar o acesso através do seu domínio.
Faça login no console do Container Service for Kubernetes (ACK).
Clique no nome do cluster para abrir a página de gerenciamento do cluster.
No painel de navegação à esquerda, escolha Network > Routes.
Na coluna Endpoint do cafe-ingress, copie seu nome DNS.
-
Para adicionar um registro CNAME:
Faça login no console do Alibaba Cloud DNS.
Na página Domain Name Resolution, clique em Add Zone.
-
Na caixa de diálogo Add Zone, insira seu nome de domínio e clique em OK.
ImportanteVocê deve verificar o nome de domínio com um registro TXT.
Para o domínio de destino, clique em Settings na coluna Actions.
Na página Settings, clique em Add Record.
-
No painel Add Record, configure as seguintes definições para o registro CNAME e clique em OK.
Parâmetro
Descrição
Record Type
Na lista suspensa, selecione CNAME.
Hostname
O prefixo do seu nome de domínio, como
www.DNS Query Source
Selecione o valor padrão.
Record Value
Insira o nome DNS que você copiou da coluna Endpoint.
TTL
A duração durante a qual um registro DNS é armazenado em cache em um servidor DNS. Use o valor padrão.
Etapa 6: Testar o encaminhamento de tráfego
Insira o domínio de teste e o caminho da URL no navegador para verificar o roteamento de tráfego.
Se você configurou um domínio personalizado, use esse domínio.
Caso não tenha configurado um domínio personalizado, utilize o nome DNS do endpoint do cafe-ingress.
Neste exemplo, o domínio é demo.domain.ingress.top:
Insira
demo.domain.ingress.top/coffeeno navegador. A página exibirá o service de backend coffee-svc, mostrando o nome do Server como o nome do Pod coffee e a URI como/coffee, o que indica que a solicitação foi roteada corretamente para o service de backend coffee.Insira
demo.domain.ingress.top/teano navegador. A página exibirá o service de backend tea-svc, mostrando a URI como/teae o nome do Server começando comtea-6, o que indica que a solicitação foi roteada corretamente para o Pod de backend tea.
Referências
Advanced usage of the ALB Ingress service aborda verificações de integridade, redirecionamento HTTPS, canary releases e portas de listener personalizadas.