Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Migração canário in-place do Istio para o ASM

Última atualização: Oct 31, 2026

Service Mesh (ASM) oferece suporte à migração direta de clusters que usam o Istio Community Edition para o ASM. Este tópico descreve como migrar um cluster que usa o Istio Community Edition para o ASM.

Processo de migração

Para migrar um cluster que usa o Istio para o ASM, você deve concluir as operações nas quatro fases a seguir.

image

Durante a fase Migrating, o comportamento de injeção no cluster ainda segue as regras de injeção configuradas para o Istio, e os sidecars do Istio são injetados por padrão. Em um namespace com injeção de sidecar ativada, modifique o rótulo do pod para especificar explicitamente que o proxy de malha do ASM será injetado na carga de trabalho.

image

Pré-requisitos

  • O cluster Kubernetes que você deseja migrar deve atender às seguintes condições:

    • O cluster executa o Kubernetes 1.21 ou posterior. Se o cluster executar uma versão anterior e for um cluster do Alibaba Cloud Container Service for Kubernetes (ACK), consulte Atualizar um cluster manualmente.

    • O Istio 1.10 ou posterior está instalado no cluster.

  • Crie uma instância do ASM da versão 1.24 ou posterior para a migração. Para obter instruções, consulte Criar uma instância do ASM.

Procedimento

Etapa 1: Adicionar o cluster a ser migrado ao ASM

Adicione um cluster do Alibaba Cloud Container Service for Kubernetes (ACK) com o Istio instalado, ou um cluster autogerenciado registrado no ACK, ao ASM. Para obter instruções, consulte Adicionar um cluster a uma instância do ASM. Ao adicionar o cluster, selecione a opção "Ignore istio-system Namespace Check". Se o cluster a ser migrado não estiver registrado no ACK, use o recurso de cluster registrado do ACK One para registrá-lo no ACK e, em seguida, adicione o cluster ao ASM no console do ASM.

Depois que o cluster a ser migrado for adicionado ao ASM, um recurso ASMMigrateFromIstio será criado automaticamente na instância do ASM. Esse recurso controla todo o processo de migração. Execute o comando a seguir para visualizar o conteúdo desse recurso.

kubectl --kubeconfig=${ASM_KUBECONFIG} get asmmigratefromistio

Saída esperada:

apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMMigrateFromIstio
metadata:
  name: default
spec:
  desiredState: Init
  retryCounter: 0
  advancedOptions:
    stopIstioSystemInjectionDisabling: false
status:
  message: ""
  retryCounter: 0
  state: Init

A tabela a seguir descreve alguns itens de configuração desse recurso.

Campo

Tipo

Descrição

Valores válidos

spec.desiredState

string

O estado de migração de destino. Modifique esse valor para entrar em um estado de migração especificado.

Importante

Esse valor só pode ser alterado na seguinte ordem fixa:

Init -> SetupIstioForMigrate -> Migrating -> Finished.

  • Init (o estado atual)

  • SetupIstioForMigrate

  • Migrating

  • Finished

spec.retryCounter

int32

Durante uma troca de estado, o plano de controle do ASM realiza as verificações necessárias para confirmar que os critérios para sair do estado atual e entrar no novo estado foram atendidos. Essa verificação é executada automaticamente após a modificação do desiredState. Se a verificação falhar, ajuste o estado com base na mensagem retornada e, em seguida, modifique esse valor para acionar uma nova verificação.

0 a 2147483647

spec.advancedOptions

object

As opções avançadas.

spec.advancedOptions.stopIstioSystemInjectionDisabling

bool

Especifica se deve desativar a sincronização de rótulos do namespace istio-system pelo ASM. Se existir um gateway leste-oeste no cluster de destino, defina esse valor como true.

  • true: desativa a sincronização do rótulo istio-injection: disable do namespace istio-system pelo ASM.

  • false: o valor padrão. Ativa a sincronização do rótulo istio-injection: disable do namespace istio-system pelo ASM.

status.retryCounter

int32

Indica se o retryCounter foi reconciliado corretamente. Se a última modificação foi reconciliada, esse valor é igual a spec.retryCounter.

Somente leitura

status.state

string

O estado atual real. Após uma troca de estado, se o estado for alterado para o estado especificado por spec.desiredState, o valor de status.state será igual ao valor de spec.desiredState.

Somente leitura

status.message

string

Se a troca de estado falhar, esse campo indicará o motivo da falha. Se esse campo não estiver vazio, resolva o problema com base na mensagem fornecida e, em seguida, modifique spec.retryCounter para acionar uma nova tentativa após a resolução do problema.

Somente leitura

Troca de estado do ASMMigrateFromIstio

Quando os preparativos de migração estiverem prontos para a próxima fase, alterne manualmente o estado do recurso ASMMigrateFromIstio. Por exemplo, se a fase atual for Init, alternar o estado para SetupIstioForMigrate indica que a migração entrou na próxima fase.

