Disinstallare Cloud Service Mesh gestito

Questa pagina spiega come disinstallare Cloud Service Mesh gestito. Se stai disinstallando Cloud Service Mesh in-cluster, segui invece la guida alla disinstallazione in-cluster.

Se utilizzi una configurazione legacy con più control plane di cui è stato eseguito il provisioning, seguendo queste istruzioni rimuoverai tutti i control plane di cui è stato eseguito il provisioning.

I control plane gestiti da asmcli non sono supportati per la disinstallazione, ma sono supportati i cluster con control plane gestiti da asmcli --managed o dall'API Mesh. Se non hai la certezza del control plane, esegui il comando seguente:

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

La disinstallazione è supportata se è presente un elemento elencato nell'output.

Disinstallare Cloud Service Mesh

Utilizza i seguenti comandi per disinstallare tutti i componenti di Cloud Service Mesh.

  1. Per evitare interruzioni del traffico delle applicazioni:

    • Esegui il downgrade di tutte le policy mTLS STRICT a PERMISSIVE.
    • Rimuovi qualsiasi AuthorizationPolicy che potrebbe bloccare il traffico.
  2. Disabilita il multicluster se sono presenti altri cluster che eseguono l'individuazione degli endpoint nel cluster che stai disinstallando.

    kubectl patch configmap/asm-options -n istio-system --type merge -p '{"data":{"multicluster_mode":"manual"}}'
    
  3. Trova i secret che richiedono la pulizia, quindi eliminali:

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

    Dove SECRET_NAME è il nome del secret. Ripeti questo passaggio per ogni secret elencato.

  4. Disabilita l'inserimento automatico di sidecar negli spazi dei nomi, se è abilitato. Esegui il comando seguente per visualizzare le etichette degli spazi dei nomi:

     kubectl get namespace YOUR_NAMESPACE --show-labels
    

    L'output è simile al seguente:

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

    1. Se vedi istio.io/rev= nell'output nella colonna LABELS, rimuovilo:

       kubectl label namespace YOUR_NAMESPACE istio.io/rev-
      
    2. Se vedi istio-injection nell'output nella colonna LABELS, rimuovilo:

       kubectl label namespace YOUR_NAMESPACE istio-injection-
      
    3. Se non vedi le etichette istio.io/rev o istio-injection, l'inserimento automatico non è stato abilitato nello spazio dei nomi.

  5. Riavvia i carichi di lavoro in cui sono stati inseriti i sidecar per rimuovere i proxy.

  6. Verifica che nessun proxy sia connesso al control plane gestito:

      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. Aggiorna la gestione delle specifiche di appartenenza alla funzionalità mesh su not-installed:

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

    Sostituisci quanto segue:

    • MEMBERSHIP_NAME è il nome dell'appartenenza elencato quando hai verificato che il cluster fosse registrato nel parco risorse.
    • MEMBERSHIP_LOCATION è la località dell'appartenenza (una regione o global).
  8. Verifica che lo stato dell'appartenenza alla funzionalità mesh per lo stato del control plane sia DISABLED.

    gcloud container fleet mesh describe --project FLEET_PROJECT_ID
    

    L'output è simile al seguente:

     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 lo stato del control plane è DEPROVISIONING, ricontrolla dopo qualche minuto.

    1. Se lo stato del control plane è STALLED, l'operazione di disinstallazione è bloccata a causa di una condizione di errore interno. Se il problema persiste, contatta l'assistenza.
  9. (Facoltativo) Rimuovi i CR Istio, i CRD Istio, la ConfigMap istio-(revision), la ConfigMap asm-options e lo spazio dei nomi istio-system per rimuovere il mesh di servizi dal cluster o utilizzarli in un altro mesh di servizi compatibile con l'API Istio.

    1. Rimuovi i CR Istio:

      kubectl delete gateways,virtualservices,destinationrules,serviceentries,envoyfilters,sidecars,peerauthentications,requestauthentications,authorizationpolicies,telemetries,wasmplugins,proxyconfigs --all --all-namespaces
      
    2. Rimuovi i CRD Istio:

      kubectl get crds -o name | grep --color=never 'istio.io' | xargs kubectl delete
      
    3. Rimuovi la ConfigMap istio-(revision). Puoi saltare questo passaggio se elimini lo spazio dei nomi istio-system.

      kubectl delete configmap istio-RELEASE_CHANNEL -n istio-system
      

      Sostituisci RELEASE_CHANNEL con il tuo canale di rilascio (asm-managed, asm-managed-stable o asm-managed-rapid).

    4. Rimuovi la ConfigMap asm-options:

      kubectl delete configmap asm-options -n istio-system
      
    5. Rimuovi lo spazio dei nomi istio-system:

      kubectl delete namespace istio-system --ignore-not-found=true
      
    6. Verifica se le eliminazioni sono andate a buon fine:

      kubectl get ns
      

      L'output deve indicare uno stato Terminating e restituire i valori come mostrato, altrimenti potresti dover eliminare manualmente le risorse rimanenti negli spazi dei nomi e riprovare.

      NAME                 STATUS       AGE
      istio-system         Terminating  71m
      
  10. Se CNI gestito è stato abilitato nel cluster(l'impostazione predefinita per le installazioni moderne), libera spazio dalle risorse CNI:

    • Cluster standard: controlla la presenza della ConfigMap istio-cni-plugin-config ed eliminala:

      1. Verifica se è presente la ConfigMap istio-cni-plugin-config:

           kubectl get configmap istio-cni-plugin-config -n kube-system
        
      2. Se presente, elimina la ConfigMap istio-cni-plugin-config:

           kubectl delete configmap istio-cni-plugin-config -n kube-system
        
    • Cluster Autopilot: GKE Autopilot limita le modifiche alle risorse nello spazio dei nomi kube-system. Se mantieni il cluster Autopilot dopo aver disinstallato Cloud Service Mesh gestito, contatta l'assistenza per richiedere la rimozione della istio-cni-plugin-config ConfigMap da kube-system.

  11. Se utilizzi Certificate Authority Service, pulisci le autorizzazioni e il pool di CA creati durante la configurazione di Certificate Authority Service per Cloud Service Mesh gestito.

  12. Se hai abilitato la configurazione predefinita del parco risorse di Cloud Service Mesh gestito e vuoi disabilitarla per i cluster futuri, disabilitala. Puoi saltare questo passaggio se stai eseguendo la disinstallazione da un solo cluster.

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

    Dove FLEET_PROJECT_ID è l'ID del progetto host del parco risorse.

  13. Se prevedi di interrompere l'utilizzo di Cloud Service Mesh a livello di parco risorse, disabilita la funzionalità mesh di servizi per il progetto host del parco risorse.

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

    Dove FLEET_PROJECT_ID è l'ID del progetto host del parco risorse.

Al termine di questi passaggi, tutti i componenti di Cloud Service Mesh, inclusi proxy, autorità di certificazione e ruoli e binding RBAC, vengono rimossi sistematicamente dal cluster. Durante il processo di installazione, a un account di servizio di proprietà di Google vengono concesse le autorizzazioni necessarie per stabilire le risorse del mesh di servizi all'interno del cluster. Queste istruzioni di disinstallazione non revocano queste autorizzazioni, consentendo una riattivazione senza problemi di Cloud Service Mesh in futuro.