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 Befolgen dieser Anleitung alle bereitgestellten Steuerungsebenen entfernt.

Von asmcli verwaltete Steuerungsebenen werden für die Deinstallation nicht unterstützt, Cluster mit von asmcli --managed oder Mesh-APIs verwalteten Steuerungsebenen jedoch schon. 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.

Auswirkungen des Entfernens von Cloud Service Mesh

Bevor Sie Cloud Service Mesh deinstallieren, sollten Sie sich überlegen, welche Funktionen aus Ihrem Cluster und Ihren Arbeitslasten entfernt werden. Wenn Sie Cloud Service Mesh-Proxys aus Ihren Arbeitslasten entfernen und sie neu starten, kehren Ihre Anwendungen zum standardmäßigen Kubernetes-Netzwerkverhalten zurück.

Sicherheit

Wenn Sie Cloud Service Mesh entfernen, gehen die folgenden Sicherheitsfunktionen verloren:

  • Verschlüsselung mit gegenseitigem TLS (mTLS): Der Traffic zwischen Diensten wird nicht mehr mit vom Mesh verwalteten mTLS-Zertifikaten verschlüsselt.
  • Autorisierungsrichtlinien: Die benutzerdefinierten Mesh-Ressourcen AuthorizationPolicy werden nicht mehr erzwungen. Sie müssen Kubernetes-NetworkPolicy-Ressourcen oder die Authentifizierung und Autorisierung auf Anwendungsebene konfigurieren, um den Traffic einzuschränken.

Beobachtbarkeit

Wenn Sie Cloud Service Mesh entfernen, gehen die folgenden Observability-Funktionen verloren:

  • Telemetrie und Messwerte: Die automatische Erfassung von Layer 7-Messwerten (z. B. Anfrageraten, Fehlerraten und Latenz) wird beendet. Mesh-Telemetrie wird nicht mehr automatisch in Cloud Monitoring aufgenommen. Standard-GKE-Messwerte sind nicht betroffen.
  • Dashboards und SLOs: Vorkonfigurierte Cloud Service Mesh-Dashboards und SLO-Monitoring (Service Level Objective) in derGoogle Cloud Console werden nicht mehr ausgefüllt.
  • Zugriffsprotokollierung und ‑tracing: Sidecar-Proxy-Zugriffsprotokolle mit Client-mTLS-Identitäten und automatisierten verteilten Traces werden nicht mehr generiert.

Service Discovery und Netzwerkresilienz

Wenn Sie Cloud Service Mesh entfernen, gehen die folgenden Netzwerk- und Resilienzfunktionen verloren:

  • Netzwerkresilienz: Arbeitslasten verlieren Resilienzfunktionen auf Sidecar-Ebene, einschließlich automatischer Wiederholungsversuche, konfigurierbarer Zeitüberschreitungen für Anfragen, Leistungsschaltern, Ausreißererkennung und Verwaltung von Verbindungspools. Anwendungen müssen Verbindungsfehler und Wiederholungsversuche direkt verwalten.
  • Multi-Cluster Service Discovery: Die clusterübergreifende Endpunkterkennung und das Routing über mehrere Cluster in einer Flotte funktionieren nicht mehr über das Mesh. Dienste können Endpunkte nur in ihrem lokalen Cluster über Standard-DNS erkennen.

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 auf dem Cluster, den Sie deinstallieren, andere Cluster mit Endpunkterkennung ausgeführt werden.

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

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

       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 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 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. Entfernen Sie 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 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. 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 im Namespace 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 erforderlichen Berechtigungen zum Einrichten der Service Mesh-Ressourcen im Cluster gewährt. Durch diese Deinstallationsanleitung werden diese Berechtigungen nicht widerrufen, sodass Cloud Service Mesh in Zukunft nahtlos reaktiviert werden kann.