A seguir estão os comandos de exemplo para alternar para cada fase.

  • SetupIstioForMigrate

    kubectl --kubeconfig=${ASM_KUBECONFIG} patch asmmigratefromistio default --type='merge' -p '{"spec":{"desiredState":"SetupIstioForMigrate"}}'
  • Migrating

    kubectl --kubeconfig=${ASM_KUBECONFIG} patch asmmigratefromistio default --type='merge' -p '{"spec":{"desiredState":"Migrating"}}'
  • Finished

    kubectl --kubeconfig=${ASM_KUBECONFIG} patch asmmigratefromistio default --type='merge' -p '{"spec":{"desiredState":"Finished"}}'

Para verificar se o estado foi alternado para SetupIstioForMigrate, execute o comando a seguir.

kubectl get asmigratefromistio default -o yaml

Saída esperada:

apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMMigrateFromIstio
metadata:
  name: default
spec:
  desiredState: SetupIstioForMigrate
  retryCounter: 0
status:
  message: ""
  retryCounter: 0
  state: SetupIstioForMigrate

status.state é SetupIstioForMigrate, o que indica que o estado foi alternado.

Nota

Se o valor de status.state não for alternado conforme esperado, resolva o problema com base na mensagem em status.message e, em seguida, incremente o valor de spec.retryCounter em 1 para tentar novamente após a resolução do problema.

Configurações adicionais para clusters com gateways leste-oeste do Istio ativados

Por padrão, o ASM desativa a injeção automática para o namespace istio-system. No entanto, após a criação de um pod de gateway leste-oeste do Istio, sua imagem precisa ser substituída manualmente pelo MutatingWebhook. Esse recurso exige que a injeção não seja desativada explicitamente para o namespace istio-system. Portanto, se os gateways leste-oeste estiverem ativados no cluster, execute o comando a seguir para que o plano de controle do ASM não desative forçadamente a injeção no namespace istio-system.

kubectl --kubeconfig=${ASM_KUBECONFIG} patch asmmigratefromistio default --type='merge' -p '{"spec":{"advancedOptions":{"disableIstioSystemLabelReconciliation": true}}}' 

Em seguida, remova manualmente os rótulos que o ASM já sincronizou com o istio-system:

  1. Edite a configuração do namespace istio-system.

    kubectl --kubeconfig=${ACK_cluster_kubeconfig_file_path} edit ns istio-system
  2. Remova manualmente o rótulo istio-injection: disable e, em seguida, salve e saia.

Etapa 2: Configurar o Istio para a migração

  1. Alterne o estado para SetupIstioForMigrate.

    Importante

    Após executar esse comando, o ASM aplica as configurações necessárias ao Istiod, fazendo com que o Istiod realize uma reinicialização contínua para atender aos requisitos de migração.

  2. Para garantir que os sidecars do Istio realizem corretamente a comunicação mTLS com os sidecars do ASM durante a migração, o ASM adiciona as seguintes configurações ao Istio após a entrada nessa fase:

    defaultConfig:
      proxyMetadata:
        PROXY_CONFIG_XDS_AGENT: "true"

    Reinicie também manualmente todas as cargas de trabalho nas quais os sidecars do Istio foram injetados, para que essa configuração tenha efeito em todas elas. Execute o comando a seguir para verificar se um pod específico atende à condição:

    kubectl get pod ${POD_name} -o yaml|grep PROXY_CONFIG_XDS_AGENT

    Se a saída não estiver vazia, a carga de trabalho atende à condição. Depois que todas as cargas de trabalho com sidecars do Istio injetados no cluster atenderem a essa condição, entre no estado Migrating.

Etapa 3: Iniciar a migração

