Ao migrar de uma implantação Istio autogerenciada para o Service Mesh (ASM), transfira o tráfego de entrada. Este guia apresenta uma abordagem de deslocamento de tráfego baseada em pesos: o gateway de entrada Istio existente e um novo gateway de entrada ASM compartilham a mesma instância do Classic Load Balancer (CLB). Controle a divisão do tráfego ajustando os pesos dos grupos vServer.

Pré-requisitos
Instância ASM criada e cluster Kubernetes de destino adicionado à malha.
Acesso de administrador ao cluster Kubernetes onde o gateway de entrada Istio autogerenciado está em execução.
Acesso ao console CLB para gerenciar rótulos do balanceador de carga e grupos vServer.
Gateway de entrada Istio autogerenciado em execução e processando tráfego normalmente.
Escolha uma estratégia de deslocamento de tráfego
Há duas opções para redirecionar o tráfego ao gateway de entrada ASM:
|
Estratégia |
Quando usar |
Como funciona |
|
Alternância baseada em DNS |
Quando é possível modificar registros DNS diretamente |
Atualize o registro do Domain Name System (DNS) do domínio para apontar ao endereço IP do gateway de entrada ASM |
|
Deslocamento baseado em peso |
Quando não é possível modificar registros DNS ou quando se necessita de migração gradual e controlada |
Ambos os gateways compartilham uma instância CLB; ajuste os pesos dos grupos vServer para transferir o tráfego incrementalmente |
Este tópico aborda o deslocamento baseado em peso. Caso opte pela alternância baseada em DNS, ignore a configuração de reutilização do CLB e atualize os registros DNS após criar o gateway de entrada ASM.
Crie o gateway de entrada ASM
Crie um gateway de entrada ASM no mesmo cluster Kubernetes do gateway de entrada Istio autogerenciado. Para instruções detalhadas, consulte Criar um gateway de entrada.
Ao criar o gateway:
Use um nome distinto. O nome do gateway de entrada ASM deve diferir do nome do gateway de entrada Istio existente. Adicione
-asmao final para diferenciá-lo — por exemplo,ingressgateway-asm.Implante no mesmo cluster. Na Etapa 3 do tópico Criar um gateway de entrada, defina o parâmetro Cluster como o cluster Kubernetes onde reside o gateway de entrada Istio de source.
Verifique o gateway
Após criar o gateway de entrada ASM, confirme se os pods do gateway estão em execução:
kubectl get pods -n istio-system -l istio=ingressgateway-asm
Saída esperada (o nome do pod e a idade serão diferentes):
NAME READY STATUS RESTARTS AGE
ingressgateway-asm-5d8f7b9c4f-xxxxx 1/1 Running 0 1m
Migrar configurações do Istio
Migre as configurações de roteamento do Istio para o gateway de entrada ASM. Siga a ordem "criar antes de remover" (make-before-break) descrita abaixo para evitar erros 503 causados pela propagação de configuração eventualmente consistente.
1. Aplicar recursos DestinationRule primeiro
Aplique as configurações DestinationRule necessárias para o gateway de entrada ASM. Aguarde alguns segundos para que a configuração se propague aos sidecars Envoy antes de prosseguir.
2. Atualize o seletor do Gateway
No YAML do Istio Gateway, atualize selector.istio para corresponder ao nome do gateway de entrada ASM:
spec:
selector:
istio: ingressgateway-asm
3. Aplicar configurações VirtualService
Após a propagação da atualização do seletor do Gateway e das configurações DestinationRule, aplique as configurações VirtualService que referenciam o gateway de entrada ASM.
Sempre aplique o DestinationRule antes do VirtualService ao adicionar novas regras de roteamento. Se um VirtualService referenciar um subconjunto inexistente em um DestinationRule, o tráfego para esse subconjunto retornará erros 503 até a propagação do DestinationRule.
Verifique configurações
Confirme se o gateway de entrada ASM recebeu a configuração de roteamento esperada:
kubectl get gateway,virtualservice,destinationrule -n istio-system
Verifique se todos os recursos Gateway, VirtualService e DestinationRule estão listados e referenciam o nome correto do gateway.
Deslocar tráfego gradualmente
Com as configurações aplicadas, transfira o tráfego do gateway de entrada Istio autogerenciado para o gateway de entrada ASM ajustando os pesos do CLB.
Defina o peso do gateway de entrada ASM com um valor baixo, como
10, para rotear uma fração do tráfego. Edite a anotaçãoservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-weightno Serviço do gateway de entrada ASM.-
Verifique se o tráfego flui corretamente pelo gateway de entrada ASM. Analise os logs da aplicação, os códigos de resposta e a latência:
kubectl logs -n istio-system -l istio=ingressgateway-asm --tail=50 Aumente gradualmente o peso do gateway de entrada ASM (por exemplo, 10 -> 30 -> 60 -> 100) e reduza proporcionalmente o peso do gateway de entrada Istio de source.
Após rotear todo o tráfego pelo gateway de entrada ASM, defina o peso do gateway de entrada Istio de source como
0.
Como ajustar pesos
|
Gateway |
Ação |
|
Gateway de entrada Istio de source |
Edite a anotação |
|
Gateway de entrada ASM |
Edite a anotação |
Rollback
Se o gateway de entrada ASM não funcionar conforme o esperado em qualquer momento da migração:
Defina o peso do gateway de entrada ASM como
0para interromper o envio de tráfego.Restaure o peso do gateway de entrada Istio de source para
100.Reverta as configurações de Gateway, VirtualService e DestinationRule para apontarem ao gateway de entrada Istio original. Ao remover subconjuntos, atualize primeiro o VirtualService, aguarde alguns segundos e depois atualize o DestinationRule.
Perguntas frequentes: Reutilizar uma instância CLB criada automaticamente pelo Serviço do gateway de entrada Istio
Se uma instância CLB foi criada automaticamente durante o provisionamento de um Serviço para o gateway de entrada Istio autogerenciado, execute estas etapas antes de reutilizá-la para o gateway de entrada ASM:
Abra o console CLB e localize a instância CLB.
-
Exclua os dois rótulos seguintes da instância CLB:
kubernetes.do.not.deleteack.aliyun.com
-
Adicione as seguintes anotações ao Serviço do gateway de entrada Istio autogerenciado. Substitua os placeholders abaixo pelos valores reais:
Placeholder
Descrição
Exemplo
<your-clb-instance-id>ID da instância CLB
lb-bp1abc2defg
<your-vserver-group-id>ID do grupo vServer
rsp-bp1abc3defg
<port>Número da porta do listener
80
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "false" service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: <your-clb-instance-id> service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: <your-vserver-group-id>:<port> service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "100"