Verwaltetes Cloud Service Mesh deinstallieren

Auf dieser Seite wird erläutert, wie Sie das verwaltete 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 diese Anleitung alle bereitgestellten Steuerungsebenen entfernt.

Von asmcli verwaltete Steuerungsebenen werden für die Deinstallation nicht unterstützt, aber Cluster mit asmcli --managed- oder Mesh-API-verwalteten Steuerungsebenen werden unterstützt. Wenn Sie sich nicht sicher sind, welche Steuerungsebene Sie verwenden, 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 ein Element in der Ausgabe aufgeführt 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 Multi-Cluster, wenn andere Cluster die Endpunkterkennung für den Cluster ausführen, den Sie deinstallieren.

    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 in der Ausgabe unter der Spalte LABELS istio.io/rev= angezeigt wird, entfernen Sie dies:

       kubectl label namespace YOUR_NAMESPACE istio.io/rev-
      
    2. Wenn in der Ausgabe unter der Spalte LABELS istio-injection angezeigt wird, entfernen Sie dies:

       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 Verwaltung der Mitgliedschaftsspezifikation für Mesh-Funktionen 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 Mesh-Funktionsmitgliedschaft 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 lautet, 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 Istio-API-kompatiblen Service Mesh zu verwenden.

    1. Entfernen Sie Istio-CRs:

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

      kubectl get crds -o name | grep --color=never 'istio.io' | xargs kubectl delete
      
    3. Entfernen Sie die ConfigMap „istio-(revision)“. Sie können diesen Schritt überspringen, wenn Sie den istio-system-Namespace 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. Entfernen Sie die ConfigMap „asm-options“:

      kubectl delete configmap asm-options -n istio-system
      
    5. Entfernen Sie den Namespace istio-system:

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

  11. 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 in einem einzelnen Cluster vornehmen.

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

    Dabei ist FLEET_PROJECT_ID die ID des Flotten-Hostprojekts.

  12. Wenn Sie Cloud Service Mesh auf Flottenebene 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 des 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 zu erstellen. Durch diese Deinstallationsanleitung werden diese Berechtigungen nicht widerrufen, sodass Cloud Service Mesh in Zukunft nahtlos reaktiviert werden kann.