Risolvere gli errori 4xx


Questa pagina ti aiuta a risolvere gli errori 400, 401, 403 e 404 che potresti incontrare quando utilizzi Google Kubernetes Engine (GKE).

Problema: errori di autenticazione e autorizzazione

Quando ti connetti ai cluster GKE, puoi ottenere un'autenticazione ed errore di autorizzazione con il codice di stato HTTP 401 (Unauthorized). Questo problema potrebbe verificarsi quando provi a eseguire un comando kubectl in GKE da un ambiente locale.

La causa del problema potrebbe essere una delle seguenti:

  • Il plug-in di autenticazione gke-gcloud-auth-plugin non è installato o configurato correttamente.
  • Non disponi delle autorizzazioni per connetterti al server API del cluster ed eseguire comandi kubectl.

Per diagnosticare la causa, completa i passaggi descritti nelle sezioni seguenti:

  1. Connettiti al cluster utilizzando curl
  2. Configura il plug-in in kubeconfig

Connettiti al cluster utilizzando curl

Per diagnosticare la causa dell'errore di autenticazione e autorizzazione, connettiti al cluster utilizzando curl. L'uso di curl ignora lo strumento a riga di comando kubectl e il plug-in gke-gcloud-auth-plugin.

  1. Imposta le variabili di ambiente:

    APISERVER=https://$(gcloud container clusters describe CLUSTER_NAME \
        --location=COMPUTE_LOCATION --format "value(endpoint)")
    TOKEN=$(gcloud auth print-access-token)
    
  2. Verifica che il token di accesso sia valido:

    curl https://oauth2.googleapis.com/tokeninfo?access_token=$TOKEN
    

    Se disponi di un token di accesso valido, questo comando invia una richiesta Il server OAuth 2.0 di Google e il server risponde con informazioni sul di accesso.

  3. Prova a connetterti all'endpoint API principale nel server API:

    # Get cluster CA certificate
    gcloud container clusters describe CLUSTER_NAME \
        --location=COMPUTE_LOCATION \
        --format "value(masterAuth.clusterCaCertificate)" | \
        base64 -d > /tmp/ca.crt
    
    # Make API call with authentication and CA certificate
    curl -s -X GET "${APISERVER}/api/v1/namespaces" \
        --header "Authorization: Bearer $TOKEN" \
        --cacert /tmp/ca.crt
    

    Se il comando curl ha esito positivo, vedrai un elenco di spazi dei nomi. Procedi a verifica se la causa è il plug-in seguendo la procedura descritta in Configurare nella sezione kubeconfig.

    Se il comando curl non va a buon fine e l'output è simile al seguente, significa che non disponi delle autorizzazioni corrette per accedere al cluster:

    {
    "kind": "Status",
    "apiVersion": "v1",
    "metadata": {},
    "status": "Failure",
    "message": "Unauthorized",
    "reason": "Unauthorized",
    "code": 401
    }
    

    Per risolvere il problema, rivolgiti all'amministratore per ottenere le autorizzazioni corrette per accedere al cluster.

Configurare l'utilizzo del plug-in in kubeconfig

Se ricevi errori di autenticazione e autorizzazione quando ti connetti a dei tuoi cluster, ma sono stati in grado di connetterti al cluster curl, quindi assicurati di poter accedere il tuo cluster senza bisogno del plug-in gke-gcloud-auth-plugin.

Per risolvere questo problema, configura il tuo ambiente locale in modo che ignori il Programma binario gke-gcloud-auth-plugin durante l'autenticazione nel cluster. Nei client Kubernetes che eseguono la versione 1.25 e successive, il file binario gke-gcloud-auth-plugin è obbligatorio, quindi devi utilizzare una versione 1.24 o precedente per lo strumento a riga di comando kubectl.

Segui questi passaggi per accedere al cluster senza bisogno del plug-in:

  1. Installa lo strumento a riga di comando kubectl con la versione 1.24 o precedenti utilizzando curl. Nell'esempio seguente viene installato lo strumento con la versione 1.24:

    curl -LO https://dl.k8s.io/release/v1.24.0/bin/linux/amd64/kubectl
    
  2. Apri il file di script di avvio della shell in un editor di testo. Ad esempio, apri .bashrc per la shell Bash:

    vi ~/.bashrc
    

    Se utilizzi macOS, usa ~/.bash_profile anziché .bashrc in queste istruzioni.

  3. Aggiungi la seguente riga al file dello script di avvio e salvalo:

    export USE_GKE_GCLOUD_AUTH_PLUGIN=False
    
  4. Esegui lo script di avvio:

    source ~/.bashrc
    
  5. Recupera le credenziali per il tuo cluster, che configura il file .kube/config:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=COMPUTE_LOCATION
    

    Sostituisci quanto segue:

  6. Esegui un comando kubectl. Ad esempio:

    kubectl cluster-info
    

    Se ricevi un errore 401 o un errore di autorizzazione simile dopo aver eseguito questi assicurati di disporre delle autorizzazioni corrette, quindi esegui nuovamente il passaggio che ha restituito l'errore.

Errore 400: il pool di nodi richiede la ricreazione

Quando provi a eseguire un'azione che ricrea il piano di controllo e i nodi, può verificarsi il seguente errore:

ERROR: (gcloud.container.clusters.update) ResponseError: code=400, message=Node pool "test-pool-1" requires recreation.

Ad esempio, questo errore può verificarsi quando completi una rotazione delle credenziali in corso.

Nel backend, i pool di nodi sono contrassegnati per la ricreazione, ma la ricreazione effettiva l'avvio dell'operazione potrebbe richiedere del tempo. Per questo motivo, l'operazione non riesce perché GKE non ha ricreato uno o più pool di nodi di un cluster Kubernetes.

