As faixas de tráfego em modo permissivo permitem isolar versões de aplicações. Esse processo propaga um header de requisição de roteamento nos headers de baggage 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 baseline. Isso garante a integridade da cadeia de chamadas e simplifica o gerenciamento de tráfego.
Antes de começar, leia e compreenda o tópico Usar faixas de tráfego em modo permissivo para gerenciar tráfego de ponta a ponta 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, você usará a instrumentação automática do OpenTelemetry para ativar a propagação de headers de baggage nos serviços. Em seguida, criará três faixas de tráfego em modo permissivo e direcionará o tráfego por meio de uma política de roteamento baseada em pesos.
Etapa 1: Implantar os serviços de exemplo
-
Ative a injeção automática de proxy sidecar no namespace default. Para mais informações, consulte Gerenciar namespaces globais.
NotaPara mais detalhes sobre a injeção automática, consulte Configurar políticas de injeção de sidecar.
-
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 realizar 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 de serviço implantados propaguem automaticamente os headers de baggage 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 no 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 no í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 de faixas como a faixa baseline. Também é possível alterar a faixa baseline. Quando o tráfego é enviado para um serviço que não existe em outra faixa de tráfego, um mecanismo de fallback encaminha a requisição para a faixa baseline. Para mais informações sobre como alterar a faixa baseline, consulte Alterar a faixa baseline no modo permissivo.
No painel de navegação à esquerda do console, você pode escolher Traffic Management Center > DestinationRule ou VirtualService para visualizar os recursos DestinationRule e VirtualService que o ASM gera automaticamente 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 de roteamento unificada baseada em pesos.
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 que a API de entrada para o serviço da faixa seja /mock.
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 no í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 a liberação canary de ponta a ponta
Obtenha o endereço IP público do gateway de entrada do ASM. Para mais informações, consulte Obter o endereço IP do gateway de entrada do ASM.
-
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 a liberação canary 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 de tráfego s1, s2 e s3 em uma proporção aproximada de 6:2:2. A faixa s1 atua como a faixa baseline. Quando um serviço na cadeia de chamadas não existe na faixa de destino, a requisição retorna para o serviço correspondente na faixa baseline (s1).
-