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 da kubectl get replicaset.

Per risolvere i problemi di inserimento dei file collaterali, procedi nel seguente modo.

  1. 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 su istiod 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.

  2. 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 da istiod, 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.

  3. 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.

  4. 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.

  1. 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.

  2. L'indirizzo di rilevamento non è corretto (errori "nessun flusso a monte integro")

  3. 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 mesh ProxyConfig sia corretto e che punti al tuo servizio istiod.

  4. È 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 da istiod) e lds è il Listener Discovery Service (che indica 1 aggiornamento rifiutato da istiod). 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.