Cloud Service Mesh-Kompatibilität

In diesem Leitfaden wird beschrieben, wie Sie die Kompatibilität einer Flotte für die Modernisierung der Steuerungsebene bewerten können. Dazu bestätigen Sie, dass Konfiguration, Infrastruktur und Skalierung mit der TRAFFIC_DIRECTOR-Implementierung der Steuerungsebene kompatibel sind.

Kompatibilitätsprüfungen aktivieren oder deaktivieren

Um die Kompatibilitätsprüfungen zu starten, aktivieren Sie den Validierungsmodus für die Flotte. Dadurch wird eine fortlaufende Prüfung aller Istio-Konfigurationen, Infrastrukturkonfigurationen und Skalierungsparameter ausgelöst. Durch das Aktivieren dieser Prüfungen werden keine Änderungen an Ihrer Flotte oder Ihren Clustern vorgenommen. Es wird nur die Kompatibilitätsberichterstellung aktiviert.

Prüfungen aktivieren

Führen Sie den folgenden gcloud-Befehl aus, um die Kompatibilitätsprüfung zu starten:

gcloud alpha container fleet mesh update --modernization-compatibility validation-enabled --project FLEET_PROJECT_ID

Ersetzen Sie FLEET_PROJECT_ID durch die ID Ihres Flotten-Hostprojekts. Im Allgemeinen hat FLEET_PROJECT_ID denselben Namen wie das Projekt.

Nach der Aktivierung beginnt Cloud Service Mesh mit der Bewertung der Flotte und aller in der Flotte bereitgestellten Cloud Service Mesh-Cluster auf Modernisierungskompatibilität.

Prüfungen deaktivieren

Führen Sie den folgenden Befehl aus, um die Berichterstellung von Kompatibilitätsergebnissen zu beenden:

gcloud alpha container fleet mesh update --modernization-compatibility validation-disabled --project FLEET_PROJECT_ID

Mit diesem Befehl werden die Bedingungen für die Modernisierungskompatibilität aus den Mitgliedschaftsstatus sowie der Status ModernizationCompatible aus einzelnen benutzerdefinierten Istio-Ressourcen entfernt.

Kompatibilität

Die Modernisierungskompatibilität wird sowohl auf Flotten- als auch auf Mitgliedschaftsebene (Cluster) mit Bedingungen gemeldet. Das System führt zu verschiedenen Zeiten verschiedene Prüfungen durch. Alle Prüfungen werden mindestens einmal täglich ausgeführt. Nach dem Aktivieren der Prüfungen oder dem Anwenden von Korrekturen kann es bis zu einem Tag dauern, bis der Status aktualisiert wird.

Rufen Sie die neuesten Mesh-Status mit dem folgenden Befehl ab, um diese Ergebnisse anzusehen:

gcloud container fleet mesh describe --project FLEET_PROJECT_ID

Kompatibilität auf Clusterebene

Suchen Sie unter membershipStates.servicemesh nach Bedingungen mit dem Schweregrad WARNING oder ERROR für jeden in der Flotte bereitgestellten Cloud Service Mesh-Cluster. Wenn Inkompatibilitäten vorhanden sind, sieht die Ausgabe so aus:

membershipSpecs:
 projects/project_id/locations/global/memberships/cluster-a:
   mesh:
     management:MANAGEMENT_AUTOMATIC
membershipStates:
  projects/project_id/locations/global/memberships/cluster-a:
    servicemesh:
      conditions:
     - code: MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION
       details: 'Pod pod-a in namespace test-namespace: invalid annotations: ["status.sidecar.istio.io/port": failed to parse port - "invalid", port must be a number and should be in the range 1..65535]; unsupported annotations: ["ambient.istio.io/redirection"] .'
       documentationLink: https://cloud.google.com/service-mesh/...
       severity: WARNING
     - code: WORKLOAD_IDENTITY_REQUIRED
       details: 'Workload Identity is not enabled for the cluster or at least one of the node pools.'
       documentationLink: https://cloud.google.com/...
       severity: ERROR
...

Folgen Sie dem documentationLink in jeder Bedingung, um die jeweilige Inkompatibilität zu verstehen und zu beheben.

Kompatibilitätsprobleme beheben

Inkompatible Pod-Annotationen beheben

Der Code MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION gibt an, dass der Cluster nicht auf die TRAFFIC_DIRECTOR-Steuerungsebene modernisiert werden kann, da bestimmte Pods nicht unterstützte oder ungültige Istio-Annotationen haben.

Beispielausgabe des Befehls gcloud container fleet mesh describe mit der für die Mitgliedschaft festgelegten Bedingung MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION:

membershipStates:
  projects/project_id/locations/global/memberships/membership-a:
    servicemesh:
      conditions:
     - code: MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION
       details: 'Pod pod-a in namespace test-namespace: invalid annotations: ["status.sidecar.istio.io/port": failed to parse port - "invalid", port must be a number and should be in the range 1..65535]; unsupported annotations: ["ambient.istio.io/redirection"] .'
       documentationLink: https://cloud.google.com/service-mesh/...
       severity: WARNING

So beheben Sie diese Pod-Annotationen:

  1. Problematische Annotationen identifizieren: Prüfen Sie das Feld details der Status bedingung, um die nicht unterstützten oder ungültigen Annotationsschlüssel zu finden. Suchen Sie alle Pods mit den problematischen Annotationsschlüsseln.

  2. Beheben und prüfen:

    1. Ändern Sie die YAML-Spezifikationen für Ihre Bereitstellungen oder Pods, um die identifizierten Annotationen zu entfernen oder zu ändern. Achten Sie darauf, dass sie keine nicht unterstützten Annotationenenthalten. Wenden Sie die aktualisierte YAML-Datei noch einmal auf Ihren Cluster an.
    2. Sobald alle Pod-Annotationen korrigiert wurden, wird die Bedingung MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION für diese Mitgliedschaft nicht mehr angezeigt.

