Use faixas de tráfego em modo permissivo para isolar versões de aplicações. Esse processo propaga um cabeçalho de requisição de roteamento nos baggage headers para direcionar o tráfego a diferentes faixas. Quando os serviços dentro de uma faixa de tráfego se comunicam e o serviço de destino não existe na faixa atual, a requisição é encaminhada para a faixa base. Isso garante a integridade da cadeia de chamadas e simplifica o gerenciamento de tráfego.
Antes de começar, leia e compreenda Use traffic lanes in permissive mode to manage end-to-end traffic e seu conteúdo relacionado.
Visão geral do cenário
Este exemplo simula uma cadeia de chamadas com três serviços (mocka, mockb e mockc) e três faixas de tráfego (s1, s2 e s3). Primeiro, use a instrumentação automática do OpenTelemetry para ativar a propagação de baggage headers nos serviços. Em seguida, crie três faixas de tráfego no modo permissivo e direcione o tráfego usando uma política de roteamento baseada em peso.
Etapa 1: Implantar os serviços de exemplo
-
Ative a injeção automática de sidecar proxy para o namespace default. Para mais informações, consulte Manage global namespaces.
NotaPara mais detalhes sobre injeção automática, consulte Configure sidecar injection policies.
-
Crie um arquivo chamado
mock.yamlcom o seguinte conteúdo.Essas anotações declaram que o serviço é uma aplicação Java e instruem o OpenTelemetry Operator a executar a instrumentação automática no contêiner chamado
default. -
Execute o comando a seguir para implantar os serviços de exemplo.
kubectl apply -f mock.yamlA instrumentação automática do OpenTelemetry permite que os pods dos serviços implantados propaguem automaticamente os baggage headers ao longo da cadeia de chamadas.
Etapa 2: Criar um grupo de faixas e suas faixas de tráfego
-
Crie um grupo de faixas.
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Na página Traffic Lane, clique em Create Swimlane Group. No painel Create Swimlane Group, configure os parâmetros e clique em OK.
Parâmetro
Descrição
Name of swim lane group
Insira test.
Entrance gateway
Selecione ingressgateway.
Lane Mode
Selecione Permissive Mode.
Pass-through Mode of Trace Context
Selecione Pass Through Baggage Header.
Routing Request Header
Insira x-asm-prefer-tag.
Swimlane Services
Selecione o cluster Kubernetes de destino e o namespace default. Na lista de serviços, selecione mocka, mockb e mockc e clique em ícone
para adicionar os serviços à área selected.
-
Crie as faixas de tráfego s1, s2 e s3 e vincule-as às versões v1, v2 e v3, respectivamente.
Na página Traffic Lane, vá até a seção Traffic Rule Definition e clique em Create swimlanes.
Na caixa de diálogo Create swimlanes, configure os parâmetros e clique em OK.
Parâmetro
Descrição
Swimlane Name
Insira s1, s2 e s3 para as três faixas de tráfego, respectivamente.
Configure Service Tag
Label Key: Insira ASM_TRAFFIC_TAG.
Label Value: Insira v1, v2 e v3 para as três faixas de tráfego, respectivamente.
Add Service
-
Faixa s1: Selecione mocka(default), mockb(default) e mockc(default).
-
Faixa s2: Selecione mocka(default) e mockc(default).
-
Faixa s3: Selecione mockb(default).
Por padrão, o ASM define a primeira faixa de tráfego criada em um grupo como a faixa base. Também é possível alterar a faixa base. Quando o tráfego é enviado para um serviço inexistente em outra faixa de tráfego, um mecanismo de fallback encaminha a requisição para a faixa base. Para mais informações sobre como alterar a faixa base, consulte Change the baseline lane in permissive mode.
No painel de navegação à esquerda do console, escolha Traffic Management Center > DestinationRule ou VirtualService para visualizar os recursos DestinationRule e VirtualService gerados automaticamente pelo ASM para cada serviço no grupo de faixas. Por exemplo, o DestinationRule e o VirtualService a seguir são criados automaticamente para o serviço mocka.
-
Crie uma regra unificada de roteamento baseada em peso.
Na página Traffic Lane, na seção Traffic Rule Definition, clique em Weight-based Routing na seção Routing Policy.
-
Na caixa de diálogo Set Unified Routing Rules, configure os parâmetros e clique em OK. O exemplo a seguir mostra como configurar uma regra de roteamento unificada para as três faixas de tráfego, considerando /mock como a API de entrada do serviço da faixa.
Parâmetro
Descrição
realm name
Defina como *.
Matching request URI
Defina Method como Prefix e Content como /.
-
Defina os pesos de roteamento para as três faixas de tráfego. Os pesos determinam a proporção de tráfego enviada para cada faixa.
-
Na página Traffic Lane, na seção Traffic Rule Definition, clique em ícone
ao lado do número na coluna Traffic Routing Weight de cada faixa. Na caixa de diálogo Edit Traffic Routing Weight, configure os parâmetros e clique em OK.Parâmetro
Descrição
Ingress service
Defina como mocka.default.svc.cluster.local para todas as três faixas de tráfego.
Weight Value
-
Para a faixa s1, insira 60.
-
Para a faixa s2, insira 20.
-
Para a faixa s3, insira 20.
-
-
Etapa 3: Verificar o canary release de ponta a ponta
Obtenha o endereço IP público do ingress gateway do ASM. Para mais informações, consulte Obtain the IP address of the ASM ingress gateway.
-
Execute o comando a seguir para definir uma variável de ambiente. Substitua
xxx.xxx.xxx.xxxpelo endereço IP obtido na etapa anterior.export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx -
Verifique o canary release de ponta a ponta.
-
Execute o comando a seguir para observar o comportamento de acesso nas três faixas de tráfego.
for i in {1..100}; do curl http://${ASM_GATEWAY_IP}/ ; echo ''; sleep 1; done;Saída esperada:
# Traffic to lane s1 (baseline): all services are v1. -> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190) # Traffic to lane s2: mocka and mockc are v2, mockb falls back to v1 in the baseline lane. -> mocka(version: v2, ip: 192.168.0.184)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v2, ip: 192.168.0.189) # Traffic to lane s3: mockb is v3, mocka and mockc fall back to v1 in the baseline lane. -> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v3, ip: 192.168.0.2)-> mockc(version: v1, ip: 192.168.0.190) # The output will show a mix of the above patterns, with distribution approximating 6:2:2 for s1:s2:s3.A saída mostra que o tráfego é distribuído para as faixas s1, s2 e s3 em uma proporção aproximada de 6:2:2. A faixa s1 atua como a faixa base. Quando um serviço na cadeia de chamadas não existe na faixa de destino, a requisição retorna ao serviço correspondente na faixa base (s1).
-