Desinstalar o Cloud Service Mesh gerenciado

Nesta página, explicamos como desinstalar o Cloud Service Mesh gerenciado. Se você estiver desinstalando o Cloud Service Mesh no cluster, siga o guia de desinstalação no cluster em vez disso.

Se você estiver usando uma configuração legada com vários planos de controle provisionados, seguir estas instruções removerá todos os planos de controle provisionados.

Os planos de controle gerenciados por asmcli não são compatíveis com a desinstalação, mas os clusters que têm planos de controle gerenciados por asmcli --managed ou pela API de malha são compatíveis. Se você não tiver certeza do plano de controle, execute o seguinte comando:

kubectl get controlplanerevisions -n istio-system -l 'app.kubernetes.io/created-by!=asmcli'

A desinstalação é compatível se algum item estiver listado na saída.

Desinstalar o Cloud Service Mesh

Use os seguintes comandos para desinstalar todos os componentes do Cloud Service Mesh.

  1. Para evitar a interrupção do tráfego de aplicativos:

    • Faça o downgrade de qualquer política STRICT mTLS para PERMISSIVE.
    • Remova qualquer AuthorizationPolicy que possa bloquear o tráfego.
  2. Desative vários clusters se houver outros clusters executando a descoberta de endpoints no cluster que você está desinstalando.

    kubectl patch configmap/asm-options -n istio-system --type merge -p '{"data":{"multicluster_mode":"manual"}}'
    
  3. Encontre os secrets que precisam de limpeza e exclua-os:

    kubectl get secrets -n istio-system -l istio/multiCluster=true
    
    kubectl delete secret SECRET_NAME
    

    Em que SECRET_NAME é o nome do secret. Repita essa etapa para cada secret listado.

  4. Desative a injeção automática de sidecar nos namespaces, se estiver ativada. Execute o seguinte comando para exibir rótulos de namespace:

     kubectl get namespace YOUR_NAMESPACE --show-labels
    

    O resultado será assim:

     NAME   STATUS   AGE     LABELS
     demo   Active   4d17h   istio.io/rev=asm-181-5

    1. Se você vir istio.io/rev= na saída na coluna LABELS, remova-o:

       kubectl label namespace YOUR_NAMESPACE istio.io/rev-
      
    2. Se você vir istio-injection na saída na coluna LABELS, remova-o:

       kubectl label namespace YOUR_NAMESPACE istio-injection-
      
    3. Se você não vir os rótulos istio.io/rev ou istio-injection, a injeção automática não foi ativada no namespace.

  5. Reinicie as cargas de trabalho que tenham arquivos secundários injetados para remover os proxies.

  6. Verifique se nenhum proxy está conectado ao plano de controle gerenciado:

      kubectl get pods --all-namespaces -o json | jq -r '
      .items[] |
      select(
         .spec.containers[].env[]? |
         select(.name == "PROXY_CONFIG" and (.value | contains("\"discoveryAddress\":\"meshconfig.googleapis.com:443\"")))
      ) |
      "\(.metadata.namespace)\t\(.metadata.name)"
      '
    
  7. Atualize o gerenciamento de especificação de associação de recursos de malha para not-installed:

     gcloud alpha container fleet mesh update \
       --project FLEET_PROJECT_ID \
       --memberships MEMBERSHIP_NAME \
       --location MEMBERSHIP_LOCATION \
       --management not-installed
    

    Substitua:

    • MEMBERSHIP_NAME é o nome da associação listado quando você verificou que o cluster estava registrado na frota.
    • MEMBERSHIP_LOCATION é o local da assinatura (uma região ou global).
  8. Verifique se o estado de associação do recurso de malha para o estado do plano de controle é DISABLED.

    gcloud container fleet mesh describe --project FLEET_PROJECT_ID
    

    A saída é semelhante a:

     servicemesh:
       controlPlaneManagement:
         details:
         - code: DISABLED
           details: Control Plane Management is not enabled.
         state: DISABLED
       dataPlaneManagement:
         details:
         - code: DISABLED
           details: Data Plane Management is not enabled.
         state: DISABLED
     state:
       description: 'Please see https://cloud.google.com/service-mesh/docs/install for instructions to onboard to Anthos Service Mesh.'
    ...
    

    Se o estado do plano de controle for DEPROVISIONING, verifique novamente após alguns minutos.

    1. Se o estado do plano de controle for STALLED, a desinstalação será bloqueada devido a uma condição de erro interna. Se o problema persistir, entre em contato com o suporte.
  9. Opcionalmente, remova os CRs do Istio, os CRDs do Istio, o configmap istio-(revision), o configmap asm-options e o namespace istio-system para remover a malha de serviço do cluster ou usá-los em outra malha de serviço compatível com a API do Istio.

    1. Remova os CRs do Istio:

      kubectl delete gateways,virtualservices,destinationrules,serviceentries,envoyfilters,sidecars,peerauthentications,requestauthentications,authorizationpolicies,telemetries,wasmplugins,proxyconfigs --all --all-namespaces
      
    2. Remova os CRDs do Istio:

      kubectl get crds -o name | grep --color=never 'istio.io' | xargs kubectl delete
      
    3. Remova o configmap istio-(revision). Você pode pular essa etapa se excluir o namespace istio-system.

      kubectl delete configmap istio-RELEASE_CHANNEL -n istio-system
      

      Substitua RELEASE_CHANNEL pelo seu canal de lançamento (asm-managed, asm-managed-stable ou asm-managed-rapid).

    4. Remova o configmap asm-options:

      kubectl delete configmap asm-options -n istio-system
      
    5. Remova o namespace istio-system:

      kubectl delete namespace istio-system --ignore-not-found=true
      
    6. Verifique se as exclusões foram feitas:

      kubectl get ns
      

      A saída deve indicar um estado Terminating e retornar conforme mostrado. Caso contrário, talvez seja necessário excluir manualmente os recursos restantes nos namespaces e tentar novamente.

      NAME                 STATUS       AGE
      istio-system         Terminating  71m
      
  10. Se o CNI gerenciado estiver ativado no cluster(o padrão para instalações modernas), limpe os recursos do CNI:

    • Clusters padrão:verifique e exclua o ConfigMap istio-cni-plugin-config:

      1. Verifique se o ConfigMap istio-cni-plugin-config está presente:

           kubectl get configmap istio-cni-plugin-config -n kube-system
        
      2. Se estiver presente, exclua o ConfigMap istio-cni-plugin-config:

           kubectl delete configmap istio-cni-plugin-config -n kube-system
        
    • Clusters do Autopilot:o GKE Autopilot restringe modificações nos recursos no namespace kube-system. Se você estiver mantendo o cluster do Autopilot após desinstalar o Cloud Service Mesh gerenciado, entre em contato com o suporte para que ele remova o istio-cni-plugin-config ConfigMap de kube-system.

  11. Se você estiver usando o Certificate Authority Service, limpe as permissões e o pool de ACs criados ao configurar o Certificate Authority Service para o Cloud Service Mesh gerenciado.

  12. Se você ativou a configuração padrão da frota do Cloud Service Mesh gerenciado e quer desativá-la para clusters futuros, desative-a. Você pode pular essa etapa se estiver desinstalando apenas de um único cluster.

     gcloud container hub mesh disable --fleet-default-member-config --project FLEET_PROJECT_ID
    

    Em que FLEET_PROJECT_ID é o ID do projeto host da frota.

  13. Se você planeja parar de usar o Cloud Service Mesh no nível da frota, desative o recurso de malha de serviço para o projeto host da frota.

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

    Em que FLEET_PROJECT_ID é o ID do projeto host da frota.

Após a conclusão dessas etapas, todos os componentes do Cloud Service Mesh, incluindo proxies, autoridades certificadoras e papéis e vinculações do RBAC, serão removidos sistematicamente do cluster. Durante o processo de instalação, uma conta de serviço do Google recebe as permissões necessárias para estabelecer os recursos da malha de serviço no cluster. Essas instruções de desinstalação não revogam essas permissões, permitindo uma reativação perfeita do Cloud Service Mesh no futuro.