Cloud Service Mesh-Kompatibilität

In diesem Leitfaden wird beschrieben, wie Sie die Kompatibilität einer Flotte für die Modernisierung der Steuerungsebene bewerten, indem Sie bestätigen, dass ihre 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. Wenn Sie diese Prüfungen aktivieren, werden keine Änderungen an Ihrer Flotte oder Ihren Clustern vorgenommen. Es wird lediglich 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 des Flotten-Hostprojekts. Im Allgemeinen ist die FLEET_PROJECT_ID der Name des Projekts.

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 Modernisierungskompatibilitätsbedingungen aus den Mitgliedschaftsstatus sowie der Status ModernizationCompatible aus den einzelnen Istio-CRs entfernt.

Kompatibilität

Die Modernisierungskompatibilität wird mithilfe von Bedingungen sowohl auf Flotten- als auch auf Mitgliedschaftsebene (Cluster) gemeldet. Das System führt verschiedene Prüfungen zu unterschiedlichen Zeiten durch. Alle Prüfungen werden mindestens einmal täglich ausgeführt. Es kann bis zu einem Tag dauern, bis der Status aktualisiert wird, nachdem Sie Prüfungen aktiviert oder Fehler behoben haben.

Rufen Sie den aktuellen Mesh-Status mit dem folgenden Befehl ab, um diese Ergebnisse zu sehen:

gcloud container fleet mesh describe --project FLEET_PROJECT_ID

Kompatibilität auf Flottenebene

Den allgemeinen Modernisierungsstatus Ihrer Flotte finden Sie unter state.servicemesh.conditions.

  • Flotte ist kompatibel: Wenn Ihre Flotte kompatibel ist, sehen Sie eine Bedingung mit dem Code MODERNIZATION_COMPATIBLE:

    name: projects/project_id/locations/global/features/servicemesh
    state:
      servicemesh:
        conditions:
        - code: MODERNIZATION_COMPATIBLE
          details: 'Fleet is eligible for modernization.'
          documentationLink: https://cloud.google.com/service-mesh/...
          severity: INFO
    
  • Flotte ist nicht kompatibel: Wenn Ihre Flotte noch nicht für die Modernisierung geeignet ist, sehen Sie eine Bedingung mit dem Code MODERNIZATION_INCOMPATIBLE:

    name: projects/project_id/locations/global/features/servicemesh
    state:
      servicemesh:
        conditions:
        - code: MODERNIZATION_INCOMPATIBLE
          details: 'Fleet is not yet eligible for modernization.'
          documentationLink: https://cloud.google.com/service-mesh/...
          severity: INFO
    

    Wenn Ihre Flotte nicht kompatibel ist, sehen Sie sich die Bedingungen für bestimmte Lücken an. Prüfen Sie unter membershipStates.servicemesh auf zusätzliche Bedingungen auf Flottenebene mit dem Schweregrad WARNING oder ERROR sowie auf Bedingungen auf Clusterebene, um alle Blockierungen zu beheben.

Kompatibilität auf Clusterebene

Suchen Sie unter membershipStates.servicemesh für jeden bereitgestellten Cloud Service Mesh-Cluster in der Flotte nach Bedingungen mit dem Schweregrad WARNING oder ERROR. Wenn Inkompatibilitäten vorhanden sind, sieht die Ausgabe etwa 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 der documentationLink, die in jeder Bedingung angegeben ist, 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-Anmerkungen:

  1. Problematische Anmerkungen identifizieren: Suchen Sie im Feld details der Statusbedingung nach den nicht unterstützten oder ungültigen Anmerkungsschlüsseln. Alle Pods mit den problematischen Annotationsschlüsseln finden.

  2. Beheben und bestätigen:

    1. Ändern Sie die YAML-Spezifikationen für Ihre Deployments oder Pods, damit sie nur unterstützte Annotationen verwenden. Alle anderen Annotationen werden nicht unterstützt. Entfernen Sie alle nicht unterstützten Anmerkungen, korrigieren Sie alle ungültigen Werte und wenden Sie die aktualisierte YAML-Datei noch einmal auf Ihren Cluster an.
    2. Sobald alle Pod-Anmerkungen 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 (Custom Resources, CRs), die nicht unterstützte Funktionen oder Felder verwenden oder ungültige Werte enthalten.
  • Ungültige oder nicht unterstützte Istio MeshConfig-Einstellungen.
  • Skalierbarkeitslimits werden überschritten.
  • 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 zum Status analysieren: Prüfen Sie das Feld details des Status. Darin werden einzelne Fehler zusammengefasst und die Ressourcentypen mit Konfigurationsproblemen identifiziert. Im Beispiel für die bereitgestellten 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: Mit dem folgenden Beispielskript können Sie Istio-benutzerdefinierte Ressourcen (Custom Resources, CRs) auflisten, die die Kompatibilitätsprüfungen nicht bestehen. Dieses Skript wird als Beispiel bereitgestellt. Prüfen und analysieren Sie es, um sicherzustellen, dass es Ihren Umgebungs- und Betriebsanforderungen entspricht, bevor Sie es in Ihrem Cluster ausführen. Für das Script müssen kubectl und jq installiert sein. Die Ausgabe enthält die spezifischen Fehlerdetails, die unter status.conditions (Typ: ModernizationCompatible, Status: "False") jeder Ressource gefunden wurden.

    for resource in authorizationpolicies destinationrules envoyfilters gateways peerauthentications proxyconfigs 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 korrigieren und anwenden: Ändern Sie die 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ützte Features des verwalteten Cloud Service Mesh und Nicht unterstützte Istio-APIs. Aktualisieren Sie beispielsweise im bereitgestellten Beispiel die ServiceEntry-Auflösung von DNS_ROUND_ROBIN auf DNS.

  4. Korrekturen überprüfen: Nachdem Sie Korrekturen vorgenommen haben, kann es bis zu 24 Stunden dauern, bis der Status durch regelmäßige Prüfungen aktualisiert wird.

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

      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 damit zusammenhängenden Probleme behoben sind, wird die Bedingung MODERNIZATION_INCOMPATIBLE_CONFIG für dieses Abo nicht mehr angezeigt.

Inkompatible Flottengröße beheben

Der Code MODERNIZATION_INCOMPATIBLE_FLEET_SCALE gibt an, dass die Flotte nicht auf die TRAFFIC_DIRECTOR-Steuerungsebene modernisiert werden kann, da die Anzahl der Ressourcen in der Flotte die für die Modernisierung unterstützten Grenzwerte überschreitet.

In dieser Phase unterstützen wir die Modernisierung von Flotten mit den folgenden Einschränkungen: