Use traffic lanes em permissive mode para obter o version isolation da aplicação. Ao definir um E2E pass-through request header como request routing header, você pode usar o valor desse cabeçalho para rotear o tráfego para as swimlanes. Quando os serviços dentro de uma swimlane se comunicam e o serviço de destino não existe na swimlane atual, a solicitação é encaminhada para a baseline lane. Esse comportamento garante a integridade da cadeia de chamadas e simplifica o gerenciamento de tráfego.
Antes de começar, leia e compreenda o conteúdo de Usar traffic lanes em modo permissivo para gerenciar tráfego ponta a ponta e seus tópicos relacionados.
Visão geral do cenário
Este exemplo usa três serviços, mocka, mockb e mockc, para criar três swimlanes (s1, s2 e s3) que representam três versões de uma cadeia de chamadas de serviço. A swimlane s1 atua como baseline lane e contém todos os três serviços. A swimlane s2 inclui apenas os serviços mocka e mockc. A swimlane s3 contém somente o serviço mockb. Neste cenário, tanto o E2E pass-through request header quanto o request routing header estão definidos como my-trace-id.
Etapa 1: Criar um grupo de swimlanes e as swimlanes
-
Crie um grupo de swimlanes.
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
Neste exemplo, defina o nome como test.
Entrance gateway
Selecione ingressgateway.
Lane Mode
Selecione Permissive Mode.
Pass-through Mode of Trace Context
Escolha Pass Through Custom Header.
E2E Pass-through Request Header
Defina este valor como
my-trace-id.Swimlane service
Selecione o cluster Kubernetes de destino e o
namespacedefault. Na lista de serviços, marque mocka, mockb e mockc. Clique em ícone
para movê-los para a área selected.
-
Crie as
swimlaness1,s2es3e associe-as às versõesv1,v2ev3, respectivamente.Na seção Traffic Lane da página Traffic Rule Definition, 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
Defina os nomes das três
swimlanescomo s1, s2 e s3, respectivamente.Configure Service Tag
Label Key: Defina como ASM_TRAFFIC_TAG.
Label Value: Defina como v1, v2 e v3 para as
swimlaness1,s2es3, respectivamente.Add Service
Para a
swimlanes1: Selecione mocka(default), mockb(default) e mockc(default).Para a
swimlanes2: Selecione mocka(default) e mockc(default).Para a
swimlanes3: Selecione mockb(default).Após a criação das três
swimlanes, o resultado é exibido. Por padrão, a primeiraswimlanecriada em um grupo torna-se abaseline lane. Você pode alterar abaseline lane. Quando o tráfego é enviado para um serviço inexistente em outraswimlane, ofallback mechanismencaminha a solicitação para abaseline lane. Para mais informações sobre como alterar a baseline lane, consulte Modificar a baseline lane. Na página Traffic Rule Definition, a Baseline Lane está definida como s1 e o Ingress Type é ASM Gateway (ingressgateway).Depois de criar as três
swimlanes, o Alibaba Cloud Service Mesh gera automaticamente umaDestinationRulee umVirtualServicepara cada serviço no grupo deswimlanes. Para visualizá-los, escolha ou Virtual Service no painel de navegação à esquerda. Por exemplo, o ASM cria automaticamente a seguinteDestinationRulee o seguinteVirtualServicepara o serviçomocka.
-
Crie
traffic routing rulespara as trêsswimlanes.Na seção Traffic Lane da página Traffic Rule Definition, localize a
swimlanede destino e clique em Ingress traffic rules na coluna Actions.-
Na caixa de diálogo Add drainage rule, configure os parâmetros e clique em OK.
Este exemplo considera que a API de entrada para todos os serviços da
swimlaneé/mock. Portanto, configure a mesmatraffic routing rulepara cadaswimlane.Parâmetro
Descrição
Ingress service
Selecione mocka.default.svc.cluster.local.
Ingress traffic rules
Para as
traffic routing rulesdas trêsswimlanes, defina o Name como r1, r2 e r3, respectivamente. Defina o realm name como *.Matching request URI
Configure o Method como Exact e o Content como /mock.
Após criar as
traffic routing rulespara as trêsswimlanes, o resultado é exibido. Além da correspondência exata de URI, cada regra inclui uma condição de correspondência de Headers: o nome do cabeçalho émy-trace-id, o tipo de correspondência é exato e os valores de correspondência para asswimlaness1,s2es3sãos1,s2es3, respectivamente. A Baseline Lane está definida como s1.Depois de criar as regras, o ASM gera automaticamente um
VirtualServiceque define atraffic routing rulepara cadaswimlane. Por exemplo, o ASM gera o seguinteVirtualServicepara aswimlanes2.
Etapa 2: Verificar o E2E canary release
Obtenha o endereço ip público do
ingress gatewaydo ASM. Para mais informações, consulte Obter o endereço ip de um ingress gateway.-
Execute o comando a seguir para definir uma variável de ambiente.
No comando,
xxx.xxx.xxx.xxxrepresenta o endereço ip obtido na etapa anterior.export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx -
Verifique o
E2E canary release.-
Execute o comando a seguir para testar o acesso à
swimlanes1.O valor
s1do campomy-trace-idcorresponde ao nome daswimlanes1configurada na Etapa 1.2.for i in {1..100}; do curl -H'my-trace-id: 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)A saída confirma que as solicitações com o cabeçalho http
my-trace-id: s1são roteadas para os serviços naswimlanes1. -
Execute o comando a seguir para testar o acesso à
swimlanes2.O valor
s2do campomy-trace-idcorresponde ao nome daswimlanes2configurada na Etapa 1.2.for i in {1..100}; do curl -H'my-trace-id: s2' http://${ASM_GATEWAY_IP}/mock ; echo ''; sleep 1; done;Saída esperada:
mocka(version: v2, ip: 192.168.1.101)-> mockb(version: v1, ip: 192.168.1.100)-> mockc(version: v2, ip: 192.168.1.116)A saída mostra que as solicitações com o cabeçalho http
my-trace-id: s2são roteadas para os serviços naswimlanes2. Quando uma solicitação tem como alvo o serviçomockb, que não existe naswimlanes2, ofallback mechanismencaminha a solicitação para o serviçomockbnabaseline lanes1. As solicitações subsequentes para o serviçomockcretornam corretamente ao serviçomockcnaswimlanes2. -
Execute o comando a seguir para testar o acesso à
swimlanes3.O valor
s3do campomy-trace-idcorresponde ao nome daswimlanes3configurada na Etapa 1.2.for i in {1..100}; do curl -H'my-trace-id: s3' http://${ASM_GATEWAY_IP}/mock ; echo ''; sleep 1; done;Saída esperada:
mocka(version: v1, ip: 192.168.1.103)-> mockb(version: v3, ip: 192.168.1.120)-> mockc(version: v1, ip: 192.168.1.105)A saída indica que as solicitações com o cabeçalho http
my-trace-id: s3são roteadas para o serviço naswimlanes3. Quando as solicitações têm como alvo os serviçosmockaemockc, inexistentes naswimlanes3, ofallback mechanismencaminha essas solicitações para os serviçosmockaemockcnabaseline lanes1.
-