Comprendre la compatibilité de Cloud Service Mesh

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 é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 de validation pour le parc. Cela déclenche un audit continu de toutes les configurations Istio, des configurations d'infrastructure et des paramètres d'échelle. L'activation de ces vérifications n'apporte aucune modification à votre parc ni à vos clusters. Elle permet uniquement de générer des 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 règle générale, 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 pour la modernisation.

Désactiver les vérifications

Pour arrêter la génération de 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 individuels.

Comprendre la compatibilité

La compatibilité de modernisation est signalée à l'aide de conditions au niveau du parc et de l'appartenance (cluster). Le système effectue diverses vérifications à différents moments, toutes les vérifications étant exécutées au moins une fois par jour. Prévoyez jusqu'à un jour pour que l'état soit mis à jour après l'activation des vérifications ou l'application de correctifs.

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

gcloud container fleet mesh describe --project FLEET_PROJECT_ID

Compatibilité au niveau du cluster

Recherchez les conditions avec une gravité WARNING ou ERROR sous membershipStates.servicemesh pour chaque cluster provisionné par Cloud Service Mesh dans le parc. En cas d'incompatibilité, le résultat est semblable à celui-ci :

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 le documentationLink fourni 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 :

  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 vérifier :

    1. Modifiez les spécifications YAML de vos déploiements ou pods pour supprimer ou modifier les annotations identifiées, en vous assurant qu'elles n'incluent aucune annotation non compatible. Appliquez à nouveau le fichier YAML mis à jour à votre cluster.
    2. Une fois toutes les annotations de pod corrigées, la condition MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION ne s'affichera 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 (CR) 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 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 :

  1. Analyser les détails de la condition : 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. Pour l'exemple de détails fourni, vous devrez 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 qui échouent aux vérifications de compatibilité. Les outils kubectl et jq doivent être installés pour que le script fonctionne. Le résultat inclut les détails spécifiques de l'erreur trouvée 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. 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 Fonctionnalités compatibles de Cloud Service Mesh géré et API Istio non compatibles. (Par exemple, dans l'exemple fourni, mettez à jour la ServiceEntry résolution de DNS_ROUND_ROBIN à DNS).

  4. Vérifier les correctifs : après avoir appliqué les correctifs, prévoyez jusqu’à 24 heures pour que les vérifications périodiques mettent à jour l’état.

    • La condition ModernizationCompatible sur 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 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
      
    • Exécutez à nouveau 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 cette appartenance.