Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Configure traffic mirroring

Última atualização: Jun 28, 2026

Ao implantar uma nova versão de serviço, valide-a com tráfego real de produção antes de direcionar os usuários para ela. O espelhamento de tráfego (shadowing) copia solicitações ativas para um serviço secundário sem afetar o caminho da solicitação principal. O serviço espelhado processa o tráfego real, mas descarta as respostas. Isso permite comparar comportamento, taxas de erro e latência entre versões sem impacto aos usuários.

O Service Mesh (ASM) oferece suporte ao espelhamento de tráfego por meio dos recursos DestinationRule e VirtualService do Istio.

Pré-requisitos

Conclua as etapas de preparação e implante os serviços helloworld e sleep. Para mais informações, consulte Preparações.

Etapa 1: Verifique o roteamento de base

Antes de configurar o espelhamento, confirme se tanto helloworld-v1 quanto helloworld-v2 recebem tráfego.

  1. Use o kubectl para conectar-se ao cluster do Container Service for Kubernetes (ACK) com base nas informações do arquivo kubeconfig e abra um shell no pod sleep:

    kubectl exec -it deploy/sleep -- sh
  2. Envie várias solicitações ao serviço helloworld:

    curl helloworld:5000/hello

    Ambas as versões respondem aleatoriamente:

    Hello version: v2, instance: helloworld-v2-6b96c5684-4****
    Hello version: v1, instance: helloworld-v1-6d77f4c4cf-p****
  3. Verifique os logs do helloworld-v2 para estabelecer uma linha de base. Registre a saída atual dos logs para comparação após a configuração do espelhamento:

    kubectl logs deploy/helloworld-v2 -c helloworld

Etapa 2: Configure o espelhamento de tráfego

Crie uma regra de destino e um serviço virtual que encaminhem todas as solicitações ao helloworld-v1 e, simultaneamente, espelhem uma cópia de cada solicitação ao helloworld-v2.

Crie uma regra de destino

Defina subconjuntos para v1 e v2. Para mais informações, consulte Gerencie regras de destino.

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: helloworld
  namespace: default
spec:
  host: helloworld
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2

Crie um serviço virtual

Encaminhe todo o tráfego ao subconjunto v1 e espelhe-o no subconjunto v2. O campo mirror especifica o alvo do espelhamento. Para mais informações, consulte Gerencie serviços virtuais.

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: helloworld-vs
  namespace: default
spec:
  hosts:
    - helloworld
  http:
    - mirror:                   # Mirror traffic to v2
        host: helloworld
        subset: v2
      route:
        - destination:          # Route live traffic to v1
            host: helloworld
            subset: v1

Etapa 3: Verifique o espelhamento

Confirme que apenas a v1 responde ao tráfego ativo

  1. Use o kubectl para conectar-se ao cluster ACK com base nas informações do arquivo kubeconfig e abra um shell no pod sleep:

    kubectl exec -it deploy/sleep -- sh
  2. Envie uma solicitação ao serviço helloworld:

    curl helloworld:5000/hello

    Apenas o helloworld-v1 responde:

    Hello version: v1, instance: helloworld-v1-6d77f4c4cf-p****

Confirme que a v2 recebe o tráfego espelhado

Verifique os logs do pod helloworld-v2 para confirmar o recebimento da solicitação espelhada:

kubectl logs deploy/helloworld-v2 -c helloworld

Compare a saída com a linha de base registrada na Etapa 1. Novas entradas nos logs de acesso confirmam que o helloworld-v2 recebe tráfego espelhado.

Você também pode visualizar a topologia do serviço no console do ASM. O gráfico de topologia mostra o tráfego espelhado fluindo para o helloworld-v2. Para mais detalhes, consulte Usar a Topologia de Malha para visualizar a topologia de um aplicativo.

Mesh topology showing mirrored traffic to helloworld-v2

Próximos passos