Versione 1.13

Risolvere i problemi relativi a proxy/webhook in Anthos Service Mesh

Questa sezione illustra i problemi comuni di Anthos Service Mesh e come risolverli. Se hai bisogno di ulteriore assistenza, vedi Richiedere assistenza.

Anthos Service Mesh contiene due webhook:

  • La convalida del webhook assicura che la configurazione di Istio applicata sia valida.
  • Il webhook di modifica imposta l'inserimento automatico di file collaterali nei nuovi pod.

Un problema di configurazione in uno di questi webhook potrebbe causare il mancato avvio di nuovi pod o kubectl apply di generazione di messaggi di errore.

Problemi di iniezione collaterale

L'inserimento collaterale non funziona correttamente nei seguenti casi:

  • pod che pianificano senza sidecar
  • i pod che devono contenere sidecar non vengono mai visualizzati quando si utilizza kubectl get pods, ma esiste il set di repliche corrispondente da kubectl get replicaset.

Per risolvere i problemi di iniezione collaterale, procedi come riportato di seguito.

  1. Verifica che lo spazio dei nomi o il pod abbia l'etichetta di inserimento corretta.

    Se esegui Istio a revisione singola (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 tempo di inattività, più piani di controllo e così via), verifica che la specifica dello spazio dei nomi o del pod abbia l'etichetta istio.io/rev=REVISION appropriata, dove REVISION è il numero di revisione di Anthos Service Mesh su istiod che corrisponde alla versione di Anthos Service Mesh selezionata. Per ulteriori informazioni sulle etichette di revisione, consulta la sezione Inserimento di proxy sidecar.

  2. Verifica che il webhook iniezione sidecar istio sia presente e abbia un bundle CA.

    Il webhook iniettore sidecar (utilizzato per l'inserimento automatico dei sidecar) richiede un bundle di CA per stabilire connessioni sicure con il server API e con istiod. A questo bundle CA è applicato un patch nella configurazione da istiod, ma a volte può essere sovrascritto (ad esempio, se applichi di nuovo la configurazione 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, viene configurato il bundle CA. Se il bundle CA non è presente, riavvia istiod per causare una nuova scansione del webhook e la reinstallazione del bundle CA.

  3. Verifica la presenza di errori di iniezione collaterale.

    Se hai abilitato l'inserimento, ma non vedi la pianificazione dei pod, controlla lo stato del livello di astrazione successivo. Ad esempio, se stai eseguendo un deployment ma non sono presenti pod in fase di pianificazione, controlla lo stato dei set di repliche corrispondenti utilizzando il seguente comando:

    kubectl -n my-namespace describe replicaset your-deployment-name

    Se è presente un set di repliche, verifica la presenza di errori nel log eventi in fondo alla descrizione. Se l'errore riguarda iniezioni collaterali, consulta i log istiod per un'indicazione della causa dell'errore.

  4. Se il problema persiste, potrebbe essere uno dei seguenti:

    • Configurazione non valida trasmessa all'iniettore
    • Problemi di configurazione del firewall
    • Un problema nel codice Istio stesso

    Consulta la sezione Risolvere i problemi di Istio per ulteriori procedure diagnostiche.

I proxy di Envoy non ricevono la configurazione da istiod

Esistono diversi problemi che possono impedire ai proxy di ricevere la configurazione da istiod.

  1. istiod non eseguirà il push della configurazione ai proxy del mittente se presenta problemi, ad esempio un problema di RBAC che impedisce la lettura della risorsa di configurazione.

  2. L'indirizzo di rilevamento non è corretto ('nessun integro upstream' errori)

  3. L'indirizzo di rilevamento fornito all'iniettore sidecar è errato. Se vedi i log che fanno riferimento a gRPC config stream closed, no healthy upstream, verifica che l'indirizzo di rilevamento nel mesh ProxyConfig sia corretto e reindirizzi al tuo servizio istiod.

  4. Push della configurazione non valido al proxy. In questo caso, la configurazione viene trasferita correttamente al proxy, ma la configurazione non è valida. Vedrai messaggi ricorrenti simili al seguente:

    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 è il servizio di individuazione dei cluster (che segnala 1 aggiornamento inviato da istiod) e lds è il servizio di rilevamento dei listener (che segnala 1 aggiornamento rifiutato da istiod). Spesso viene visualizzato un messaggio di errore precedente che spiega il motivo del rifiuto, che di solito inizia con un avviso sulla configurazione dell'invio o simile.

    Per risolvere il problema, analizza la causa della configurazione rifiutata. Una causa comune è la presenza di risorse EnvoyFilter non valide. Se nessun motivo è ovvio, invia una segnalazione di bug con un dump della configurazione del proxy.

Creazione del pod non riuscita

Se noti che i pod non vengono creati correttamente, cerca i messaggi di errore che potrebbero fornire indizi sul problema principale, utilizzando il seguente comando:

kubectl describe replicaset YOUR_REPLICA_SET

Messaggi di errore di webhook comuni

I messaggi di errore restituiti dal comando kubectl apply possono suggerire la causa principale. Consulta la tabella seguente per conoscere i messaggi di errore più comuni, le relative cause e le possibili risoluzioni.

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 del 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ò verificarsi se il servizio "istiod" non esiste. Verifica che l'installazione di Istio sia riuscita e corretta.
x509: certificate signed by unknown authority Potrebbe trattarsi di un problema di certificato 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. La convalida del webhook da una versione precedente di Istio o Anthos Service Mesh disinstallata potrebbe interferire con un upgrade o un'installazione. Verifica che tutti i webhook siano ancora nel cluster e rimuovi tutti i webhook che fanno riferimento a versioni non più installate.