As lanes de tráfego isolam versões específicas de serviços em ambientes de execução independentes e roteiam solicitações correspondentes por toda a cadeia de chamadas, sem exigir alterações no código da aplicação. Esse mecanismo permite executar canary releases de ponta a ponta em vários serviços simultaneamente.
Por que usar lanes de tráfego
Implantações canary padrão no Kubernetes acoplam a distribuição de tráfego à quantidade de réplicas: enviar 10% do tráfego para uma versão canary exige 1 réplica canary junto com 9 réplicas estáveis. Essa abordagem apresenta limitações em dois cenários:
Cadeias de chamadas entre múltiplos serviços. Solicitações que passam pelos serviços A, B e C exigem roteamento de versão consistente em cada salto, mas o Kubernetes não oferece um mecanismo nativo para isso.
Dimensionamento independente. Com lanes, a distribuição de tráfego e a contagem de réplicas são totalmente desacopladas. Uma única réplica canary recebe exatamente a porcentagem de tráfego especificada, independentemente da quantidade de réplicas estáveis em execução.
As lanes de tráfego do ASM resolvem ambos os problemas ao marcar solicitações no gateway de entrada e propagar essa marcação por toda a cadeia de chamadas.
Como funciona
Configurar lanes pelo console gera automaticamente três recursos do Istio:
|
Recurso |
Finalidade |
|
TrafficLabel |
Atribui um rótulo a cada solicitação com base no rótulo de pod |
|
DestinationRule |
Mapeia nomes de lanes para subconjuntos de versão de serviço |
|
VirtualService |
Roteia solicitações para o subconjunto correto com base no cabeçalho |
Fluxo de roteamento:
Uma solicitação chega ao gateway de entrada com o cabeçalho
x-asm-prefer-tag: <lane-name>.O VirtualService corresponde ao cabeçalho e à URI e roteia a solicitação para o subconjunto correspondente do primeiro serviço.
O TrafficLabel propaga a tag da lane pelas chamadas subsequentes entre serviços e mantém a solicitação na mesma lane durante toda a cadeia de chamadas.
Visão geral do cenário
Este tutorial implanta três lanes (s1, s2, s3), cada uma contendo três serviços (mocka, mockb, mockc) vinculados a diferentes versões:
|
Lane |
Tag de serviço |
Serviços |
|
s1 |
v1 |
mocka, mockb, mockc |
|
s2 |
v2 |
mocka, mockb, mockc |
|
s3 |
v3 |
mocka, mockb, mockc |
Após a configuração, solicitações com x-asm-prefer-tag: s1 fluem exclusivamente pela versão v1 de todos os três serviços; solicitações com s2 passam pela v2; e solicitações com s3 seguem pela v3.

Pré-requisitos
Antes de começar, verifique se você possui:
Uma instância do ASM nas edições Enterprise ou Ultimate, versão 1.17.2.22 ou posterior. Para mais informações, consulte Criar uma instância do ASM ou Atualizar uma instância do ASM
Um cluster adicionado à instância do ASM. Para mais informações, consulte Adicionar um cluster a uma instância do ASM
Um gateway do ASM chamado
ingressgateway. Para mais informações, consulte Criar um serviço de gateway de entradaUm gateway do Istio chamado
ingressgatewayno namespaceistio-system. Para mais informações, consulte Gerenciar gateways do Istio
Etapa 1: Implantar serviços de exemplo
Ativar injeção automática de proxy sidecar
Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha ASM Instance > Global Namespace.
Na página Global Namespace, localize o namespace default e clique em Enable Automatic Sidecar Injection na coluna Automatic Sidecar Injection. Na mensagem Submit, clique em OK.
Para mais informações, consulte Ativar injeção automática de proxy sidecar.
Implantar os serviços
Implante as versões v1, v2 e v3 dos serviços de exemplo no cluster ACK:
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v1/application-v1.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v2/application-v2.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v3/application-v3.yaml
Etapa 2: Criar um grupo de lanes e lanes
Criar um grupo de lanes
Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha Traffic Management Center > Traffic Lane.
Na página Traffic Lane, clique em Create Swimlane Group. No painel Create Swimlane Group, configure os parâmetros a seguir e clique em OK.
|
Parâmetro |
Valor |
|
Name of swim lane group |
|
|
Entrance gateway |
|
|
Swimlane Services |
Selecione o cluster ACK na lista suspensa Kubernetes Clusters e escolha default na lista suspensa Namespace. Marque mocka, mockb e mockc na lista de serviços e clique em ícone |
Após criar o grupo de lanes, o ASM gera um recurso TrafficLabel:
Criar lanes
Crie três lanes (s1, s2, s3) e vincule cada uma à versão de serviço correspondente. As etapas a seguir mostram como criar a lane s1. Repita o mesmo processo para s2 (tag de serviço: v2) e s3 (tag de serviço: v3).
Na seção Traffic Rule Definition da página Traffic Lane, clique em Create swimlanes.
Na caixa de diálogo Create swimlanes, configure os parâmetros abaixo e clique em OK.
|
Parâmetro |
Valor |
|
Swimlane Name |
|
|
Configure Service Tag |
|
|
Add Service |
Selecione mocka(default), mockb(default) e mockc(default) |
Solicitações com o cabeçalho x-asm-prefer-tag: s1 são roteadas para o subconjunto v1 de cada serviço.