Per risolvere il problema, scegli una delle seguenti soluzioni:

  • Attendi la ricreazione. L'operazione potrebbe richiedere ore, giorni o settimane, a seconda di fattori quali periodi di manutenzione ed esclusioni esistenti.
  • Avvia manualmente una ricreazione dei pool di nodi interessati avviando una versione eseguire l'upgrade alla stessa versione del piano di controllo.

    Per avviare una nuova creazione, esegui questo comando:

    gcloud container clusters upgrade CLUSTER_NAME \
        --node-pool=POOL_NAME
    

    Al termine dell'upgrade, riprova a eseguire l'operazione.

Errore 403: autorizzazioni insufficienti

Quando provi a connetterti a un cluster GKE utilizzando gcloud container clusters get-credentials, ma l'account non dispone dell'autorizzazione per accedere al server API Kubernetes:

ERROR: (gcloud.container.clusters.get-credentials) ResponseError: code=403, message=Required "container.clusters.get" permission(s) for "projects/<your-project>/locations/<region>/clusters/<your-cluster>".

Per risolvere il problema, completa i seguenti passaggi:

  1. Identifica l'account con il problema di accesso:

    gcloud auth list
    
  2. Concedi l'accesso richiesto all'account seguendo le istruzioni riportate in Autenticazione nel server dell'API Kubernetes.

Errore 403: budget di riprova esaurito

Quando provi a creare un cluster GKE cluster:

Error: googleapi: Error 403: Retry budget exhausted: Google Compute Engine:
Required permission 'PERMISSION_NAME' for 'RESOURCE_NAME'.

In questo messaggio di errore si applicano le seguenti variabili:

  • PERMISSION_NAME: il nome di un'autorizzazione, ad esempio compute.regions.get.
  • RESOURCE_NAME: il percorso di Google Cloud alla risorsa a cui stavi tentando di accedere, ad esempio un regione.

Questo errore si verifica se l'account di servizio IAM associato al cluster non dispone delle autorizzazioni minime richieste per creare il cluster.

Per risolvere il problema:

  1. Crea o modifica un account di servizio IAM per avere tutte le le autorizzazioni necessarie per eseguire un cluster GKE. Per istruzioni, vedi Utilizza gli account di servizio IAM con privilegi minimi.
  2. Specifica l'account di servizio IAM aggiornato nel comando di creazione del cluster utilizzando il flag --service-account. Per istruzioni, vedi Crea un cluster Autopilot.

In alternativa, ometti il flag --service-account per consentire a GKE di utilizzare l'account di servizio predefinito di Compute Engine nel progetto, che ha le autorizzazioni richieste per impostazione predefinita.

Errore 404: risorsa non trovata

Se visualizzi un errore 404, risorsa non trovata durante la chiamata a gcloud container risolvere il problema eseguendo nuovamente l'autenticazione in Google Cloud CLI:

gcloud auth login

Errore 400/403: autorizzazioni di modifica mancanti nell'account

Un errore di autorizzazione di modifica mancante nell'account (errore 400 o 403) indica che uno dei seguenti elementi è stato eliminato o modificato manualmente:

Quando abiliti l'API Compute Engine o Kubernetes Engine, Google Cloud crea i seguenti account di servizio e agenti:

  • Account di servizio predefinito Compute Engine con autorizzazioni di modifica sul tuo progetto.
  • Agente di servizio API di Google con autorizzazioni di modifica sul progetto.
  • Account di servizio Google Kubernetes Engine con l'agente di servizio Kubernetes Engine per il tuo progetto.

La creazione e la gestione del cluster non vanno a buon fine se, in un determinato momento, qualcuno modifica queste autorizzazioni, rimuove le associazioni di ruolo nel progetto, rimuove completamente l'account servizio o disattiva l'API.

Per verificare se l'account di servizio Google Kubernetes Engine dispone di Kubernetes Engine Completa i seguenti passaggi per il ruolo di Agente di servizio assegnato al progetto:

  1. Determina il nome del tuo account di servizio Google Kubernetes Engine. Tutti gli account di servizio avere il seguente formato:

    service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com
    

    Sostituisci PROJECT_NUMBER con del tuo numero di progetto.

  2. Verifica che l'account di servizio Google Kubernetes Engine non abbia Ruolo Agente di servizio Kubernetes Engine assegnato al progetto:

    gcloud projects get-iam-policy PROJECT_ID
    

    Sostituisci PROJECT_ID con l'ID progetto.

Per risolvere il problema, se qualcuno ha rimosso il ruolo Agente di servizio Kubernetes Engine dall'account di servizio Google Kubernetes Engine, aggiungilo di nuovo. In caso contrario, segui le seguenti istruzioni per riattivare l'API Kubernetes Engine, che ripristina i tuoi account di servizio e le tue autorizzazioni:

Console

  1. Vai alla pagina API e Services nella console Google Cloud.

    Vai ad API e Servizi

  2. Seleziona il progetto.

  3. Fai clic su Abilita API e servizi.

  4. Cerca Kubernetes, quindi seleziona l'API dai risultati di ricerca.

  5. Fai clic su Attiva. Se hai già attivato l'API, devi prima disattivarla e poi riattivarla. Potrebbero essere necessari diversi minuti l'API e i servizi correlati da abilitare.

gcloud

Esegui i seguenti comandi nell'interfaccia a riga di comando gcloud:

PROJECT_NUMBER=$(gcloud projects describe "PROJECT_ID"
    --format 'get(projectNumber)')
gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-${PROJECT_NUMBER?}@container-engine-robot.iam.gserviceaccount.com" \
    --role roles/container.serviceAgent

Passaggi successivi

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