Verwaltetes Cloud Service Mesh deinstallieren

Auf dieser Seite wird erläutert, wie Sie verwaltetes Cloud Service Mesh deinstallieren. Wenn Sie clusterinternes Cloud Service Mesh deinstallieren, folgen Sie stattdessen der Anleitung zur clusterinternen Deinstallation.

Wenn Sie eine Legacy-Einrichtung mit mehreren bereitgestellten Steuerungsebenen verwenden, werden durch das Befolgen dieser Anleitung alle bereitgestellten Steuerungsebenen entfernt.

Von asmcli verwaltete Steuerungsebenen werden für die Deinstallation nicht unterstützt, aber Cluster mit Steuerungsebenen, die entweder von asmcli --managed oder der Mesh API verwaltet werden, werden unterstützt. Wenn Sie sich nicht sicher sind, welche Steuerungsebene verwendet wird, führen Sie den folgenden Befehl aus:

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

Die Deinstallation wird unterstützt, wenn eines der in der Ausgabe aufgeführten Elemente vorhanden ist.

Cloud Service Mesh deinstallieren

Mit den folgenden Befehlen können Sie alle Cloud Service Mesh-Komponenten deinstallieren.

  1. So verhindern Sie eine Unterbrechung des Anwendungstraffics:

    • Führen Sie ein Downgrade aller STRICT mTLS-Richtlinien auf PERMISSIVE aus.
    • Entfernen Sie alle AuthorizationPolicy, die den Traffic blockieren können.
  2. Deaktivieren Sie die Multi-Cluster-Funktion, wenn auf dem Cluster, den Sie deinstallieren, andere Cluster die Endpunkterkennung ausführen.

    kubectl patch configmap/asm-options -n istio-system --type merge -p '{"data":{"multicluster_mode":"manual"}}'
    
  3. Suchen Sie nach Secrets, die bereinigt werden müssen, und löschen Sie sie:

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

    Dabei ist SECRET_NAME der Name des Secrets. Wiederholen Sie diesen Schritt für jedes aufgeführte Secret.

  4. Deaktivieren Sie die automatische Sidecar-Einfügung für Ihre Namespaces, sofern sie aktiviert ist. Führen Sie den folgenden Befehl aus, um Namespace-Labels aufzurufen:

     kubectl get namespace YOUR_NAMESPACE --show-labels
    

    Die Ausgabe sieht etwa so aus:

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

    1. Wenn Sie in der Ausgabe in der Spalte LABELS die Option istio.io/rev= sehen, entfernen Sie sie:

       kubectl label namespace YOUR_NAMESPACE istio.io/rev-
      
    2. Wenn Sie in der Ausgabe in der Spalte LABELS die Option istio-injection sehen, entfernen Sie sie:

       kubectl label namespace YOUR_NAMESPACE istio-injection-
      
    3. Wenn Sie weder die Labels istio.io/rev noch istio-injection sehen, wurde die automatische Einfügung im Namespace nicht aktiviert.

  5. Starten Sie Ihre Arbeitslasten mit eingefügten Sidecar-Dateien neu, um die Proxys zu entfernen.

  6. Prüfen Sie, ob keine Proxys mit der verwalteten Steuerungsebene verbunden sind:

      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. Aktualisieren Sie die Spezifikation für die Mitgliedschaft des Mesh-Features auf not-installed:

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

    Ersetzen Sie Folgendes:

    • MEMBERSHIP_NAME ist der Mitgliedschaftsname, der bei der Registrierung des Clusters bei der Flotte aufgeführt wurde.
    • MEMBERSHIP_LOCATION ist der Standort Ihrer Mitgliedschaft (entweder eine Region oder global).
  8. Prüfen Sie, ob der Status der Mitgliedschaft des Mesh-Features für den Status der Steuerungsebene DISABLED ist.

    gcloud container fleet mesh describe --project FLEET_PROJECT_ID
    

    Die Ausgabe sieht etwa so aus:

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

    Wenn der Status der Steuerungsebene DEPROVISIONING ist, prüfen Sie nach einigen Minuten noch einmal.

    1. Wenn der Status der Steuerungsebene STALLED ist, wird die Deinstallation aufgrund eines internen Fehlerzustands blockiert. Wenn das Problem weiterhin besteht, wenden Sie sich an den Support.
  9. Optional können Sie Istio-CRs, Istio-CRDs, die ConfigMap „istio-(revision)“, die ConfigMap „asm-options“ und den Namespace istio-system entfernen, um das Service Mesh aus dem Cluster zu entfernen oder in einem anderen mit der Istio API kompatiblen Service Mesh zu verwenden.

    1. Istio-CRs entfernen:

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

      kubectl get crds -o name | grep --color=never 'istio.io' | xargs kubectl delete
      
    3. Die ConfigMap „istio-(revision)“ entfernen: Sie können diesen Schritt überspringen, wenn Sie den Namespace istio-system löschen.

      kubectl delete configmap istio-RELEASE_CHANNEL -n istio-system
      

      Ersetzen Sie RELEASE_CHANNEL durch Ihre Release-Version (asm-managed, asm-managed-stable oder asm-managed-rapid).

    4. Die ConfigMap „asm-options“ entfernen:

      kubectl delete configmap asm-options -n istio-system
      
    5. Den Namespace istio-system entfernen:

      kubectl delete namespace istio-system --ignore-not-found=true
      
    6. Prüfen Sie, ob die Löschvorgänge erfolgreich waren:

      kubectl get ns
      

      Die Ausgabe sollte den Status Terminating anzeigen und wie angegeben zurückgegeben werden. Andernfalls müssen Sie möglicherweise alle verbleibenden Ressourcen in den Namespaces manuell löschen und es noch einmal versuchen.

      NAME                 STATUS       AGE
      istio-system         Terminating  71m
      
  10. Wenn verwaltetes CNI auf Ihrem Cluster aktiviert war(Standardeinstellung für moderne Installationen), bereinigen Sie die CNI-Ressourcen:

    • Standardcluster:Suchen Sie nach der ConfigMap istio-cni-plugin-config und löschen Sie sie:

      1. Prüfen Sie, ob die ConfigMap istio-cni-plugin-config vorhanden ist:

           kubectl get configmap istio-cni-plugin-config -n kube-system
        
      2. Wenn sie vorhanden ist, löschen Sie die ConfigMap istio-cni-plugin-config:

           kubectl delete configmap istio-cni-plugin-config -n kube-system
        
    • Autopilot-Cluster:GKE Autopilot beschränkt Änderungen an Ressourcen im Namespace kube-system. Wenn Sie Ihren Autopilot-Cluster nach der Deinstallation von verwaltetem Cloud Service Mesh behalten möchten, wenden Sie sich an den Support, damit die istio-cni-plugin-config ConfigMap aus kube-system entfernt wird.

  11. Wenn Sie Certificate Authority Service verwenden, bereinigen Sie die Berechtigungen und den CA-Pool , die beim Konfigurieren von Certificate Authority Service für verwaltetes Cloud Service Mesh erstellt wurden.

  12. Wenn Sie die Standardkonfiguration für verwaltetes Cloud Service Mesh für Flotten aktiviert haben und sie für zukünftige Cluster deaktivieren möchten, deaktivieren Sie sie. Sie können diesen Schritt überspringen, wenn Sie die Deinstallation nur für einen einzelnen Cluster durchführen.

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

    Dabei ist FLEET_PROJECT_ID die ID Ihres Flotten-Hostprojekts.

  13. Wenn Sie Cloud Service Mesh auf Flotteneebene nicht mehr verwenden möchten, deaktivieren Sie das Service Mesh-Feature für Ihr Flotten-Hostprojekt.

     gcloud container hub mesh disable --project FLEET_PROJECT_ID
    

    Dabei ist FLEET_PROJECT_ID die ID Ihres Flotten-Hostprojekts.

Nach Abschluss dieser Schritte werden alle Cloud Service Mesh-Komponenten, einschließlich Proxys, Zertifizierungsstellen sowie RBAC-Rollen und -Bindungen, systematisch aus dem Cluster entfernt. Während der Installation wird einem Google-eigenen Dienstkonto die erforderliche Berechtigung erteilt, um die Service Mesh-Ressourcen im Cluster einzurichten. Bei der Deinstallation werden diese Berechtigungen nicht widerrufen, sodass Cloud Service Mesh in Zukunft nahtlos wieder aktiviert werden kann.