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.

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

Os planos de controle gerenciados por asmcli não são compatíveis com a desinstalação, mas clusters com planos de controle gerenciados por asmcli --managed ou pela API do mesh são compatíveis. Se você não tiver certeza sobre o 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 comandos a seguir 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 o recurso de 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 e exclua os secrets que precisam de limpeza:

    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 mostrar os rótulos de namespace:

     kubectl get namespace YOUR_NAMESPACE --show-labels
    

    O resultado será o seguinte:

     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-a:

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

       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 não há proxies conectados 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 do recurso 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 interno. Se o problema persistir, entre em contato com o suporte.
  9. Opcionalmente, remova CRs e 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 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). Pule esta etapa se você excluir o namespace istio-system.

      kubectl delete configmap istio-RELEASE_CHANNEL -n istio-system
      

      Substitua RELEASE_CHANNEL pelo 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 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 Managed Cloud Service Mesh.

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

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

    FLEET_PROJECT_ID é o ID do projeto host da frota.

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

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

    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 de 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.