Depois de criar todas as três lanes, a seção Traffic Rule Definition as exibe da seguinte forma:

A criação de cada lane gera um DestinationRule. O exemplo a seguir mostra o DestinationRule para a lane s1:
Criar regras de tráfego de entrada
Defina uma regra de roteamento de tráfego para cada lane. Os passos a seguir demonstram a criação de uma regra para a lane s1. Repita o procedimento para s2 e s3.
Este exemplo considera que todos os serviços das lanes compartilham o caminho de solicitação de entrada /mock.
Na seção Traffic Rule Definition da página Traffic Lane, encontre a lane desejada e clique em Ingress traffic rules na coluna Actions.
Na caixa de diálogo Add drainage rule, preencha os parâmetros indicados e clique em OK.
|
Parâmetro |
Valor |
|
Ingress service |
|
|
Ingress traffic rules |
Name: |
|
Matching request URI |
Method: Exact, Content: |
Ao concluir a criação das regras de roteamento para as três lanes, a seção Traffic Rule Definition as apresentará assim:

O ASM gera um VirtualService que roteia solicitações com base no cabeçalho x-asm-prefer-tag:
Etapa 3: Verificar o canary release de ponta a ponta
Obter o endereço ip do gateway
Obtenha o endereço ip público do gateway de entrada do ASM. Para detalhes, veja a Etapa 2 em Integrar o serviço de inferência nativo da nuvem KServe com o ASM.
Defina o endereço ip como uma variável de ambiente. Substitua <gateway-ip-address> pelo endereço ip público real.
export ASM_GATEWAY_IP=<gateway-ip-address>
Testar cada lane
Envie 100 solicitações para cada lane e verifique se o tráfego permanece dentro das versões de serviço esperadas.
Lane s1 (esperado: tudo v1):
for i in {1..100}; do curl -H 'x-asm-prefer-tag: s1' http://${ASM_GATEWAY_IP}/mock; echo ''; sleep 1; done;
Saída esperada:
-> mocka(version: v1, ip: 172.17.0.54)-> mockb(version: v1, ip: 172.17.0.129)-> mockc(version: v1, ip: 172.17.0.130)
Todos os três serviços retornam v1, confirmando que solicitações marcadas com x-asm-prefer-tag: s1 são roteadas exclusivamente pela lane s1.
Lane s2 (esperado: tudo v2):
for i in {1..100}; do curl -H 'x-asm-prefer-tag: s2' http://${ASM_GATEWAY_IP}/mock; echo ''; sleep 1; done;
Saída esperada:
-> mocka(version: v2, ip: 172.17.0.9)-> mockb(version: v2, ip: 172.17.0.126)-> mockc(version: v2, ip: 172.17.0.128)
Lane s3 (esperado: tudo v3):
for i in {1..100}; do curl -H 'x-asm-prefer-tag: s3' http://${ASM_GATEWAY_IP}/mock; echo ''; sleep 1; done;
Saída esperada:
-> mocka(version: v3, ip: 172.17.0.132)-> mockb(version: v3, ip: 172.17.0.127)-> mockc(version: v3, ip: 172.17.0.69)
Solucionar problemas de roteamento
Caso alguma solicitação retorne uma versão incorreta, verifique os itens a seguir:
|
Sintoma |
Possível causa |
Resolução |
|
A resposta mostra a versão errada |
Os rótulos de pod |
Verifique os rótulos dos pods com |
|
Sem resposta ou erro 404 |
A rota do VirtualService não corresponde ao valor do cabeçalho |
Verifique o yaml do VirtualService para confirmar as regras de correspondência de cabeçalho e o caminho da URI |
|
Vazamento de tráfego entre lanes |
Os subconjuntos do DestinationRule não mapeiam corretamente os nomes das lanes para os rótulos de versão |
Inspecione o yaml do DestinationRule e verifique se cada subconjunto mapeia o valor correto de |
|
Falhas intermitentes de roteamento |
Proxy sidecar não injetado em alguns pods |
Execute |
(Opcional) Etapa 4: Verificar a topologia da malha
Se a Topologia da Malha estiver ativada no console do ASM, inspecione o gráfico de topologia para visualizar os caminhos de solicitação entre as lanes. Para mais informações, consulte Ativar a Topologia da Malha para observar uma instância do ASM no console do ASM.
Próximos passos
Rotular tráfego — Saiba mais sobre conceitos de rotulagem de tráfego e configurações avançadas