Risolvere i problemi gestiti di Anthos Service Mesh

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo documento spiega i problemi comuni di Anthos Service Mesh e come risolverli, ad esempio quando un pod viene inserito con istio.istio-system. Lo strumento di installazione genera errori come i codici di stato HTTP 400 e gli errori di appartenenza al cluster.

Se hai bisogno di ulteriore assistenza per la risoluzione dei problemi di Anthos Service Mesh, consulta la pagina Assistenza.

Segnalazioni di errori come errori non integri

Potresti visualizzare un errore Revision(s) reporting unhealthy generico se il servizio Anthos Service Mesh gestito non dispone dell'account di servizio gestito da Google obbligatorio con le associazioni di ruoli IAM (Anthos Service Service Agent) e Gestione degli accessi. In genere, questo si verifica quando l'autorizzazione per il ruolo Anthos Service Mesh Service Agent viene revocata tramite Terraform, Puppet o la riconfigurazione CI/CD.

I passaggi necessari per risolvere questo errore dipendono da se stai utilizzando la console Google Cloud o Google Cloud CLI.

console Google Cloud

  1. Nella console Google Cloud, vai a IAM e amministrazione & gt; IAM.

  2. Seleziona Includi concessioni di ruoli fornite da Google.

  3. Esamina l'elenco Entità.

    Se vedi l'account di servizio gestito con il ruolo IAM richiesto nell'elenco, significa che è configurato correttamente.

    Se non vedi l'account di servizio gestito obbligatorio con il ruolo IAM richiesto nell'elenco, significa che l'associazione del ruolo IAM dell'agente di servizio Anthos Service Mesh richiesto non esiste nell'account di servizio gestito.

  4. Concedi le associazioni di ruoli IAM di Anthos Service Mesh (roles/anthosservicemesh.serviceAgent) all'account di servizio gestito di Anthos Service Mesh nella console Google Cloud.

Google Cloud CLI

  1. In Google Cloud CLI, esegui il comando seguente per verificare se è configurato il ruolo IAM richiesto:

    gcloud projects get-iam-policy PROJECT_ID  \
    --flatten="bindings[].members" \
    --filter="bindings.members:serviceAccount:service-PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com AND bindings.role:roles/anthosservicemesh.serviceAgent" \
    --format='table(bindings.role)'
    
  2. Esamina l'elenco ROLE.

    Se nell'elenco sono presenti ruoli, questi sono configurati correttamente.

    Se non vedi alcun ruolo nell'elenco, tutti i ruoli dell'account di servizio gestito sono stati revocati.

  3. Esegui il comando seguente per assegnare le associazioni di ruoli IAM appropriate all'account di servizio Anthos Service Mesh:

     gcloud projects add-iam-policy-binding PROJECT_ID \
     --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \
     --role="roles/anthosservicemesh.serviceAgent"
    

Il pod viene inserito con istiod.istio-system

Ciò può verificarsi se non hai sostituito l'etichetta istio-injection: enabled.

Inoltre, verifica la configurazione dei webhook mutanti utilizzando il comando seguente:

kubectl get mutatingwebhookconfiguration

...
istiod-asm-managed
…
# may include istio-sidecar-injector

kubectl get mutatingwebhookconfiguration   istio-sidecar-injector -o yaml

# Run debug commands
export T=$(echo '{"kind":"TokenRequest","apiVersion":"authentication.k8s.io/v1","spec":{"audiences":["istio-ca"], "expirationSeconds":2592000}}' | kubectl create --raw /api/v1/namespaces/default/serviceaccounts/default/token -f - | jq -j '.status.token')

export INJECT_URL=$(kubectl get mutatingwebhookconfiguration istiod-asmca -o json | jq -r .webhooks[0].clientConfig.url)
export ISTIOD_ADDR=$(echo $INJECT_URL | 'sed s/\/inject.*//')

curl -v -H"Authorization: Bearer $T" $ISTIOD_ADDR/debug/configz

Lo strumento di installazione genera errori HTTP 400

Lo strumento di installazione potrebbe generare errori HTTP 400 come il seguente:

HealthCheckContainerError, message: Cloud Run error: Container failed to start.
Failed to start and then listen on the port defined by the PORT environment
variable. Logs for this revision might contain more information.

L'errore può verificarsi se non hai abilitato Workload Identity nel cluster Kubernetes, cosa che puoi fare utilizzando il seguente comando:

export CLUSTER_NAME=...
export PROJECT_ID=...
export LOCATION=...
gcloud container clusters update $CLUSTER_NAME --zone $LOCATION \
    --workload-pool=$PROJECT_ID.svc.id.goog

Stato del piano dati gestito

Il seguente comando mostra lo stato del piano dati gestito:

gcloud container fleet mesh describe --project PROJECT_ID

La tabella seguente elenca tutti i possibili stati dei piani dati gestiti:

Stato Codice Descrizione
ACTIVE OK Il piano dati gestito è in esecuzione normalmente.
DISABLED DISABLED Il piano dati gestito sarà in questo stato se non verrà configurato alcuno spazio dei nomi o nessuna revisione per l'utilizzo. Segui le istruzioni per abilitare Anthos Service Mesh gestito tramite l'API del parco risorse o abilitare il piano dati gestito dopo il provisioning di Anthos Service Mesh gestito con asmcli. Tieni presente che i report sullo stato del piano dati gestito sono disponibili solo se hai abilitato il piano dati gestito annotando uno spazio dei nomi o una revisione. Annotazione dei singoli pod fa sì che tali pod siano gestiti, ma con uno stato di funzionalità pari a DISABLED se non sono presenti spazi dei nomi o revisioni.
FAILED_PRECONDITION MANAGED_CONTROL_PLANE_REQUIRED Il piano dati gestito richiede un piano di controllo Anthos Service Mesh gestito attivo.
PROVISIONING PROVISIONING È in corso il provisioning del piano dati gestito. Se questo stato persiste per oltre 10 minuti, è probabile che si sia verificato un errore e devi contattare l'assistenza.
STALLED INTERNAL_ERROR Il piano dati gestito non è operativo a causa di una condizione di errore interna. Se il problema persiste, contatta l'assistenza.
NEEDS_ATTENTION UPGRADE_FAILURES Il piano dati gestito richiede un intervento manuale per ripristinare lo stato normale del servizio. Per saperne di più e per informazioni su come risolvere questo problema, vedi lo stato di NEEDS_ATTENTION.

Stato NEEDS_ATTENTION

Se il comando gcloud container fleet mesh describe mostra che lo stato del piano dati gestito è in stato NEEDS_ATTENTION e il codice è UPGRADE_FAILURES, il piano dati gestito non è riuscito a eseguire l'upgrade di determinati carichi di lavoro. Questi carichi di lavoro verranno etichettati con dataplane-upgrade: failed dal servizio del piano dati gestito per ulteriori analisi. L'upgrade dei proxy deve essere eseguito manualmente. Per ottenere l'elenco dei pod che richiedono attenzione, esegui questo comando:

kubectl get pods --all-namespaces -l dataplane-upgrade=failed

Errore di appartenenza al cluster (nessun provider di identità specificato)

Lo strumento di installazione potrebbe non riuscire a causa di errori di appartenenza al cluster come il seguente:

asmcli: [ERROR]: Cluster has memberships.hub.gke.io CRD but no identity
provider specified. Please ensure that an identity provider is available for the
registered cluster.

L'errore può verificarsi se non hai abilitato identità del carico di lavoro GKE prima di registrare il cluster. Puoi registrare nuovamente il cluster dalla riga di comando utilizzando gcloud container fleet memberships register --enable-workload-identity commmand.

Codici bloccati di ControlPlaneRevision

Esistono diversi motivi per cui la condizione Stalled potrebbe diventare vera nello stato ControlPlaneRevisions.

Motivo Messaggio Descrizione
Precondizione non riuscita Sono supportati solo gli abbonamenti GKE, ma ${CLUSTER_NAME} non è un cluster GKE. Il cluster attuale non sembra essere un cluster GKE. Il piano di controllo gestito funziona solo sui cluster GKE.
Nome ControlPlaneReview non supportato: ${NAME} Il nome di ControlPlaneReview deve essere uno dei seguenti:
  • gestito da asm
  • asm-gestito-rapid
  • stabile-gestito da asm
Spazio dei nomi ControlPlaneRevision non supportato: ${NAMESPACE} Lo spazio dei nomi di ControlPlaneReview deve essere istio-system.
Canale ${CHANNEL} non supportato per ControlPlaneReview con nome${NAME}. Valore previsto: ${OTHER_CHANNEL} Il nome di ControlPlaneReview deve corrispondere al canale di ControlPlaneReview con il seguente:
  • gestito da asm -> normale
  • asm-managed-rapid -> rapido
  • asm-managed-stable -> stabile
Il canale non deve essere omesso o vuoto Channel è un campo obbligatorio su ControlPlaneReview. Manca o è vuota nella risorsa personalizzata.
Tipo di revisione del piano di controllo non supportato: ${TYPE} managed_service è l'unico campo consentito per il campo ControlPlaneReviewType.
Versione di Kubernetes non supportata: ${VERSION} Sono supportate le versioni 1.15+ di Kubernetes.
Workload Identity non è abilitato Abilita Workload Identity nel tuo cluster.
Pool di carichi di lavoro non supportato: ${POOL} Il pool dei carichi di lavoro deve essere nel formato ${PROJECT_ID}.svc.id.goog.
Il progetto del cluster e il progetto dell'ambiente non corrispondono I cluster devono far parte dello stesso progetto in cui sono registrati al parco risorse.
Provisioning non riuscito Si è verificato un errore durante l'aggiornamento delle risorse del cluster Google non è riuscita ad aggiornare le risorse nel cluster come CRD e webhook.
MutatingWebhookConfiguration "istiod-asm-managed" contiene un webhook con URL di ${EXISTING_URL} ma previsto ${expected_URL} Google non sovrascriverà i webhook esistenti per evitare problemi di installazione. Aggiornalo manualmente se vuoi.
ValidatingWebhookConfiguration ${NAME} contiene un webhook con URL di ${EXISTING_URL} ma con un valore previsto ${expected_URL} Google non sovrascriverà i webhook esistenti per evitare problemi di installazione. Aggiornalo manualmente se vuoi.