Risoluzione dei problemi generali del componente aggiuntivo Service Mesh Istio
Questo articolo illustra le strategie generali (che usano kubectl
, istioctl
e altri strumenti) per risolvere i problemi correlati al componente aggiuntivo Mesh del servizio Istio per Microsoft servizio Azure Kubernetes (servizio Azure Kubernetes). Questo articolo fornisce anche un elenco di possibili messaggi di errore, motivi per le occorrenze degli errori e suggerimenti per risolvere questi errori.
Prerequisiti
Lo strumento kubectl kubernetes o uno strumento simile per connettersi al cluster
Nota: per installare kubectl usando l'interfaccia della riga di comando di Azure, eseguire il comando az aks install-cli .
Strumento da riga di comando Istio istioctl
Strumento URL client (cURL)
Elenco di controllo per la risoluzione dei problemi: uso di kubectl
La procedura di risoluzione dei problemi seguente usa vari kubectl
comandi per eseguire il debug di pod bloccati o errori nel daemon Istio (Istiod).
Passaggio 1: Ottenere i log dei pod Istiod
Ottenere i log dei pod Istiod eseguendo il comando kubectl logs seguente:
kubectl logs --selector app=istiod --namespace aks-istio-system
Passaggio 2: Rimbalzare (eliminare) un pod
Potrebbe essere necessario riavviare un pod. Poiché Istiod è una distribuzione, è possibile eliminare semplicemente il pod eseguendo il comando kubectl delete :
kubectl delete pods <istio-pod> --namespace aks-istio-system
Il pod Istio viene gestito da una distribuzione, quindi il pod viene ricreato e ridistribuito automaticamente dopo aver eliminato direttamente il pod Istio. Pertanto, l'eliminazione del pod è un metodo alternativo per riavviare il pod.
Note
In alternativa, è possibile riavviare la distribuzione direttamente eseguendo il comando kubectl rollout restart seguente:
kubectl rollout restart deployment <istiod-asm-revision> --namespace aks-istio-system
Passaggio 3: Controllare lo stato delle risorse
Se Istiod non è pianificato o se il pod non risponde, è possibile controllare lo stato della distribuzione e dei set di repliche. A tale scopo, eseguire il comando kubectl get :
kubectl get <resource-type> [[--selector app=istiod] | [<resource-name>]]
Lo stato della risorsa corrente viene visualizzato vicino alla fine dell'output. L'output potrebbe anche visualizzare gli eventi associati al ciclo del controller.
Passaggio 4: Ottenere tipi di definizione di risorse personalizzati
Per visualizzare i tipi di definizioni di risorse personalizzate usate da Istio, eseguire il kubectl get
comando :
kubectl get crd | grep istio
Eseguire quindi il comando seguente kubectl get
per elencare tutti i nomi di risorse basati su un determinato CRD:
kubectl get <crd-type> --all-namespaces
Passaggio 5: Visualizzare l'elenco dei pod Istiod
Visualizzare l'elenco dei pod Istiod eseguendo il comando seguente kubectl get
:
kubectl get pod --namespace aks-istio-system --output yaml
Passaggio 6: Ottenere altre informazioni sulla configurazione di Envoy
Se si verificano problemi di connettività tra i pod, ottenere altre informazioni sulla configurazione envoy eseguendo il comando kubectl exec seguente sulla porta di amministrazione di Envoy:
kubectl exec --namespace <pod-namespace> \
"$(kubectl get pods \
--namespace <pod-namespace> \
--selector app=sleep \
--output jsonpath='{.items[0].metadata.name}')" \
--container sleep \
-- curl -s localhost:15000/clusters
Passaggio 7: Ottenere i log sidecar per le sidecar di origine e destinazione
Recuperare i log sidecar per i sidecar di origine e di destinazione eseguendo il comando seguente kubectl logs
due volte (la prima volta per il pod di origine e la seconda volta per il pod di destinazione):
kubectl logs <pod-name> --namespace <pod-namespace> --container istio-proxy
Elenco di controllo per la risoluzione dei problemi: uso di istioctl
La procedura di risoluzione dei problemi seguente descrive come raccogliere informazioni ed eseguire il debug dell'ambiente mesh eseguendo vari istioctl
comandi.
Avviso
Alcuni istioctl
comandi inviano richieste a tutti i sidecar.
Note
Prima di iniziare, si noti che la maggior parte istioctl
dei comandi richiede di conoscere la revisione del piano di controllo. È possibile ottenere queste informazioni dal suffisso delle distribuzioni Istiod o dei pod oppure è possibile eseguire il comando istioctl tag list seguente:
istioctl tag list
Passaggio 1: Assicurarsi che Istio sia installato correttamente
Per verificare di disporre di un'installazione corretta del componente aggiuntivo Istio, eseguire il comando istioctl verify-install seguente:
istioctl verify-install --istioNamespace aks-istio-system --revision <tag>
Passaggio 2: Analizzare gli spazi dei nomi
Per analizzare tutti gli spazi dei nomi o per analizzare uno spazio dei nomi specifico, eseguire il comando istioctl analyze seguente:
istioctl analyze --istioNamespace aks-istio-system \
--revision <tag> \
[--all-namespaces | --namespace <namespace-name>] \
[--failure-threshold {Info | Warning | Error}]
Passaggio 3: Ottenere lo stato del proxy
Per recuperare lo stato del proxy, eseguire il comando istioctl proxy-status seguente:
istioctl proxy-status pod/<pod-name> \
--istioNamespace aks-istio-system \
--revision <tag> \
--namespace <pod-namespace>
Passaggio 4: Scaricare la configurazione del proxy
Per scaricare la configurazione del proxy, eseguire il comando istioctl proxy-config all seguente:
istioctl proxy-config all <pod-name> \
--istioNamespace aks-istio-system \
--namespace <pod-namespace> \
--output json
Note
Anziché usare la all
variante del istioctl proxy-config
comando, è possibile usare una delle varianti seguenti:
- ecds proxy-config istioctl (servizio di individuazione della configurazione dell'estensione)
- istioctl proxy-config bootstrap
- cluster proxy-config istioctl
- endpoint proxy-config istioctl
- listener proxy-config istioctl
- log proxy-config istioctl
- route proxy-config istioctl
- segreto proxy-config istioctl
Passaggio 5: Controllare lo stato di inserimento
Per controllare lo stato di inserimento della risorsa, eseguire il comando check-inject sperimentale istioctl seguente:
istioctl experimental check-inject --istioNamespace aks-istio-system \
--namespace <pod-namespace> \
--labels <label-selector> | <pod-name> | deployment/<deployment-name>
Passaggio 6: Ottenere un report completo dei bug
Un report completo sui bug contiene le informazioni più dettagliate. Tuttavia, può anche richiedere molto tempo in un cluster di grandi dimensioni perché include tutti i pod. È possibile limitare il report di bug a determinati spazi dei nomi. È anche possibile limitare il report a determinate distribuzioni, pod o selettori di etichetta.
Per recuperare un report di bug, eseguire il comando istioctl bug-report seguente:
istioctl bug-report --istioNamespace aks-istio-system \
[--include <namespace-1>[, <namespace-2>[, ...]]]
Elenco di controllo per la risoluzione dei problemi: problemi vari
Passaggio 1: Risolvere i problemi di utilizzo delle risorse
Se si verifica un utilizzo elevato della memoria in Envoy, controllare le impostazioni di Envoy per la raccolta dei dati delle statistiche. Se si personalizzano le metriche Istio tramite MeshConfig, tenere presente che alcune metriche possono avere cardinalità elevata e, di conseguenza, creare un footprint di memoria superiore. Altri campi in MeshConfig, ad esempio la concorrenza, influiscono sull'utilizzo della CPU e devono essere configurati con attenzione.
Per impostazione predefinita, Istio aggiunge informazioni su tutti i servizi presenti nel cluster a ogni configurazione di Envoy. Sidecar può limitare l'ambito di questa aggiunta ai carichi di lavoro solo all'interno di spazi dei nomi specifici. Per altre informazioni, vedere Guardare a questo problema di memoria sidecar proxy Istio.
Ad esempio, la definizione seguente Sidecar
nello aks-istio-system
spazio dei nomi limita la configurazione Envoy per tutti i proxy nella mesh a aks-istio-system
e altri carichi di lavoro all'interno dello stesso spazio dei nomi dell'applicazione specifica.
apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
name: sidecar-restrict-egress
namespace: aks-istio-system # Needs to be deployed in the root namespace.
spec:
egress:
- hosts:
- "./*"
- "aks-istio-system/*"
È anche possibile provare a usare l'opzione Istio discoverySelectors in MeshConfig. L'opzione discoverySelectors
contiene una matrice di selettori Kubernetes e può limitare la consapevolezza di Istiod a spazi dei nomi specifici (anziché a tutti gli spazi dei nomi nel cluster). Per altre informazioni, vedere Usare i selettori di individuazione per configurare gli spazi dei nomi per la mesh del servizio Istio.
Passaggio 2: Risolvere i problemi di configurazione errata del traffico e della sicurezza
Per risolvere i problemi di configurazione comuni relativi alla gestione del traffico e alla sicurezza riscontrati spesso dagli utenti di Istio, vedere Problemi di gestione del traffico e Problemi di sicurezza nel sito Web Istio.
Per collegamenti a informazioni su altri problemi, ad esempio l'inserimento sidecar, l'osservabilità e gli aggiornamenti, vedere Problemi comuni nel sito della documentazione di Istio.
Passaggio 3: Evitare l'overload CoreDNS
I problemi relativi all'overload CoreDNS potrebbero richiedere di modificare determinate impostazioni DNS Istio, ad esempio il dnsRefreshRate
campo nella definizione Istio MeshConfig.
Passaggio 4: Correggere le condizioni di corsa pod e sidecar
Se il pod dell'applicazione viene avviato prima dell'avvio del sidecar Envoy, l'applicazione potrebbe non rispondere o potrebbe essere riavviata. Per istruzioni su come evitare questo problema, vedere Pod o contenitori iniziare con problemi di rete se istio-proxy non è pronto. In particolare, l'impostazione del holdApplicationUntilProxyStarts
campo MeshConfig in defaultConfig
per può aiutare a true
evitare queste condizioni di race.
Passaggio 5: Configurare una voce di servizio quando si usa un proxy HTTP per il traffico in uscita
Se il cluster usa un proxy HTTP per l'accesso a Internet in uscita, è necessario configurare una voce di servizio. Per maggiori informazioni, consultare la sezione Supporto proxy HTTP nel servizio Azure Kubernetes.
Messaggi di errore
La tabella seguente contiene un elenco di possibili messaggi di errore (per la distribuzione del componente aggiuntivo, l'abilitazione dei gateway in ingresso e l'esecuzione di aggiornamenti), il motivo per cui si è verificato un errore e suggerimenti per la risoluzione dell'errore.
Errore | Motivo | Consigli |
---|---|---|
Azure service mesh is not supported in this region |
La funzionalità non è disponibile nell'area durante l'anteprima (è disponibile nel cloud pubblico ma non nel cloud sovrano). | Vedere la documentazione pubblica sulla funzionalità nelle aree supportate. |
Missing service mesh mode: {} |
Non è stata impostata la proprietà mode nel profilo mesh del servizio della richiesta del cluster gestito. | Nel campo ServiceMeshProfile della managedCluster richiesta API impostare la mode proprietà su Istio . |
Invalid istio ingress mode: {} |
Impostare un valore non valido per la modalità di ingresso quando si aggiunge l'ingresso all'interno del profilo mesh del servizio. | Impostare la modalità di ingresso nella richiesta API su External o Internal . |
Too many ingresses for type: {}. Only {} ingress gateway are allowed |
Si è tentato di creare troppi ingresso nel cluster. | Creare al massimo un ingresso esterno e un ingresso interno nel cluster. |
Istio profile is missing even though Service Mesh mode is Istio |
È stato abilitato il componente aggiuntivo Istio senza fornire il profilo Istio. | Quando si abilita il componente aggiuntivo Istio, specificare le informazioni specifiche del componente (gateway in ingresso, CA plug-in) per il profilo Istio e la revisione specifica. |
Istio based Azure service mesh is incompatible with feature %s |
Si è tentato di usare un'altra estensione, un componente aggiuntivo o una funzionalità attualmente incompatibile con il componente aggiuntivo Istio (ad esempio, Open Service Mesh). | Prima di abilitare il componente aggiuntivo Istio, disabilitare prima l'altra funzionalità e pulire tutte le risorse corrispondenti. |
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority |
Non sono stati specificati tutti i parametri necessari per la CA plug-in. | Specificare tutti i parametri obbligatori per la funzionalità dell'autorità di certificazione (CA) plug-in (per altre informazioni, vedere Configurare il componente aggiuntivo mesh di servizi basato su Istio con certificati CA plug-in). |
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature |
Non è stato abilitato il componente aggiuntivo Del driver CSI di Secrets-Store del servizio Azure Kubernetes prima di usare la CA plug-in. | Configurare Azure Key Vault prima di usare la funzionalità ca plug-in. |
'KeyVaultId': '%s' is not a valid Azure keyvault resource identifier. Please make sure that the format matches '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' |
È stato usato un ID risorsa servizio Azure Kubernetes non valido. | Vedere il formato indicato nel messaggio di errore per impostare un ID dell'insieme di credenziali delle chiavi di Azure valido per la funzionalità ca plug-in. |
Kubernetes version is missing in orchestrator profile |
La richiesta manca la versione di Kubernetes. Di conseguenza, non può eseguire un controllo di compatibilità delle versioni. | Assicurarsi di fornire la versione di Kubernetes nelle operazioni di aggiornamento del componente aggiuntivo Istio. |
Service mesh revision %s is not compatible with cluster version %s. To find information about mesh-cluster compatibility, use 'az aks mesh get-upgrades' |
Si è tentato di abilitare una revisione del componente aggiuntivo Istio non compatibile con la versione corrente del cluster Kubernetes. | Usare il comando az aks mesh get-upgrades dell'interfaccia della riga di comando di Azure per informazioni sulle revisioni dei componenti aggiuntivi Istio disponibili per il cluster corrente. |
Kubernetes version %s not supported. Please upgrade to a supported cluster version first. To find compatibility information, use 'az aks mesh get-upgrades' |
Si usa una versione kubernetes non supportata. | Eseguire l'aggiornamento a una versione di Kubernetes supportata. |
ServiceMeshProfile revision field must not be empty |
Si è tentato di aggiornare il componente aggiuntivo Istio senza specificare una revisione. | Specificare la revisione e tutti gli altri parametri . Per altre informazioni, vedere Aggiornamento della revisione secondaria. |
Request exceeds maximum allowed number of revisions (%d) |
Si è tentato di eseguire un'operazione di aggiornamento anche se sono già (%d) installate revisioni. |
Completare o eseguire il rollback dell'operazione di aggiornamento prima di eseguire l'aggiornamento a un'altra revisione. |
Mesh upgrade is in progress. Please complete or roll back the current upgrade before attempting to retrieve versioning and compatibility information |
Si è tentato di accedere alle informazioni di revisione e compatibilità prima di completare o eseguire il rollback dell'operazione di aggiornamento corrente. | Completare o eseguire il rollback dell'operazione di aggiornamento corrente prima di recuperare le informazioni di revisione e compatibilità. |
Riferimenti
Per suggerimenti generali sul debug istio, vedere Strumenti di diagnostica Istio
Risoluzione dei problemi del componente aggiuntivo MeshConfig istio service mesh
Risoluzione dei problemi del gateway in ingresso istio service mesh
Risoluzione dei problemi relativi al certificato CA plug-in istio service mesh
Dichiarazione di non responsabilità sulle informazioni di terze parti
I prodotti di terzi citati in questo articolo sono prodotti da società indipendenti da Microsoft. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti
Contattaci per ricevere assistenza
In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.