Informazioni sulla compatibilità di Cloud Service Mesh

Questa guida descrive in dettaglio come valutare la compatibilità di un parco risorse per la modernizzazione del control plane verificando che la sua configurazione, la sua infrastruttura e la sua scalabilità siano compatibili con l'implementazione del control plane TRAFFIC_DIRECTOR.

Attivare o disattivare i controlli di compatibilità

Per avviare i controlli di compatibilità, attiva la modalità di convalida per il parco risorse, che attiva un controllo continuo di tutte le configurazioni Istio, delle configurazioni dell'infrastruttura e dei parametri di scalabilità. L'attivazione di questi controlli non comporta modifiche al parco risorse o ai cluster; consente solo la generazione di report sulla compatibilità.

Abilita controlli

Per iniziare il controllo di compatibilità, esegui questo comando gcloud:

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

Sostituisci FLEET_PROJECT_ID con l'ID del tuo progetto host del parco risorse. In genere, FLEET_PROJECT_ID ha lo stesso nome del progetto.

Una volta abilitato, Cloud Service Mesh inizia a valutare il parco risorse e tutti i cluster di cui è stato eseguito il provisioning in Cloud Service Mesh nel parco risorse per la compatibilità con la modernizzazione.

Disattiva i controlli

Per interrompere la generazione di report sui risultati di compatibilità, esegui questo comando:

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

Questo comando rimuove le condizioni di compatibilità della modernizzazione dagli stati di appartenenza, nonché lo stato ModernizationCompatible dai CR Istio individuali.

Informazioni sulla compatibilità

La compatibilità con la modernizzazione viene segnalata utilizzando le condizioni a livello di parco risorse e di appartenenza (cluster). Il sistema esegue vari controlli in momenti diversi, con tutti i controlli eseguiti almeno una volta al giorno. Attendi fino a un giorno per l'aggiornamento dello stato dopo aver attivato i controlli o applicato le correzioni.

Per visualizzare questi risultati, recupera lo stato più recente della mesh con il seguente comando:

gcloud container fleet mesh describe --project FLEET_PROJECT_ID

Compatibilità a livello di parco risorse

Visualizza lo stato complessivo della modernizzazione del parco risorse in state.servicemesh.conditions.

  • La flotta è compatibile: se la tua flotta è compatibile, vedrai una condizione con il codice 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
    
  • Il parco risorse non è compatibile: se il tuo parco risorse non è ancora compatibile per la modernizzazione, vedrai una condizione con il codice 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
    

    Se il tuo parco risorse non è compatibile, esamina le condizioni per lacune specifiche. Controlla la presenza di condizioni aggiuntive a livello di parco risorse con gravità WARNING o ERROR, nonché condizioni a livello di cluster in membershipStates.servicemesh per risolvere eventuali blocchi.

Compatibilità a livello di cluster

Cerca le condizioni con gravità WARNING o ERROR in membershipStates.servicemesh per ogni cluster di Cloud Service Mesh di cui è stato eseguito il provisioning nel parco risorse. Se esistono incompatibilità, l'output è simile a questo:

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
...

Segui le documentationLink fornite in ogni condizione per comprendere e risolvere l'incompatibilità specifica.

Risolvere i problemi di compatibilità

Risolvi le annotazioni dei pod incompatibili

Il codice MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION indica che il cluster non può essere modernizzato al control plane TRAFFIC_DIRECTOR perché alcuni pod hanno annotazioni Istio non supportate o non valide.

Output di esempio del comando gcloud container fleet mesh describe con la condizione MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION impostata per l'appartenenza:

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

Per risolvere queste annotazioni del pod:

  1. Identifica le annotazioni problematiche: controlla il campo details della condizione di stato per trovare le chiavi di annotazione non supportate o non valide. Trova tutti i pod con le chiavi di annotazione problematiche.

  2. Correggi e verifica:

    1. Modifica le specifiche YAML per i tuoi deployment o pod per assicurarti che utilizzino solo annotazioni supportate (tutte le altre annotazioni non sono supportate). Rimuovi le annotazioni non supportate, correggi i valori non validi e riapplica il file YAML aggiornato al cluster.
    2. Una volta corrette tutte le annotazioni del pod, la condizione MODERNIZATION_INCOMPATIBLE_POD_ANNOTATION non verrà più visualizzata per l'abbonamento.

Risolvere le configurazioni incompatibili

Il codice MODERNIZATION_INCOMPATIBLE_CONFIG indica che non è possibile modernizzare il cluster al control plane TRAFFIC_DIRECTOR a causa di configurazioni incompatibili. Queste incompatibilità possono derivare da:

  • Risorse personalizzate (CR) Istio specifiche che utilizzano funzionalità o campi non supportati o che contengono valori non validi.
  • Impostazioni MeshConfig di Istio non valide o non supportate.
  • Superamento dei limiti di scalabilità.
  • Utilizzo di annotazioni di servizi o spazi dei nomi non supportate.

Output di esempio del comando gcloud container fleet mesh describe con la condizione MODERNIZATION_INCOMPATIBLE_CONFIG impostata per l'appartenenza:

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

Per risolvere questi problemi di configurazione:

  1. Analizza i dettagli della condizione: controlla il campo details della condizione di stato. Riassume i singoli errori e identifica i tipi di risorse con problemi di configurazione. Per l'esempio di dettagli fornito, dovrai risolvere i problemi relativi a scalabilità e MeshConfig e controllare le risorse Gateway e ServiceEntry per rilevare errori.

  2. Identifica e analizza le risorse incompatibili: utilizza il seguente script per elencare tutte le risorse personalizzate (CR) di Istio che non superano i controlli di compatibilità. Lo script richiede l'installazione di kubectl e jq. L'output include i dettagli specifici dell'errore rilevato in status.conditions (tipo: ModernizationCompatible, stato: "False") di ogni risorsa.

    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
    

    Output di esempio:

    --- 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. Correggi e applica le configurazioni: modifica il file YAML rimuovendo i campi non supportati o sostituendo i valori non validi con quelli compatibili. Per assistenza, consulta la documentazione Funzionalità supportate di Cloud Service Mesh gestito e API Istio non supportate. Ad esempio, nell'esempio fornito, aggiorna la risoluzione ServiceEntry da DNS_ROUND_ROBIN a DNS.

  4. Verifica delle correzioni: dopo aver applicato le correzioni, attendi fino a 24 ore per l'aggiornamento dello stato tramite controlli periodici.

    • La condizione ModernizationCompatible per le risorse fisse deve cambiare in stato: "True". Controlla lo stato della risorsa utilizzando:

      kubectl get resource name -n namespace -o yaml
      

      Output di esempio:

      status:
        conditions:
        - lastTransitionTime: "2026-06-05T06:12:52.219963391Z"
          message: Resource is compatible for modernization
          reason: Compatible
          status: "True"
          type: ModernizationCompatible
      
    • Esegui di nuovo il comando gcloud container fleet mesh describe. Una volta risolti tutti i problemi correlati, la condizione MODERNIZATION_INCOMPATIBLE_CONFIG non verrà più visualizzata per l'abbonamento.

Risolvere problemi di scalabilità del parco veicoli incompatibile

Il codice MODERNIZATION_INCOMPATIBLE_FLEET_SCALE indica che non è possibile modernizzare il parco risorse al control plane TRAFFIC_DIRECTOR perché la scalabilità delle risorse nel parco risorse supera i limiti supportati per la modernizzazione.

In questa fase supportiamo l'ammodernamento delle flotte con i seguenti limiti: