Risoluzione dei problemi di Cloud Service Mesh gestito
Questo documento spiega i problemi comuni di Cloud Service Mesh e come risolverli, ad esempio quando un pod viene inserito con istio.istio-system
, lo strumento di installazione genera errori come codici di stato HTTP 400
ed errori di appartenenza al cluster.
Se hai bisogno di ulteriore assistenza per la risoluzione dei problemi di Cloud Service Mesh, consulta la sezione Richiedere assistenza.
Segnalazione di errore relativo allo stato non integro delle revisioni
Potresti visualizzare un errore Revision(s) reporting unhealthy
generico se l'agente di servizio per Cloud Service Mesh gestito non dispone del ruolo Identity and Access Management (IAM) richiesto. In genere, ciò si verifica quando il ruolo viene revocato
da Terraform, Puppet o dalla riconfigurazione CI/CD.
I passaggi necessari per risolvere il problema di questo errore dipendono dall'utilizzo della console Google Cloud o di Google Cloud CLI.
Console Google Cloud
Nella console Google Cloud , vai a IAM e amministrazione > IAM.
Seleziona Includi concessioni di ruoli fornite da Google.
Esamina l'elenco dei principali.
Se nell'elenco vedi l'agente di servizio con il ruolo IAM richiesto, significa che è configurato correttamente.
Se l'elenco non include l'agente di servizio e il ruolo richiesto, vai al passaggio successivo.
Concedi il ruolo Agente di servizio Anthos Service Mesh (
roles/anthosservicemesh.serviceAgent
) all'agente di servizio Cloud Service Mesh nel progetto. Per istruzioni, vedi Gestisci l'accesso a progetti, cartelle e organizzazioni.
Google Cloud CLI
In Google Cloud CLI, esegui questo comando per verificare se è stato concesso 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)'
Esamina l'elenco
ROLE
.Se vedi dei ruoli nell'elenco, significa che la configurazione è corretta.
Se non vedi alcun ruolo nell'elenco, significa che il ruolo richiesto è stato revocato.
Per concedere il ruolo richiesto al service agent, esegui questo comando:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --role="roles/anthosservicemesh.serviceAgent"
Lo strumento di installazione genera errori HTTP 400
Lo strumento di installazione potrebbe generare errori HTTP 400
come i seguenti:
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 attivato Workload Identity sul tuo 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 del piano dati gestito:
Stato | Codice | Descrizione |
---|---|---|
ACTIVE |
OK |
Il piano dati gestito funziona normalmente. |
DISABLED |
DISABLED |
Il piano dati gestito si troverà in questo stato se non è configurato per utilizzare uno spazio dei nomi o una revisione. Segui le istruzioni per
abilitare Cloud Service Mesh gestito tramite l'API Fleet oppure
abilitare il data plane gestito dopo il provisioning di Cloud Service Mesh gestito con asmcli .
Tieni presente che i report sullo stato del piano dati gestito sono disponibili solo se
hai attivato il piano dati gestito annotando uno spazio dei nomi o una revisione.
L'annotazione dei singoli pod comporta la gestione di questi pod, ma con uno
stato della funzionalità DISABLED se non vengono annotati spazi dei nomi o revisioni. |
FAILED_PRECONDITION |
MANAGED_CONTROL_PLANE_REQUIRED |
Il data plane gestito richiede un control plane Cloud Service Mesh gestito attivo. |
PROVISIONING |
PROVISIONING |
È in corso il provisioning del piano dati gestito. Se questo stato persiste per più di 10 minuti, probabilmente si è verificato un errore e devi contattare l'assistenza. |
STALLED |
INTERNAL_ERROR |
Il piano dati gestito non può funzionare a causa di una condizione di errore interno. Se il problema persiste, contatta l'assistenza. |
NEEDS_ATTENTION |
UPGRADE_FAILURES |
Il piano dati gestito richiede un intervento manuale per riportare il servizio allo stato normale. Per ulteriori informazioni e su come risolvere
questo problema, vedi
Stato NEEDS_ATTENTION . |
NEEDS_ATTENTION
stato
Se il comando gcloud container fleet mesh describe
mostra che lo stato del piano
di dati gestito è NEEDS_ATTENTION
e il codice è
UPGRADE_FAILURES
, l'upgrade di determinati
carichi di lavoro del piano di dati gestito non è riuscito. Questi carichi di lavoro verranno etichettati con dataplane-upgrade: failed
dal servizio di piano dati gestito per ulteriori analisi. I proxy devono essere
riavviati manualmente per essere aggiornati. 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 i seguenti:
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 l'identità del workload GKE
prima di registrare il cluster. Puoi registrare nuovamente il cluster sulla riga di comando utilizzando il comando gcloud container fleet memberships register --enable-workload-identity
.
Controllare lo stato del piano di controllo gestito
Per controllare lo stato del control plane gestito, esegui
gcloud container fleet mesh describe --project FLEET_PROJECT_ID
.
Nella risposta, il campo
membershipStates[].servicemesh.controlPlaneManagement.details
potrebbe
spiegare l'errore specifico.
Se hai bisogno di ulteriori dettagli, controlla la ControlPlaneRevision
risorsa personalizzata
nel cluster, che viene aggiornata quando viene eseguito il provisioning del piano di controllo gestito
o il provisioning non va a buon fine.
Per esaminare lo stato della risorsa, sostituisci NAME con il valore
corrispondente a ciascun canale: asm-managed
, asm-managed-stable
o
asm-managed-rapid
.
kubectl describe controlplanerevision NAME -n istio-system
L'output è simile al seguente:
Name: asm-managed … Status: Conditions: Last Transition Time: 2021-08-05T18:56:32Z Message: The provisioning process has completed successfully Reason: Provisioned Status: True Type: Reconciled Last Transition Time: 2021-08-05T18:56:32Z Message: Provisioning has finished Reason: ProvisioningFinished Status: True Type: ProvisioningFinished Last Transition Time: 2021-08-05T18:56:32Z Message: Provisioning has not stalled Reason: NotStalled Status: False Type: Stalled
La condizione Reconciled
determina se il piano di controllo gestito è
in esecuzione correttamente. Se true
, il control plane è in esecuzione.
Stalled
determina se il processo di provisioning del piano di controllo gestito ha
riscontrato un errore. Se Stalled
, il campo Message
contiene ulteriori informazioni sull'errore specifico. Per ulteriori informazioni sui possibili errori, consulta la sezione Codici bloccati.
ControlPlaneRevision Stalled Codes
Esistono diversi motivi per cui la condizione Stalled
potrebbe diventare vera nello stato
ControlPlaneRevisions
.
Motivo | Messaggio | Descrizione |
---|---|---|
PreconditionFailed | Sono supportate solo le appartenenze GKE, ma ${CLUSTER_NAME} non è un cluster GKE. | Il cluster attuale non sembra essere un cluster GKE. Il control plane gestito funziona solo sui cluster GKE. |
Nome ControlPlaneRevision non supportato: ${NAME} | Il nome di ControlPlaneRevision deve essere uno dei seguenti:
|
|
Spazio dei nomi ControlPlaneRevision non supportato: ${NAMESPACE} | Lo spazio dei nomi di ControlPlaneRevision deve essere istio-system . |
|
Canale ${CHANNEL} non supportato per ControlPlaneRevision con nome${NAME}. Previsto ${OTHER_CHANNEL} | Il nome di ControlPlaneRevision deve corrispondere al canale di ControlPlaneRevision con quanto segue:
|
|
Il canale non deve essere omesso o vuoto | Channel è un campo obbligatorio in ControlPlaneRevision. È mancante o vuoto nella risorsa personalizzata. |
|
Tipo di revisione del control plane non supportato: ${TYPE} | managed_service è l'unico campo consentito per il campo ControlPlaneRevisionType. |
|
Versione di Kubernetes non supportata: ${VERSION} | Sono supportate le versioni di Kubernetes 1.15 e successive. | |
Workload Identity non è abilitata | Attiva Workload Identity sul cluster. | |
Pool di workload non supportato: ${POOL} | Il pool di workload deve avere il formato ${PROJECT_ID}.svc.id.goog . |
|
ProvisioningFailed | Si è verificato un errore durante l'aggiornamento delle risorse del cluster | Google non è riuscito ad aggiornare le risorse in-cluster, come CRD e webhook. |
MutatingWebhookConfiguration "istiod-asm-managed" contiene un webhook con l'URL ${EXISTING_URL}, ma è previsto ${EXPECTED_URL} | Google non sovrascriverà i webhook esistenti per evitare di interrompere l'installazione. Aggiorna manualmente questo valore se è il comportamento desiderato. | |
ValidatingWebhookConfiguration ${NAME} contiene un webhook con URL ${EXISTING_URL}, ma è previsto ${EXPECTED_URL} | Google non sovrascriverà i webhook esistenti per evitare di interrompere l'installazione. Aggiorna manualmente questo valore se è il comportamento desiderato. |
Managed Cloud Service Mesh non riesce a connettersi al cluster GKE
Tra giugno 2022 e settembre 2022, Google ha completato il lavoro di sicurezza relativo a reti autorizzate, Cloud Run e Cloud Run Functions su Google Kubernetes Engine (GKE). I progetti che in precedenza utilizzavano Cloud Service Mesh gestito ma hanno smesso di utilizzarlo prima della migrazione non dispongono dell'API richiesta per la comunicazione tra Cloud Run e GKE.
In questo scenario, il provisioning di Cloud Service Mesh gestito non andrà a buon fine e Cloud Logging visualizzerà il seguente messaggio di errore:
Connect Gateway API has not been used in project [*PROJECT_NUMBER*] before or it is disabled.
Enable it by visiting https://console.developers.google.com/apis/api/connectgateway.googleapis.com/overview?project=[*PROJECT_NUMBER*] then retry.
If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
Filtra questo messaggio utilizzando la seguente query:
resource.type="istio_control_plane"
resource.labels.project_id=[*PROJECT_ID*]
resource.labels.location=[*REGION*]
severity=ERROR
jsonPayload.message=~"Connect Gateway API has not been used in project"
Nel frattempo, anche l'inserimento di sidecar e il deployment di risorse personalizzate Kubernetes correlate a Cloud Service Mesh non andranno a buon fine e Cloud Logging visualizzerà il seguente messaggio di avviso:
Error creating: Internal error occurred: failed calling webhook
"rev.namespace.sidecar-injector.istio.io": failed to call webhook: an error on
the server ("unknown") has prevented the request from succeeding.
Filtra questo messaggio utilizzando la seguente query:
resource.type="k8s_cluster"
resource.labels.project_id=[*PROJECT_ID*]
resource.labels.location=[*REGION*]
resource.labels.cluster_name=[*CLUSTER_NAME*]
severity=WARNING
jsonPayload.message=~"Internal error occurred: failed calling webhook"
Per risolvere il problema:
Abilita l'API
connectgateway
richiesta:gcloud services enable connectgateway.googleapis.com --project=[*PROJECT_ID*]
Esegui un riavvio in sequenza dei workload.
Le APIGoogle Cloud non sono abilitate
Se il tuo parco di Cloud Service Mesh gestito utilizza l'TRAFFIC_DIRECTOR
implementazione del control plane,
devono essere abilitate determinate API.
Abilita tutte le API richieste, incluse quelle elencate come "Può essere disabilitato" quando non utilizzi Cloud Service Mesh gestito.
gcloud services enable --project=[*PROJECT_ID*] \ trafficdirector.googleapis.com \ networkservices.googleapis.com \ networksecurity.googleapis.com
Assicurati di non avere strumenti automatizzati che annullino questa modifica. Se l'errore si ripresenta, aggiorna le configurazioni o le liste consentite pertinenti.