Risolvere i problemi relativi al server API Kubernetes

Questa pagina mostra come risolvere i problemi relativi al server API Kubernetes (kube-apiserver) per Google Distributed Cloud.

Se hai bisogno di ulteriore aiuto, contatta l'assistenza clienti Google Cloud.

Timeout webhook e chiamate webhook non riuscite

Questi errori possono essere visualizzati in diversi modi. Se si verificano i seguenti sintomi, è possibile che le chiamate webhook non vadano a buon fine:

  • Connessione rifiutata: se kube-apiserver segnala errori di timeout per la chiamata del webhook, nei log viene segnalato il seguente errore:

    failed calling webhook "server.system.private.gdc.goog":
    failed to call webhook: Post "https://root-admin-webhook.gpc-system.svc:443/mutate-system-private-gdc-goog-v1alpha1-server?timeout=10s":
    dial tcp 10.202.1.18:443: connect: connection refused
    
  • Scadenza del contesto superata: nei log potrebbe essere segnalato anche il seguente errore:

    failed calling webhook "namespaces.hnc.x-k8s.io": failed to call webhook: Post
    "https://hnc-webhook-service.hnc-system.svc:443/validate-v1-namespace?timeout=10s\":
    context deadline exceeded"
    

Se ritieni di riscontrare timeout o chiamate al webhook non riuscite, utilizza uno dei seguenti metodi per verificare il problema:

  • Controlla il log del server API per verificare se si è verificato un problema di rete.

    • Verifica la presenza di errori di rete nel log, come TLS handshake error.
    • Controlla se l'IP/la porta corrisponde a ciò a cui il server API è configurato per rispondere.
  • Monitora la latenza del webhook seguendo questi passaggi:

    1. Nella console, vai alla pagina di Cloud Monitoring.

      Vai alla pagina di Cloud Monitoring

    2. Seleziona Metrics Explorer.

    3. Seleziona la metrica apiserver_admission_webhook_admission_duration_seconds.

Per risolvere il problema, esamina i seguenti suggerimenti:

  • Potrebbero essere necessarie ulteriori regole firewall per il webhook. Per ulteriori informazioni, scopri come aggiungere regole firewall per casi d'uso specifici.

  • Se il completamento del webhook richiede più tempo, puoi configurare un valore di timeout personalizzato. Poiché la latenza dei webhook si aggiunge alla latenza delle richieste API, deve essere valutata il più rapidamente possibile.

  • Se l'errore relativo al webhook blocca la disponibilità del cluster o se il webhook non è innocuo da rimuovere e riduce la situazione, verifica se è possibile impostare temporaneamente failurePolicy su Ignore o rimuovere il webhook in questione.

Latenza o errore di composizione del server API

Questo errore può essere visualizzato in diversi modi:

  • Errori di risoluzione dei nomi esterni: un client esterno potrebbe restituire errori che contengono lookup nel messaggio, ad esempio:

    dial tcp: lookup kubernetes.example.com on 127.0.0.1:53: no such host
    

    Questo errore non si applica a un client in esecuzione all'interno del cluster. L'IP del servizio Kubernetes viene inserito, quindi non è necessaria alcuna risoluzione.

  • Errori di rete. Il client potrebbe stampare un errore di rete generico quando tenta di chiamare il server API, come nei seguenti esempi:

    dial tcp 10.96.0.1:443: connect: no route to host
    dial tcp 10.96.0.1:443: connect: connection refused
    dial tcp 10.96.0.1:443: connect: i/o timeout
    
  • Connessione al server API ad alta latenza: la connessione al server API potrebbe andare a buon fine, ma le richieste in timeout sul lato client. In questo scenario, il client solitamente stampa messaggi di errore contenenti context deadline exceeded.

Se la connessione al server API non va a buon fine, prova a stabilire la connessione nello stesso ambiente in cui il client segnala l'errore. I container temporanei Kubernetes possono essere utilizzati per inserire un container di debug negli spazi dei nomi esistenti, come segue:

  1. Da dove viene eseguito il client problematico, usa kubectl per eseguire una richiesta con livello di dettaglio elevato. Ad esempio, una richiesta GET a /healthz di solito non richiede l'autenticazione:

    kubectl get -v999 --raw /healthz
    
  2. Se la richiesta non riesce o kubectl non è disponibile, puoi ottenere l'URL dall'output ed eseguire manualmente la richiesta con curl. Ad esempio, se l'host del servizio ottenuto dall'output precedente era https://192.0.2.1:36917/, puoi inviare una richiesta simile come segue:

    # Replace "--ca-cert /path/to/ca.pem" to "--insecure" if you are accessing
    # a local cluster and you trust the connection cannot be tampered.
    # The output is always "ok" and thus contains no sensentive information.
    
    curl -v --cacert /path/to/ca.pem https://192.0.2.1:36917/healthz
    

    L'output di questo comando di solito indica la causa principale di una connessione non riuscita.

    Se la connessione ha esito positivo, ma è lenta o scade, significa che il server API è sovraccarico. Per verificare, nella console controlla le metriche di API Server Request Rate e di richiesta della latenza in Cloud Kubernetes > Anthos > Cluster > K8s Control Plane.

Per risolvere questi errori di connessione o problemi di latenza, esamina le seguenti opzioni di correzione:

  • Se si verifica un errore di rete all'interno del cluster, potrebbe essersi verificato un problema con il plug-in Container Network Interface (CNI). In genere questo problema è temporaneo e si risolve automaticamente dopo la riprogrammazione o la riprogrammazione di un pod.

  • Se l'errore di rete proviene dall'esterno del cluster, verifica se il client è configurato correttamente per l'accesso al cluster oppure genera di nuovo la configurazione client. Se la connessione passa attraverso un proxy o un gateway, verifica se un'altra connessione che utilizza lo stesso meccanismo funziona.

  • Se il server API è sovraccarico, di solito significa che molti client accedono al server API contemporaneamente. Un singolo client non può sovraccaricare un server API a causa della limitazione e della funzionalità Priorità ed equità. Esamina il carico di lavoro per le seguenti aree:

    • Funziona a livello di pod. È più comune creare ed eliminare erroneamente i pod rispetto alle risorse di livello superiore.
    • Modifica il numero di repliche tramite un calcolo errato.
    • Un webhook che esegue il loop della richiesta a se stessa o amplifica il carico creando più richieste di quante ne gestisce.

Passaggi successivi

Se hai bisogno di ulteriore aiuto, contatta l'assistenza clienti Google Cloud.