Condividi tramite


Risoluzione dei problemi generali del componente aggiuntivo Service Mesh Istio

Questo articolo illustra le strategie generali (che usano kubectl, istioctle 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

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:

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

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.