Versione 1.15

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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

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

Anthos Service Mesh contiene due webhook:

  • Il webhook di convalida assicura che la configurazione di Istio applicata sia valida.
  • Il webhook mutante imposta l'iniezione automatica sidecar sui nuovi pod.

Un problema di configurazione in uno di questi webhook potrebbe non consentire l'avvio di nuovi pod o kubectl apply generare messaggi di errore.

Problemi di iniezione di collaterali

L'iniezione di file collaterali non funziona correttamente se visualizzi uno dei seguenti elementi:

  • pod che pianificano senza file collaterali
  • i pod a cui devono essere inseriti sidecar non vengono mai visualizzati quando si utilizza kubectl get pods, ma esiste il set di repliche corrispondente di kubectl get replicaset.

Per risolvere i problemi relativi all'iniezione di sidecar, procedi nel seguente modo.

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

    Se esegui Istio a revisione singola (impostazione predefinita), verifica che la specifica dello spazio dei nomi o del pod abbia 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 Iniezione di proxy sidecar.

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

    Il webhook iniettore sidecar (utilizzato per l'iniezione automatica sidecar) richiede un bundle CA per stabilire connessioni sicure con il server API e istiod. Questo bundle CA verrà applicato alla configurazione da istiod, ma a volte può essere sovrascritto (ad esempio, se riapplichi 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, il bundle CA è configurato. Se il bundle CA manca, riavvia istiod per fare in modo che esegua nuovamente la scansione del webhook e reinstalla il bundle.

  3. Verifica la presenza di errori di iniezione sidecar.

    Se hai abilitato l'iniezione, ma non vedi la pianificazione dei pod, controlla lo stato del livello di astrazione successivo. Ad esempio, se stai eseguendo un deployment ma nessun pod sta pianificando, 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 nel log degli eventi nella parte inferiore della descrizione sono presenti errori. Se l'errore riguarda l'iniezione sidecar, controlla i log istiod per un'indicazione della causa dell'errore.

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

    • Configurazione errata inviata all'iniettore
    • Problemi di configurazione del firewall
    • Un problema nel codice Istio stesso

    Per ulteriori passaggi diagnostici, consulta Risoluzione dei problemi di Istio.

I proxy 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 servizio in caso di problemi, ad esempio in caso di un problema RBAC che gli impedisce di leggere la risorsa di configurazione.

  2. L'indirizzo di rilevamento non è corretto ("nessun errore di integrità a monte")

  3. L'indirizzo di rilevamento fornito all'iniettore sidecar è errato. Se vedi i log che menzionano 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 inviata correttamente al proxy, 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 è il Cluster Discovery Service (che segnala 1 aggiornamento eseguito da istiod) e lds è il listener Discovery Service (che segnala 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 dell'invio o simili.

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

Creazione del pod non riuscita

Se osservi 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 webhook comuni

I messaggi di errore generati dal comando kubectl apply possono suggerire la causa principale. Fai riferimento alla seguente tabella per i messaggi di errore comuni, le loro cause e le potenziali 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 tuo firewall garantiscano 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 Ciò può verificarsi se il servizio "istiod" non esiste. Verifica che l'installazione di Istio sia riuscita e sia corretta.
x509: certificate signed by unknown authority Potrebbe trattarsi di un problema relativo al 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. Un webhook di convalida di 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 quelli che fanno riferimento alle versioni che non sono più installate.