Disinstalla Cloud Service Mesh

Questa pagina spiega come disinstallare Cloud Service Mesh se utilizzi le API Istio. Se utilizzi le API Compute Engine, non sono necessari passaggi. Per comprendere le differenze, consulta la panoramica di Cloud Service Mesh.

Se segui queste istruzioni per disinstallare Cloud Service Mesh, tutte le configurazioni vengono rimosse indipendentemente dal tipo di control plane (in-cluster o gestito). Se stai eseguendo una migrazione da in-cluster a gestito, consulta invece la guida alla migrazione.

Disinstalla Cloud Service Mesh

Utilizza i seguenti comandi per disinstallare tutti i componenti di Cloud Service Mesh. Questi comandi eliminano anche lo spazio dei nomi istio-system e tutte le definizioni di risorse personalizzate (CRD), incluse quelle che hai applicato.

  1. Per evitare interruzioni del traffico delle applicazioni:

    • Esegui il downgrade di tutte le policy mTLS STRICT a PERMISSIVE.
    • Rimuovi eventuali AuthorizationPolicy che potrebbero bloccare il traffico.
  2. Disattiva la gestione automatica su questo cluster (se l'hai applicata direttamente o utilizzando la configurazione predefinita del parco risorse):

      gcloud container fleet mesh update \
         --management manual \
         --memberships MEMBERSHIP_NAME \
         --project FLEET_PROJECT_ID \
         --location MEMBERSHIP_LOCATION
    

    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).
  3. Disattiva l'inserimento automatico di sidecar negli spazi dei nomi, se è abilitato. Esegui il comando seguente per visualizzare le etichette dello spazio 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

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

     kubectl label namespace YOUR_NAMESPACE istio.io/rev-
    

    Se nell'output viene visualizzato istio-injection nella colonna LABELS, rimuovilo:

     kubectl label namespace YOUR_NAMESPACE istio-injection-
    

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

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

  5. Se utilizzi Cloud Service Mesh gestito, controlla l'implementazione del control plane nel cluster. Questo ti aiuterà a eliminare le risorse pertinenti nei passaggi successivi.

  6. Se utilizzi Cloud Service Mesh gestito, rimuovi tutte le risorse controlplanerevision nel cluster:

    kubectl delete controlplanerevision asm-managed asm-managed-rapid asm-managed-stable -n istio-system --ignore-not-found=true
    
  7. Elimina i webhook dal cluster, se esistono.

    Cloud Service Mesh in-cluster

    Elimina validatingwebhooksconfiguration e mutatingwebhookconfiguration.

    kubectl delete validatingwebhookconfiguration,mutatingwebhookconfiguration -l operator.istio.io/component=Pilot,istio.io/owned-by!=mesh.googleapis.com
    

    Cloud Service Mesh gestito

    A. Elimina validatingwebhooksconfiguration.

    kubectl delete validatingwebhookconfiguration istiod-istio-system-mcp
    

    B. Elimina tutte le mutatingwebhookconfiguration.

    kubectl delete mutatingwebhookconfiguration istiod-RELEASE_CHANNEL
    
  8. Una volta che tutti i carichi di lavoro sono attivi e non vengono osservati proxy, puoi eliminare in sicurezza il control plane in-cluster per interrompere la fatturazione.

    Per rimuovere il control plane in-cluster, esegui il comando seguente:

    istioctl uninstall --purge
    

    Se non sono presenti altri control plane, puoi eliminare lo spazio dei nomi istio-system per eliminare tutte le risorse Cloud Service Mesh. In caso contrario, elimina i servizi corrispondenti alle revisioni di Cloud Service Mesh. In questo modo si evita di eliminare le risorse condivise, come le CRD.

  9. Elimina gli spazi dei nomi istio-system e asm-system:

     kubectl delete namespace istio-system asm-system --ignore-not-found=true
    
  10. 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, in caso contrario potrebbe essere necessario eliminare manualmente le risorse rimanenti negli spazi dei nomi e riprovare.

     NAME                 STATUS       AGE
     istio-system         Terminating  71m
     asm-system           Terminating  71m
    
  11. Se eliminerai i cluster o li hai già eliminati, assicurati che ogni cluster non sia registrato nel parco risorse.

  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 solo da un singolo 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à del 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.

  14. Se hai abilitato Cloud Service Mesh gestito, controlla ed elimina le risorse gestite, se presenti:

    1. Elimina il deployment mdp-controller:

        kubectl delete deployment mdp-controller -n kube-system
      
    2. Recupera ed elimina la risorsa personalizzata di controllo del piano dati:

      1. Recupera la CR di controllo del piano dati:

        kubectl get dataplanecontrol
        
      2. Elimina la CR di controllo del piano dati:

        kubectl delete dataplanecontrol DATA_PLANE_CONTROL_CR_NAME
        

        Sostituisci DATA_PLANE_CONTROL_CR_NAME con l'output del comando precedente.

      3. Elimina le CRD controlplanerevision e `dataplanecontrol`:

        kubectl delete crd controlplanerevisions.mesh.cloud.google.com dataplanecontrols.mesh.cloud.google.com
        
    3. Se hai l'implementazione del control plane TRAFFIC_DIRECTOR, pulisci le risorse di controllo di integrità trasparente. In genere queste risorse vengono rimosse automaticamente, ma puoi assicurarti che vengano pulite procedendo nel seguente modo:

      1. Elimina il DaemonSet snk.

           kubectl delete daemonset snk -n kube-system
        
      2. Elimina la regola firewall.

           gcloud compute firewall-rules delete gke-csm-thc-FIRST_8_CHARS_OF_CLUSTER_ID
        

        Sostituisci quanto segue:

        • FIRST_8_CHARS_OF_CLUSTER_ID sono i primi 8 caratteri dell' ID cluster per il cluster specifico.
    4. Controlla se è presente la ConfigMap istio-cni-plugin-config:

        kubectl get configmap istio-cni-plugin-config -n kube-system
      

      Se presente, elimina la ConfigMap istio-cni-plugin-config:

        kubectl delete configmap istio-cni-plugin-config -n kube-system
      
    5. Elimina il DaemonSet istio-cni-node:

        kubectl delete daemonset istio-cni-node -n kube-system
      
  15. Se stai disinstallando Cloud Service Mesh gestito, contatta l'assistenza per assicurarti che tutte le Google Cloud risorse vengano pulite. Se non segui questo passaggio, è possibile che lo spazio dei nomi istio-system e le ConfigMap continuino a essere ricreati.

Al termine di questi passaggi, tutti i componenti di Cloud Service Mesh, inclusi proxy, autorità di certificazione in-cluster e ruoli e binding RBAC, vengono rimossi sistematicamente dal cluster. Durante la procedura 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.