Inkompatible Konfigurationen beheben

Der Code MODERNIZATION_INCOMPATIBLE_CONFIG gibt an, dass der Cluster aufgrund inkompatibler Konfigurationen nicht auf die TRAFFIC_DIRECTOR-Steuerungsebene modernisiert werden kann. Diese Inkompatibilitäten können folgende Ursachen haben:

  • Bestimmte benutzerdefinierte Istio-Ressourcen, die nicht unterstützte Features oder Felder verwenden oder ungültige Werte enthalten.
  • Ungültige oder nicht unterstützte Istio-MeshConfig-Einstellungen.
  • Überschreiten der Skalierungslimits.
  • Verwendung nicht unterstützter Dienst- oder Namespace-Annotationen.

Beispielausgabe des Befehls gcloud container fleet mesh describe mit der für die Mitgliedschaft festgelegten Bedingung MODERNIZATION_INCOMPATIBLE_CONFIG:

membershipSpecs:
 projects/project_id/locations/global/memberships/membership-a:
   mesh:
     management:MANAGEMENT_AUTOMATIC
membershipStates:
  projects/project_id/locations/global/memberships/membership-a:
    servicemesh:
      conditions:
     - code: MODERNIZATION_INCOMPATIBLE_CONFIG
       details: 'One or more configs have warnings. Due to the following reason(s): Istio sidecar scale exceeds limit, MeshConfig "accessLogFile" is unsupported. Invalid Config Types: [Gateway, ServiceEntry], where more details are shown on individual config resources.See documentation link for more detail.'
       documentationLink: https://cloud.google.com/service-mesh/...
       severity: WARNING

So beheben Sie diese Konfigurationen:

  1. Details der Bedingung analysieren: Prüfen Sie das Feld details der Status bedingung. Darin werden einzelne Fehler zusammengefasst und die Ressourcentypen mit Konfigurationsproblemen identifiziert. Im Beispiel für die Details müssten Sie die Probleme mit der Skalierung und MeshConfig beheben und die Ressourcen Gateway und ServiceEntry auf Fehler prüfen.

  2. Inkompatible Ressourcen identifizieren und untersuchen: Verwenden Sie das folgende Skript, um alle benutzerdefinierten Istio-Ressourcen aufzulisten, bei denen die Kompatibilitäts prüfungen fehlgeschlagen sind. Für das Skript müssen kubectl und jq installiert sein. Die Ausgabe enthält die spezifischen Fehlerdetails unter status.conditions (Typ: ModernizationCompatible, Status: "False") jeder Ressource.

    for resource in authorizationpolicies destinationrules gateways proxyconfigs peerauthentications requestauthentications serviceentries sidecars telemetries virtualservices wasmplugins workloadentries workloadgroups; do
      echo "--- Checking $resource ---"
      kubectl get $resource --all-namespaces -o json | \
      jq -r '.items[] | select(.status.conditions != null and any(.status.conditions[]; .type == "ModernizationCompatible" and .status == "False")) | {"kind": .kind, "name": .metadata.name, "namespace": .metadata.namespace, "message": [.status.conditions[] | select(.type == "ModernizationCompatible").message]}'
    done
    

    Beispielausgabe :

    --- Checking serviceentries ---
    {
      "kind": "ServiceEntry",
      "name": "demo-service-entry",
      "namespace": "se",
      "message": [
        "WARNING: unsupported resolution type: DNS_ROUND_ROBIN"
      ]
    }
    ..
    --- Checking workloadentries ---
    {
      "kind": "WorkloadEntry",
      "name": "demo-we",
      "namespace": "default",
      "message": [
        "WARNING: This API is not supported"
      ]
    }
    
  3. Konfigurationen beheben und anwenden: Ändern Sie Ihre YAML-Datei, indem Sie die nicht unterstützten Felder entfernen oder ungültige Werte durch kompatible Werte ersetzen. Weitere Informationen finden Sie in der Dokumentation zu unterstützten Features von verwaltetem Cloud Service Mesh und nicht unterstützten Istio-APIs. Aktualisieren Sie im Beispiel die ServiceEntry Auflösung von DNS_ROUND_ROBIN zu DNS.

  4. Korrekturen prüfen: Nachdem Sie die Korrekturen angewendet haben, kann es bis zu 24 Stunden dauern, bis die regelmäßigen Prüfungen den Status aktualisieren.

    • Die Bedingung ModernizationCompatible für die korrigierten Ressourcen sollte sich in den Status "True" ändern. Prüfen Sie den Status der Ressource mit:

      kubectl get resource name -n namespace -o yaml
      

      Beispielausgabe:

      status:
        conditions:
        - lastTransitionTime: "2026-06-05T06:12:52.219963391Z"
          message: Resource is compatible for modernization
          reason: Compatible
          status: "True"
          type: ModernizationCompatible
      
    • Führen Sie den Befehl gcloud container fleet mesh describe noch einmal aus. Sobald alle zugehörigen Probleme behoben sind, wird die Bedingung MODERNIZATION_INCOMPATIBLE_CONFIG für diese Mitgliedschaft nicht mehr angezeigt.