Comprendre la compatibilité de Cloud Service Mesh

Ce guide explique en détail 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 échelle 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 validation pour le parc. Cela 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'entraîne aucune modification de votre parc ni de vos clusters. Elle permet uniquement de générer des rapports de compatibilité.

Activer les vérifications

Pour commencer 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 Cloud Service Mesh du parc avec la modernisation.

Désactiver les vérifications

Pour arrêter le signalement des 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 la modernisation des états d'appartenance, ainsi que l'état ModernizationCompatible des ressources personnalisées Istio individuelles.

Comprendre la compatibilité

La compatibilité avec la modernisation est indiqué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 effectuées au moins une fois par jour. Laissez passer jusqu'à un jour pour que l'état soit mis à jour après l'activation des vérifications ou l'application des corrections.

Pour afficher ces résultats, récupérez le dernier état du réseau maillé à l'aide de la commande suivante :

gcloud container fleet mesh describe --project FLEET_PROJECT_ID

Compatibilité au niveau du parc

Affichez l'état global de la modernisation de votre parc sous state.servicemesh.conditions.

  • Le parc est compatible : si votre parc est compatible, une condition avec le code MODERNIZATION_COMPATIBLE s'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: INFO
    
  • Le parc n'est pas compatible : si votre parc n'est pas encore compatible avec la modernisation, une condition avec le code MODERNIZATION_INCOMPATIBLE s'affiche :

    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
    

    Si votre parc n'est pas compatible, examinez les conditions pour identifier les lacunes spécifiques. Recherchez d'autres conditions au niveau du parc de gravité WARNING ou ERROR, ainsi que des conditions au niveau du cluster sous membershipStates.servicemesh pour résoudre les éventuels problèmes bloquants.

Compatibilité au niveau du cluster

Recherchez les conditions de gravité WARNING ou ERROR sous membershipStates.servicemesh pour chaque cluster provisionné Cloud Service Mesh du parc. S'il existe des incompatibilités, le résultat est semblable à 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 problèmes d'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 :

  1. Identifier les annotations problématiques : vérifiez le champ details de la condition d'état pour trouver les clés d'annotation non compatibles ou non valides. Recherchez tous les pods avec les clés d'annotation problématiques.

  2. Corriger et valider :

    1. Modifiez les spécifications YAML de vos déploiements ou pods pour supprimer ou modifier les annotations identifiées, en veillant à ce qu'elles n'incluent aucune annotation non compatible. Appliquez à nouveau le fichier YAML mis à jour à votre cluster.
    2. Une fois que toutes les annotations de pod sont corrigées, la condition MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION ne s'affiche 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 être dues aux é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 MeshConfig Istio non valides ou non acceptés.
  • 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 :

  1. Analysez les détails de l'état : vérifiez le champ details de la condition d'état. Il récapitule les erreurs individuelles et identifie les types de ressources présentant des problèmes de configuration. Dans l'exemple de détails fourni, vous devez résoudre les problèmes d'échelle et de MeshConfig, et inspecter les ressources Gateway et ServiceEntry pour détecter les erreurs.

  2. Identifier et examiner les ressources incompatibles : utilisez le script suivant pour lister toutes les ressources personnalisées (CR) Istio dont les vérifications de compatibilité ont échoué. Le script nécessite l'installation de kubectl et jq. La sortie inclut les détails spécifiques des erreurs trouvées sous status.conditions (type : ModernizationCompatible, état : "False") de chaque 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
    

    Exemple 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"
      ]
    }
    
  3. Corrigez et appliquez 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 avec Cloud Service Mesh géré et les API Istio non compatibles. (Par exemple, dans l'exemple fourni, mettez à jour la résolution ServiceEntry de DNS_ROUND_ROBIN à DNS.)

  4. Vérifiez les corrections : après avoir appliqué les corrections, attendez jusqu'à 24 heures que les vérifications périodiques mettent à jour l'état.

    • La condition ModernizationCompatible sur les ressources fixes 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 yaml
      

      Exemple de résultat :

      status:
        conditions:
        - lastTransitionTime: "2026-06-05T06:12:52.219963391Z"
          message: Resource is compatible for modernization
          reason: Compatible
          status: "True"
          type: ModernizationCompatible
      
    • Réexécutez la commande gcloud container fleet mesh describe. Une fois tous les problèmes associés résolus, la condition MODERNIZATION_INCOMPATIBLE_CONFIG ne s'affichera plus pour cet abonnement.

Résoudre les problèmes d'incompatibilité de la taille du parc

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.

Au cours de cette phase, nous vous aidons à moderniser vos parcs avec les limites suivantes :

  • Jusqu'à 1 500 points de terminaison (proxys) du plan de données dans l'ensemble du parc.
  • Jusqu'à 200 services Cloud Service Mesh dans le parc.