Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Migrar tráfego do Nginx Ingress Controller para um gateway de entrada

Última atualização: Jun 28, 2026

Ao adotar o Service Mesh (ASM) para gerenciamento de tráfego, os serviços existentes atrás do Nginx Ingress Controller devem continuar a receber tráfego sem interrupções. O ASM permite executar ambos os gateways atrás da mesma instância do Classic Load Balancer (CLB) e transferir o tráfego gradualmente por meio de roteamento baseado em peso. Assim, você valida cada etapa e reverte instantaneamente se necessário.

Como funciona

No Nginx Ingress Controller, um único recurso Ingress gerencia tanto a configuração do listener (portas, hosts, TLS) quanto as regras de roteamento (caminhos, backends). O Istio separa essas responsabilidades em dois recursos:

  • Gateway -- Define a camada de infraestrutura: quais portas expor, quais protocolos aceitar e quais hosts atender.

  • VirtualService -- Define a camada de roteamento: como corresponder às solicitações recebidas e para onde enviá-las.

Durante a migração, o Nginx Ingress Controller e o gateway de entrada ASM compartilham a mesma instância CLB. A divisão de tráfego baseada em peso permite transferir o tráfego incrementalmente, verificar o comportamento em cada etapa e reverter definindo o peso como 0.

Traffic flow during migration

Pré-requisitos

Antes de começar, verifique se você tem:

  • Uma instância ASM da Enterprise Edition ou Ultimate Edition, executando a versão mais recente. Consulte Criar uma instância ASM

  • Um cluster Container Service for Kubernetes (ACK) adicionado à instância ASM. Consulte Adicionar um cluster a uma instância ASM

  • O ID da instância CLB e os IDs dos grupos vServer da sua configuração existente do Nginx Ingress Controller

  • O algoritmo de agendamento do CLB definido como weighted round-robin (WRR)

Etapa 1: Criar um gateway de entrada que compartilha o CLB existente

Crie um gateway de entrada ASM que reutilize a instância CLB já associada ao Nginx Ingress Controller. Isso permite que ambos os gateways coexistam atrás do mesmo balanceador de carga durante a migração.

Adicione as seguintes anotações de serviço ao YAML do gateway para vincular o gateway de entrada ao seu CLB existente:

Anotação

Finalidade

Valor de exemplo

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id

Instância CLB a ser reutilizada

"lb-xxxxx"

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners

Indica se deve sobrescrever os listeners existentes do CLB. Defina como false para preservar os listeners do Nginx Ingress.

'false'

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port

Grupos vServer a serem vinculados, no formato <vserver-group-id>:<port>. Separe várias entradas com vírgulas.

"${YOUR_VGROUP_ID}:80"

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight

Peso do tráfego para o gateway de entrada. Defina como 0 quando o roteamento ainda não estiver configurado ou quando ocorrerem problemas — o CLB não envia tráfego para o gateway com peso 0.

"0"

Exemplo de configuração do gateway:

serviceAnnotations:
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "lb-xxxxx"
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: 'false'
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: "${YOUR_VGROUP_ID}:80"
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "60"

Substitua os valores de espaço reservado:

Espaço reservado

Descrição

Onde encontrar

lb-xxxxx

ID da instância CLB

Console CLB > Instances

${YOUR_VGROUP_ID}

ID do grupo vServer

Console CLB > vServer Groups

Nota

Se você definir o peso como 0, o gateway de entrada deixará de receber tráfego. É possível definir o peso como 0 quando as regras de roteamento não tiverem sido configuradas ou quando ocorrerem exceções.

Nota

Para obter detalhes sobre a reutilização de instâncias CLB criadas com o tipo de serviço LoadBalancer, consulte FAQ.

Verificar o gateway

Confirme se o pod do gateway de entrada está em execução e se a instância CLB mostra os novos membros do grupo vServer:

kubectl get pods -n istio-system -l istio=ingressgateway

Saída esperada:

NAME                                   READY   STATUS    RESTARTS   AGE
istio-ingressgateway-xxxx-xxxxx        1/1     Running   0          1m

Etapa 2: Traduzir regras de Ingress para VirtualService e DestinationRule do Istio

Converta cada recurso Nginx Ingress em um par de recursos Istio: um Gateway (já criado na Etapa 1) e um VirtualService. Caso precise de políticas de tráfego, como configurações de pool de conexões ou detecção de outliers, crie também um DestinationRule.

Exemplo: regra de Ingress baseada em rewrite

Ingress original:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: helloworld
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
    - http:
        paths:
          - backend:
              serviceName: helloworld
              servicePort: 80
            path: /helloworld(/|$)(.*)
      host: example.com

VirtualService equivalente:

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: example-vs
spec:
  gateways:
  - istio-system/ingressgateway    # Reference your gateway name
  hosts:
  - example.com
  http:
  - name: route-helloworld
    match:
    - uri:
        prefix: /helloworld/
    - uri:
        prefix: /helloworld
    rewrite:
      uri: /
    route:
    - destination:
        host: helloworld
        port:
          number: 80

Principais diferenças em relação ao recurso Ingress:

  • A anotação rewrite-target torna-se o campo rewrite.uri no VirtualService.

  • O caminho regex /helloworld(/|$)(.*) transforma-se em duas correspondências explícitas de prefixo: /helloworld/ e /helloworld.

  • O host e as regras de roteamento são definidos separadamente (Gateway vs. VirtualService), em vez de em um único recurso.

Importante

Implante os recursos VirtualService e DestinationRule no mesmo namespace do Serviço Kubernetes correspondente. Se você os implantar em um namespace diferente, use o formato de nome de domínio totalmente qualificado (FQDN) para destination.host (por exemplo, helloworld.default.svc.cluster.local).

Verificar as rotas

Aplique o VirtualService e confirme se as rotas foram aceitas:

kubectl apply -f virtualservice.yaml
kubectl get virtualservice example-vs -o yaml

Verifique se a seção status não apresenta erros ou avisos.

Etapa 3: Verificar as configurações

Valide se as configurações são válidas e estão em vigor verificando o fluxo de tráfego. Crie uma instância CLB, envie tráfego para essa instância e verifique se o fluxo atende às expectativas. Para mais informações, consulte Fluxo de tráfego.

Etapa 4: Transferir o tráfego gradualmente

Após validar a configuração de roteamento, aumente o peso do gateway de entrada incrementalmente para migrar o tráfego:

  1. Comece com um peso baixo (por exemplo, 1) e monitore a ocorrência de erros.

  2. Aumente o peso em etapas — por exemplo, 1 -> 10 -> 30 -> 60 -> 100.

  3. Em cada etapa, verifique se a latência, as taxas de erro e o conteúdo da resposta permanecem consistentes.

  4. Depois que todo o tráfego for roteado pelo gateway de entrada, defina o peso do Nginx Ingress Controller como 0.

Como ajustar pesos

Componente

Como ajustar

Gateway de entrada ASM

Edite a anotação service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight na configuração do gateway.

Nginx Ingress Controller

Edite a anotação service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight no Serviço Kubernetes relacionado. Se não existir nenhuma anotação de peso, ajuste o peso no console CLB.

Importante

O algoritmo de agendamento do CLB deve estar definido como weighted round-robin (WRR) para que a divisão de tráfego baseada em peso funcione.

Próximas etapas

Depois que todo o tráfego fluir pelo gateway de entrada ASM:

  • Configure o término TLS no gateway de entrada ASM

  • Configure o monitoramento e logs de acesso para o gateway de entrada

  • Remova a implantação do Nginx Ingress Controller após confirmar a operação estável

  • Explore os recursos de gerenciamento de tráfego do Istio, como injeção de falhas, circuit breaking e canary releases