Nesta etapa, você entra na fase Migrating. Durante essa fase, escolha injetar um sidecar do Istio ou o proxy de malha do ASM em uma carga de trabalho, até que todos os sidecars do Istio sejam substituídos pelo proxy de malha do ASM.

  1. Alterne o estado para Migrating. Após entrar no estado Migrating, aplique primeiro todas as APIs do Istio ao ASM. Em seguida, siga estas etapas para migrar os sidecars do Istio, os gateways de entrada, os gateways de saída e os gateways leste-oeste para os componentes correspondentes do ASM.

  2. (Opcional) Implante o gateway entre clusters do ASM.

    No ASM, as cargas de trabalho nas quais o proxy de malha foi injetado usam automaticamente o gateway entre clusters do ASM para comunicação entre clusters, que corresponde ao gateway leste-oeste do Istio. Portanto, se os gateways leste-oeste estiverem ativados, implante o gateway entre clusters do ASM antes de injetar o proxy de malha do ASM em qualquer carga de trabalho. Implantar o gateway primeiro garante que a comunicação entre clusters funcione corretamente após a substituição dos sidecars do Istio pelo proxy de malha do ASM.

    No console do ASM, configure o nome de rede correspondente para cada cluster com base na configuração de rede atual do cluster Istio. Para clusters nos quais os gateways leste-oeste do Istio estão implantados, selecione a opção para ativar o gateway entre clusters. Para obter instruções, consulte Especificar uma configuração de rede para um cluster e ativar o proxy de malha entre clusters.

    Após a ativação do proxy de malha entre clusters, o sistema cria automaticamente um Service do tipo LoadBalancer, o que gera custos de instância do Classic Load Balancer (CLB). Após concluir a configuração, clique em OK.

    Nota

    A configuração deve corresponder à configuração do Istio. Por exemplo, se o Istio configurar network-1 para o cluster a e network-2 para o cluster b, o ASM deve usar a mesma configuração.

  3. Migre os sidecars do Istio para o proxy de malha do ASM.

    $ kubectl --kubeconfig=${K8s_cluster_kubeconfig_file_path} -n ${namespace} patch ${deployment_name} --type='merge' -p '{"spec":{"template":{"metadata":{"labels":{"sidecar.asm.aliyun.com/inject":"true"}}}}}'
    Importante

    Como esse comando modifica o rótulo da carga de trabalho, a carga de trabalho realiza uma reinicialização contínua. A perda de tráfego durante esse processo depende de três fatores: se o protocolo da aplicação suporta desligamento graceful (HTTP/HTTP2/GRPC), se o desligamento graceful está configurado corretamente para o sidecar do Istio e se a aplicação retorna todas as requisições dentro do período de espera do desligamento graceful. Sempre que possível, realize essa operação em horários de menor movimento.

  4. Migre o gateway de entrada do Istio para o gateway de entrada do ASM.

    Migre o gateway de entrada do Istio para o gateway de entrada do ASM de forma suave. Para obter instruções, consulte Migrar tráfego de um gateway de entrada do Istio autogerenciado para um gateway de entrada do ASM.

  5. Migre o gateway de saída do Istio para o gateway de saída do ASM. Se os gateways de saída já estiverem ativados no cluster a ser migrado, execute as operações a seguir para migrá-los.

    1. Crie um gateway de saída no ASM. Para obter instruções, consulte Criar um gateway de saída. Crie outros recursos conforme necessário (por exemplo, um ServiceEntry para registrar um serviço externo, uma regra de gateway para ativar uma porta de encaminhamento para o gateway de saída e um serviço virtual para direcionar o tráfego para o gateway de saída. Para obter instruções, consulte Gerenciar tráfego de saída para serviços externos).

    2. Modifique os serviços virtuais dos serviços externos a serem migrados para que apontem para o gateway de saída do ASM e defina os pesos desejados.

      O exemplo a seguir mostra a configuração desse serviço virtual. Para o exemplo completo, consulte Egress gateway for HTTP traffic.

      apiVersion: networking.istio.io/v1
      kind: VirtualService
      metadata:
        name: direct-cnn-through-egress-gateway
      spec:
        hosts:
        - edition.cnn.com
        gateways:
        - istio-egressgateway
        - mesh
        http:
        - match:
          - gateways:
            - mesh
            port: 80
          route:
          - destination:
              host: istio-egressgateway.istio-system.svc.cluster.local
              port:
                number: 80
            weight: 99
          - destination: # Add a destination that points to the egress gateway, and adjust its weight as needed
              host: asm-egressgateway.istio-system.svc.cluster.local # Assume that your ASM egress gateway is named asm-egressgateway
              port:
                number: 80
            weight: 1

      Neste YAML, o tráfego destinado a edition.cnn.com é roteado para o gateway de entrada do Istio e o gateway de saída do ASM na proporção de 99:1. Ajuste gradualmente essa proporção conforme necessário, até que todo o tráfego seja migrado para o gateway de saída do ASM. Verifique os logs de acesso do gateway de saída do Istio para determinar se o tráfego ainda passa pelo gateway de saída do Istio.

Etapa 4: Concluir a migração

Certifique-se de que todas as tarefas a seguir foram concluídas antes de prosseguir para a próxima fase da migração.

  • Todos os sidecars do Istio foram removidos.

  • Nenhum tráfego passa por nenhum gateway leste-oeste, gateway de entrada ou gateway de saída do Istio.

  • Todas as configurações de API do Istio foram importadas para o ASM.

  • As cargas de trabalho nas quais o proxy de malha do ASM foi injetado se comportam conforme o esperado.

Após confirmar que tudo está correto, execute o comando istioctl da versão correspondente para desinstalar o Istio do cluster:

Nota

O istioctl varia entre versões. Use a ferramenta istioctl correspondente à versão instalada para desinstalar o Istio, de modo que nenhum recurso seja deixado para trás ou excluído por engano.

$ istioctl --kubeconfig=${K8s_cluster_kubeconfig_file_path} uninstall --purge

Após a conclusão da desinstalação, alterne o estado para Finished. Se a alternância falhar, limpe os recursos residuais do Istio com base na mensagem em status.message e, em seguida, incremente o valor de spec.retryCounter em 1 para tentar novamente até que status.state exiba Finished. A migração está concluída.