Comprendre la compatibilité de Cloud Service Mesh
L'implémentation du plan de contrôle ISTIOD est obsolète. Vous devez évaluer la compatibilité, résoudre les conditions de blocage dans vos parcs et moderniser avant la date limite de fin de compatibilité.
Ce guide explique comment évaluer la compatibilité d'un parc pour la modernisation du plan de contrôle en vérifiant que sa configuration, son infrastructure et son scaling sont compatibles avec l'implémentation du plan de contrôle TRAFFIC_DIRECTOR.
Activer ou désactiver les vérifications de compatibilité
Pour lancer les vérifications de compatibilité, activez le mode de validation pour le parc, ce qui déclenche un audit continu de toutes les configurations Istio, des configurations d'infrastructure et des paramètres de scaling. L'activation de ces vérifications n'apporte aucune modification à votre parc ou à vos clusters. Elle active uniquement les rapports de compatibilité.
Activer les vérifications
Pour lancer l'audit de compatibilité, exécutez la commande gcloud suivante :
gcloud alpha container fleet mesh update --modernization-compatibility validation-enabled --project FLEET_PROJECT_ID
Remplacez FLEET_PROJECT_ID par l'ID de votre projet hôte de parc.
En général, le FLEET_PROJECT_ID porte le même nom que le projet.
Une fois activé, Cloud Service Mesh commence à évaluer la compatibilité du parc et de tous les clusters provisionnés par Cloud Service Mesh dans le parc avec la modernisation.
Désactiver les vérifications
Pour arrêter de générer des rapports sur les résultats de compatibilité, exécutez la commande suivante :
gcloud alpha container fleet mesh update --modernization-compatibility validation-disabled --project FLEET_PROJECT_ID
Cette commande supprime les conditions de compatibilité de modernisation des états d'appartenance, ainsi que l'état ModernizationCompatible des CR Istio individuelles.
Comprendre la compatibilité
La compatibilité de la modernisation est signalée à l'aide de conditions au niveau du parc et de l'appartenance (cluster). Le système effectue différentes vérifications à différents moments, toutes les vérifications étant exécutées au moins une fois par jour. La mise à jour de l'état peut prendre jusqu'à un jour après l'activation des vérifications ou l'application des correctifs.
Pour afficher ces résultats, récupérez l'état du maillage le plus récent à l'aide de la commande suivante :
gcloud container fleet mesh describe --project FLEET_PROJECT_ID
Compatibilité au niveau du parc
Affichez l'état de modernisation global de votre parc sous state.servicemesh.conditions.
Le parc est compatible : si votre parc est compatible, une condition avec le code
MODERNIZATION_COMPATIBLEs'affiche :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: INFOLe parc n'est pas compatible : si votre parc n'est pas encore compatible avec la modernisation, une condition s'affiche avec le 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: INFOSi votre parc n'est pas compatible, examinez les conditions pour identifier les écarts spécifiques. Recherchez d'autres conditions de niveau parc de gravité
WARNINGouERROR, ainsi que des conditions de niveau cluster sousmembershipStates.servicemeshpour résoudre les problèmes bloquants.
Compatibilité au niveau du cluster
Recherchez les conditions de gravité WARNING ou ERROR sous membershipStates.servicemesh pour chaque cluster provisionné par Cloud Service Mesh dans le parc. S'il existe des incompatibilités, le résultat ressemble à ceci :
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
...
Suivez les documentationLink fournies dans chaque condition pour comprendre et résoudre l'incompatibilité spécifique.
Résoudre les problèmes de compatibilité
Résoudre les annotations de pod incompatibles
Le code MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION indique que le cluster ne peut pas être modernisé vers le plan de contrôle TRAFFIC_DIRECTOR, car certains pods comportent des annotations Istio non compatibles ou non valides.
Exemple de résultat de la commande gcloud container fleet mesh describe avec la condition MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION définie pour l'appartenance :
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
Pour résoudre ces annotations de pod :
Identifier les annotations problématiques : vérifiez le champ
detailsde la condition d'état pour trouver les clés d'annotation non compatibles ou non valides. Recherchez tous les pods contenant les clés d'annotation problématiques.Corriger et valider :
- Modifiez les spécifications YAML de vos déploiements ou pods pour vous assurer qu'ils n'utilisent que des annotations compatibles (toutes les autres annotations ne sont pas compatibles). Supprimez les annotations non compatibles, corrigez les valeurs non valides et réappliquez le fichier YAML mis à jour à votre cluster.
- Une fois toutes les annotations de pod corrigées, la condition
MODERNIZATION_INCOMPATIBLE_POD_ANNOTATIONn'apparaît plus pour cette appartenance.
Résoudre les configurations incompatibles
Le code MODERNIZATION_INCOMPATIBLE_CONFIG indique que le cluster ne peut pas être modernisé vers le plan de contrôle TRAFFIC_DIRECTOR en raison de configurations incompatibles. Ces incompatibilités peuvent provenir des éléments suivants :
- Ressources personnalisées Istio spécifiques utilisant des fonctionnalités ou des champs non compatibles, ou contenant des valeurs non valides.
- Paramètres Istio MeshConfig non valides ou non compatibles.
- Dépassement des limites d'évolutivité.
- Utilisation d'annotations de service ou d'espace de noms non compatibles.
Exemple de résultat de la commande gcloud container fleet mesh describe avec la condition MODERNIZATION_INCOMPATIBLE_CONFIG définie pour l'appartenance :
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
Pour résoudre ces configurations :
Analysez les détails de la condition : vérifiez le champ
detailsde la condition d'état. Il résume les erreurs individuelles et identifie les types de ressources présentant des problèmes de configuration. Pour l'exemple de détails fourni, vous devez résoudre les problèmes de scaling et de MeshConfig, et inspecter les ressourcesGatewayetServiceEntrypour détecter d'éventuelles erreurs.Identifier et examiner les ressources incompatibles : utilisez l'exemple de script suivant pour lister les ressources personnalisées Istio qui ne passent pas les vérifications de compatibilité. Ce script est fourni à titre d'exemple. Examinez-le et analysez-le pour vous assurer qu'il répond aux exigences de votre environnement et de vos opérations avant de l'exécuter dans votre cluster. Le script nécessite l'installation de
kubectlet dejq. Le résultat inclut les détails de l'erreur spécifique trouvée sousstatus.conditions(type :ModernizationCompatible, état :"False") de chaque ressource.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]}' doneExemple de résultat :
--- 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" ] }Corriger et appliquer les configurations : modifiez votre fichier YAML en supprimant les champs non compatibles ou en remplaçant les valeurs non valides par des valeurs compatibles. Pour obtenir de l'aide, consultez la documentation sur les fonctionnalités compatibles de Cloud Service Mesh géré et la compatibilité des API dans Cloud Service Mesh géré. (Par exemple, dans l'exemple fourni, remplacez la résolution
ServiceEntrydeDNS_ROUND_ROBINparDNS).Vérifier les corrections : après avoir appliqué les corrections, attendez jusqu'à 24 heures que les vérifications périodiques mettent à jour l'état.
La condition
ModernizationCompatiblesur les ressources corrigées doit passer à l'état"True". Vérifiez l'état de la ressource à l'aide de la commande suivante :kubectl get resource name -n namespace -o yamlExemple de résultat :
status: conditions: - lastTransitionTime: "2026-06-05T06:12:52.219963391Z" message: Resource is compatible for modernization reason: Compatible status: "True" type: ModernizationCompatibleRéexécutez la commande
gcloud container fleet mesh describe. Une fois tous les problèmes associés résolus, l'étatMODERNIZATION_INCOMPATIBLE_CONFIGn'apparaîtra plus pour cet abonnement.
Résoudre les problèmes d'échelle de parc incompatible
Le code MODERNIZATION_INCOMPATIBLE_FLEET_SCALE indique que le parc ne peut pas être modernisé vers le plan de contrôle TRAFFIC_DIRECTOR, car l'échelle des ressources du parc dépasse les limites acceptées pour la modernisation.
Dans cette phase, nous prenons en charge la modernisation des parcs avec les limites suivantes :
- Jusqu'à 1 500 points de terminaison de plan de données (proxys) dans le parc.
- Jusqu'à 200 services Cloud Service Mesh dans le parc.