Risoluzione dei problemi relativi a proxy/webhook collaterali in Anthos Service Mesh
Questa sezione illustra i problemi comuni di Anthos Service Mesh e come risolverli. Se hai bisogno di ulteriore aiuto, vedi Ricevere assistenza.
Anthos Service Mesh contiene due webhook:
- La convalida del webhook garantisce che la configurazione Istio applicata sia valida.
- Il webhook mutante imposta l'inserimento automatico del sidecar sui nuovi pod.
Un problema di configurazione in uno di questi webhook potrebbe causare l'avvio non riuscito dei nuovi pod o la generazione di messaggi di errore di kubectl apply
.
Problemi di inserimento sidecar
L'iniezione di sidecar non funziona correttamente se si verifica uno dei seguenti problemi:
- pod pianificati senza sidecar
- i pod in cui è necessario inserire i file collaterali non vengono mai visualizzati quando si utilizza
kubectl get pods
, ma esiste il set di replica corrispondente dakubectl get replicaset
.
Per risolvere i problemi di inserimento dei file collaterali, procedi nel seguente modo.
Verifica che lo spazio dei nomi o il pod abbia l'etichetta di inserimento corretta.
Se esegui Istio a singola revisione (impostazione predefinita), verifica che lo spazio dei nomi o le specifiche dei pod abbiano l'etichetta istio-injection=enabled.
Se esegui Istio a più revisioni (per migrazioni senza tempi di inattività, più piani di controllo e così via), verifica che lo spazio dei nomi o la specifica del pod abbiano l'etichetta
istio.io/rev=REVISION
appropriata, dove REVISION è il numero di revisione di Anthos Service Mesh suistiod
che corrisponde alla versione di Anthos Service Mesh selezionata. Per ulteriori informazioni sulle etichette di revisione, consulta la pagina relativa all'inserimento di proxy sidecar.Verifica che il webhook di iniezione del sidecar istio sia presente e abbia un bundle CA.
Il webhook injector sidecar (utilizzato per l'inserimento automatico di sidecar) richiede un bundle di CA per stabilire connessioni sicure con il server API e
istiod
. Questo bundle di CA riceve la patch nella configurazione daistiod
, ma a volte può essere sovrascritto (ad esempio, se applichi di nuovo la configurazione del webhook).Puoi verificare la presenza del bundle CA utilizzando il seguente comando:
kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io istio-sidecar-injector -o=jsonpath='{.webhooks[0].clientConfig.caBundle}'
Se l'output non è vuoto, il bundle CA è configurato. Se il bundle CA non è presente, riavvia
istiod
in modo che esegua una nuova scansione del webhook e reinstalli il bundle della CA.Verifica la presenza di errori di inserimento del file collaterale.
Se hai abilitato l'inserimento, ma non vedi la pianificazione dei pod, controlla lo stato del successivo livello di astrazione superiore. Ad esempio, se esegui un deployment, ma non vengono pianificati pod, controlla lo stato dei set di repliche corrispondenti utilizzando il seguente comando:
kubectl -n my-namespace describe replicaset your-deployment-name
Se è presente il set di repliche, controlla se sono presenti errori nel log eventi in fondo alla descrizione. Se l'errore riguarda l'inserimento di sidecar, controlla i log
istiod
per individuare la causa dell'errore.Se il problema persiste, potrebbe essere uno dei seguenti:
- Configurazione errata passata all'iniettore
- Problemi di configurazione del firewall
- Un problema nel codice Istio
Per ulteriori passaggi di diagnostica, consulta la pagina relativa alla risoluzione dei problemi di Istio.
I proxy Envoy non ricevono configurazione da istiod
Esistono diversi problemi che possono impedire ai proxy di ricevere la configurazione da istiod
.
istiod
non eseguirà il push della configurazione ai proxy di invio in caso di problemi, ad esempio un problema RBAC che impedisce la lettura della risorsa di configurazione.L'indirizzo di rilevamento non è corretto (errori "nessun flusso a monte integro")
L'indirizzo di rilevamento fornito all'iniettore sidecar è errato. Se vedi log che riportano
gRPC config stream closed, no healthy upstream
, verifica che l'indirizzo di rilevamento nel meshProxyConfig
sia corretto e che punti al tuo servizioistiod
.È stato eseguito il push di configurazione non valida al proxy. In questo caso, il push della configurazione al proxy viene eseguito correttamente, ma la configurazione non è valida. Vedrai messaggi ripetuti simili ai seguenti:
Envoy proxy is NOT ready: config not received from Pilot (is Pilot running?): cds updates: 1 successful, 0 rejected; lds updates: 0 successful, 1 rejected
In questo esempio,
cds
è Cluster Discovery Service (che riporta 1 aggiornamento inviato daistiod
) elds
è il Listener Discovery Service (che indica 1 aggiornamento rifiutato daistiod
). Spesso viene visualizzato un messaggio di errore precedente che spiega il motivo del rifiuto, che in genere inizia con un avviso sulla configurazione del mittente o simile.Per risolvere il problema, indaga sulla causa della configurazione rifiutata. Una causa comune è le risorse
EnvoyFilter
errate. Se nessun motivo è evidente, invia una segnalazione di bug con un dump della configurazione del proxy.
Creazione del pod non riuscita
Se noti che la creazione dei pod non riesce, cerca messaggi di errore che potrebbero fornire indizi sul problema principale, utilizzando il seguente comando:
kubectl describe replicaset YOUR_REPLICA_SET
Messaggi di errore comuni relativi ai webhook
I messaggi di errore generati dal comando kubectl apply
possono fornire un suggerimento sulla causa principale. Consulta la tabella seguente per i messaggi di errore comuni, le relative cause e le potenziali soluzioni.
Messaggio di errore | Causa | Risoluzione |
---|---|---|
net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) |
Potrebbe trattarsi di un problema di connettività di rete. | Assicurati che le regole firewall forniscano la connettività a "istiod" sulla porta 15017. |
no endpoints available for service 'istiod' |
Questo può accadere se il pod "istiod" non è disponibile o non è pronto. | Controlla i pod "istiod" per assicurarti che siano in esecuzione e pronti. |
Service "istiod" not found |
Questo può accadere se il servizio "istiod" non esiste. | Verifica che l'installazione di Istio sia riuscita e che sia corretta. |
x509: certificate signed by unknown authority |
Potrebbe trattarsi di un problema relativo al certificato del webhook. | Verifica che caBundle sia impostato correttamente sul webhook. |
Failed to update validatingwebhookconfiguration
istio-validator-asm-[version-n]-istio-system (failurePolicy=Fail,
resourceVersion=[version]): Operation cannot be fulfilled on
validatingwebhookconfigurations.admissionregistration.k8s.io
"istio-validator-asm-[version-n]-istio-system": the object has been
modified; please apply your changes to the latest version and try
again. |
Un webhook di convalida da una versione precedente di Istio o Anthos Service Mesh che è stata disinstallata potrebbe interferire con un upgrade o un'installazione. | Verifica che tutti i webhook siano ancora presenti nel cluster e rimuovi tutti i webhook che fanno riferimento a versioni non più installate. |
Error from server (InternalError): Internal error occurred: failed
calling webhook "rev.namespace.sidecar-injector.istio.io": Post "https://istiod-asm-1122-0.istio-system.svc:443/inject?timeout=10s": context deadline exceeded |
Per i cluster privati, la porta 15017 deve essere aperta. Questo messaggio di errore indica che la porta 15017 potrebbe non essere aperta. | Assicurati che le regole firewall forniscano la connettività a Istiod sulla porta 15017. Per maggiori informazioni, consulta Apertura di una porta su un cluster privato. |