Risoluzione dei problemi di supporto delle VM in Anthos Service Mesh
I passaggi e i log seguenti sono utili per la risoluzione dei problemi relativi al supporto delle VM di Anthos Service Mesh.
Esegui il debug della VM
Se noti che le istanze VM sono in esecuzione ma non raggiungibili dal mesh, esegui i passaggi seguenti nell'istanza VM.
Verifica l'agente
Controlla lo stato del proxy del mittente:
curl localhost:15000/ready -v
Controlla il log degli errori di inviati
less /var/log/envoy/envoy.err.log
Verifica la presenza di errori
service-proxy-agent
:journalctl -u service-proxy-agent
Controlla il log
syslog
della suite operativa di Google Cloud per l'istanza o nella VM in/var/log/syslog
per Debian e/var/log/messages
per Centos.
Verifica integrità proxy
Per eseguire il debug della configurazione del proxy, esegui il comando seguente sulla VM:
curl localhost:15000/config_dump > config.out
Copia il file ed esegui il comando seguente:
istioctl proxy-config [cluster|route|listener] --file config.out
Errori del token non validi
Nel log degli errori inviati, potresti visualizzare un errore simile al seguente:
E0217 17:59:17.206995798 2411 oauth2_credentials.cc:152] Call to http server ended with error 500 [{
"error": "invalid_target",
"error_description": "federated token response does not have access token. {\"error\":\"invalid_grant\",\"error_description\":\"JWT expired.\"}",
"error_uri": ""
}].
In questo caso, controlla se il token in /var/run/secrets/tokens/istio-token
nella VM è scaduto e verifica che il valore di exp
(epoca) non sia
scaduto:
cat /var/run/secrets/tokens/istio-token | cut -d '.' -f2 | base64 -d | python -m json.tool
{
...
"azp": "...",
"email": "example-service-account@developer.gserviceaccount.com",
"email_verified": true,
"exp": 1613995395,
"google": {
"compute_engine": {
"instance_creation_timestamp": 1613775765,
"instance_id": "5678",
"instance_name": "vm-instance-03-0mqh",
"project_id": "...",
"project_number": 1234,
"zone": "us-central1-c"
}
},
"iat": ...,
"iss": "https://accounts.google.com",
"sub": "..."
}
Informazioni sugli avvisi di distribuzione del sistema operativo non supportati
In verifica l'agente, se nel log service-proxy-agent viene visualizzato un messaggio di avviso simile al seguente:
E0217 17:59:17.206995798 2021-04-09T21:21:29.6091Z service-proxy-agent Warn
Detected image is unsupported: [Ubuntu|Fedora|Suse]. Envoy may not work correctly.
Ciò significa che la distribuzione di Linux potrebbe non essere supportata, causando potenzialmente un comportamento imprevisto del proxy.
Esegui il debug del cluster
Utilizza la seguente procedura per la risoluzione dei problemi relativi al cluster.
Verificare il funzionamento della registrazione automatica
Controlla la
WorkloadEntry
generata automaticamente daistiod
:kubectl get workloadentry -n WORKLOAD_NAMESPACE
Inoltre, puoi verificarne l'esistenza nel browser degli oggetti Kubernetes.
Se non esiste, verifica la presenza di errori nei log di
istiod
, che dovrebbero essere disponibili nella suite operativa di Google Cloud. In alternativa, puoi recuperarli direttamente:kubectl -n istio-system get pods -l app=istiod
L'output previsto è simile al seguente:
NAME READY STATUS RESTARTS AGE istiod-asm-190-1-7f6699cfb-5mzxw 1/1 Running 0 5d13h istiod-asm-190-1-7f6699cfb-pgvpf 1/1 Running 0 5d13h
Imposta la variabile di ambiente del pod e utilizzala per esportare i log:
export ISTIO_POD=istiod-asm-190-1-7f6699cfb-5mzxw kubectl logs -n istio-system ${ISTIO_POD} | grep -i 'auto-register\|WorkloadEntry'
Controlla i proxy connessi
Puoi utilizzare il comando proxy-status
per elencare tutti i proxy connessi, inclusi quelli per le VM:
istioctl proxy-status
L'output dovrebbe mostrare proxy connessi simili a:
NAME CDS LDS EDS RDS ISTIOD VERSION
details-v1-5f449bdbb9-bhl8d.default SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-5mzxw 1.9.0-asm.1
httpbin-779c54bf49-647vd.default SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-pgvpf 1.9.0-asm.1
istio-eastwestgateway-5b6d4ddd9d-5rzx2.istio-system SYNCED SYNCED SYNCED NOT SENT istiod-asm-190-1-7f6699cfb-pgvpf 1.9.0-asm.1
istio-ingressgateway-66b6ddd7cb-ctb6b.istio-system SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-pgvpf 1.9.0-asm.1
istio-ingressgateway-66b6ddd7cb-vk4bb.istio-system SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-5mzxw 1.9.0-asm.1
vm-instance-03-39b3.496270428946 SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-pgvpf 1.9.0
vm-instance-03-nh5k.496270428946 SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-pgvpf 1.9.0
vm-instance-03-s4nl.496270428946 SYNCED SYNCED SYNCED SYNCED istiod-asm-190-1-7f6699cfb-5mzxw 1.9.0
Per maggiori informazioni sulle opzioni dei comandi, consulta la pagina istioctl proxy-config.
Controlla la configurazione dell'identità del carico di lavoro
Controlla lo stato mesh
per individuare potenziali errori nel cluster. La versione più recente di gcloud è obbligatoria. Per maggiori informazioni, consulta
l'aggiornamento all'ultima versione.
gcloud alpha container hub mesh describe --project=PROJECT_ID
Una configurazione valida avrà un codice di stato OK
per il cluster dei membri:
createTime: '2021-06-15T21:56:10.221032150Z'
featureState:
detailsByMembership:
projects/<your project number>/locations/global/memberships/<your cluster name>:
code: OK
description: Revision(s) ready for use: istiod-asm-195-2.
updateTime: 2021-06-15T21:56:10.221032402Z
lifecycleState: ENABLED
name: projects/<your project name>/locations/global/features/servicemesh
servicemeshFeatureSpec: {}
updateTime: '2021-06-15T21:56:10.221032402Z'
Se la VM non è configurata correttamente, il codice di stato sarà WARNING
con dettagli aggiuntivi nella descrizione:
createTime: '2021-06-15T22:56:10.227167202Z'
featureState:
detailsByMembership:
projects/<your project number>/locations/global/memberships/<your cluster name>:
code: WARNING
description: |-
Revision(s) ready for use: istiod-asm-195-2.
WorkloadGroup <namespace>/<workloadgroup name> missing ServiceAccount field, please see https://cloud.google.com/service-mesh/docs/troubleshooting/troubleshoot-vms#verify_the_workloadgroup_is_set_up_correctly.
servicemeshFeatureState: {}
updateTime: '2021-06-15T22:56:00.220164192Z'
lifecycleState: ENABLED
name: projects/<your project name>/locations/global/features/servicemesh
servicemeshFeatureSpec: {}
updateTime: '2021-06-15T22:56:10.227167402Z'
Verifica che il provider di identità sia configurato correttamente
Controlla i campi della risorsa IdentityProvider
:
kubectl describe identityprovider
Assicurati che i campi soddisfino i seguenti requisiti:
- Il campo
serviceAccount
è impostato surequest.auth.claims["email"]
- Il campo
issuerURI
è impostato suhttps://accounts.google.com
(al momento supportiamo google solo come emittenteURI). Il campo
name
del fornitore in Metadati deve essere impostato sugoogle
, che è l'unico fornitore attualmente supportato.Un esempio di RP
IdentityProvider
valido:apiVersion: security.cloud.google.com/v1alpha1 kind: IdentityProvider metadata: name: google spec: authentication: oidc: issuerUri: https://accounts.google.com serviceAccount: request.auth.claims["email"]
Verifica che WorkloadGroup
sia configurato correttamente
Controlla WorkloadGroup
:
kubectl get workloadgroup -n WORKLOAD_NAMESPACE
Assicurati che i risultati soddisfino questi requisiti:
- Il campo
serviceAccount
è impostato correttamente, ad esempio373206437219-compute@developer.gserviceaccount.com
, dove l'account è lo stesso dell'account di servizio utilizzato dall'istanza VM. - Il
security.cloud.google.com/IdentityProvider
nel campo dell'annotazione è impostato, ad esempiosecurity.cloud.google.com/IdentityProvider: google
Il gruppo di carichi di lavoro fa riferimento a un
IdentityProvider
valido, che puoi verificare controllando il provider di identità esistente:kubectl describe identityprovider
L'output dovrebbe essere un elenco di provider esistenti come questo:
NAME AGE google 39m
Controlla il campo
security.cloud.google.com/IdentityProvider
inWorkloadGroup
se il provider esiste nell'elenco dei provider esistenti.Un esempio di RP
WorkloadGroup
valido:apiVersion: networking.istio.io/v1alpha3 kind: WorkloadGroup metadata: name: wg-a namespace: foo spec: metadata: annotations: security.cloud.google.com/IdentityProvider: google labels: app: wg-a template: ports: grpc: 3550 http: 8080 serviceAccount: 373206437219-compute@developer.gserviceaccount.com
Trovato errore interno
Se ricevi il messaggio Internal Error Found
, consulta l'articolo Assistenza.
Guida alla risoluzione dei problemi di Istio VM
Per ulteriori passaggi per la risoluzione dei problemi, consulta Debug delle macchine virtuali.