Questa pagina mostra come risolvere i problemi comuni relativi a GKE su AWS.
Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.Messaggi di errore comuni
Le sezioni seguenti spiegano le cause e le soluzioni per alcuni messaggi di errore comuni.
Il server non ha una risorsa
Errori come error: the server doesn't have a resource type "services" possono verificarsi quando un cluster non ha pool di nodi in esecuzione o Connect Gateway non riesce a connettersi a un pool di nodi. Per controllare lo stato dei pool di nodi, esegui il seguente comando:
gcloud container aws node-pools list \
--cluster-name CLUSTER_NAME \
--location LOCATION
Sostituisci quanto segue:
CLUSTER_NAME: il nome del clusterLOCATION: la Google Cloud località che gestisce il cluster
L'output include lo stato dei pool di nodi del cluster. Se non è elencato alcun pool di nodi, creane uno.
Utente non autorizzato
Il seguente errore si verifica quando il tuo nome utente non ha accesso amministrativo al cluster:
Error from server (Forbidden): users "administrator@example.com" is forbidden:
User "system:serviceaccount:gke-connect:connect-agent-sa" cannot impersonate
resource "users" in API group "" at the cluster scope
Puoi configurare utenti aggiuntivi passando il
--admin-users
flag quando crei un cluster.
Se utilizzi Connect Gateway e non riesci a connetterti al cluster, prova a seguire questi passaggi:
Recupera gli utenti autorizzati per il cluster.
gcloud container aws clusters describe CLUSTER_NAME \ --format 'value(authorization.admin_users)'Sostituisci
CLUSTER_NAMEcon il nome del cluster.L'output include i nomi utente con accesso amministrativo al cluster. Ad esempio:
{'username': 'administrator@example.com'}Recupera il nome utente attualmente autenticato con Google Cloud CLI.
gcloud config get-value accountL'output include l'account autenticato con Google Cloud CLI. Se l'output di
gcloud containers aws clusters describeegcloud config get-value accountnon corrispondono, eseguigcloud auth logined esegui l'autenticazione come nome utente con accesso amministrativo al cluster.
Problemi con i comandi kubectl
Le sezioni seguenti forniscono indicazioni su come risolvere i problemi relativi ai comandi kubectl che non rispondono o non vanno a buon fine.
I comandi kubectl smettono di rispondere
Se il cluster esegue una versione di Kubernetes precedente alla 1.25 e i comandi kubectl non rispondono o vanno in timeout, il motivo più comune è che non hai ancora creato un pool di nodi. Per impostazione predefinita, GKE su AWS genera file kubeconfig che utilizzano Connect Gateway come endpoint raggiungibile da internet.
Affinché funzioni, il deployment gke-connect-agent deve essere in esecuzione in un pool di nodi del cluster.
Per ulteriori informazioni diagnostiche, esegui il seguente comando:
kubectl cluster-info -v=9
Se non sono presenti pool di nodi in esecuzione, le richieste a connectgateway.googleapis.com non vanno a buon fine e viene visualizzato un errore 404 cannot find active connections for cluster.
Per i cluster con una versione di Kubernetes 1.25 o successive, gke-connect-agent viene eseguito sul control plane e non è necessario un pool di nodi. Se il comando kubectl
non risponde, controlla i log dei componenti del control plane con
Cloud Logging.
I comandi kubectl exec, attach e port-forward non vanno a buon fine
I comandi kubectl exec, kubectl attach e kubectl port-forward potrebbero non andare a buon fine e visualizzare il messaggio error: unable to upgrade connection quando utilizzi Connect Gateway. Si tratta di una limitazione quando utilizzi Connect Gateway come endpoint del server API Kubernetes.
Per ovviare a questo problema, utilizza un file kubeconfig che specifichi l'endpoint privato del cluster. Per istruzioni su come accedere al cluster tramite il relativo
endpoint privato, consulta
Configurare l'accesso ai cluster per kubectl.
kubectl logs non va a buon fine e viene visualizzato l'errore remoto: tls: internal error
Questo problema potrebbe verificarsi quando al ruolo API del control plane manca
un'autorizzazione. Ad esempio, questo può accadere se al tuo ruolo AWS manca l'autorizzazione ec2:DescribeDhcpOptions. In questo caso, le richieste di firma dei certificati dai nodi non possono essere approvate e il nodo worker non ha un certificato valido.
Per determinare se questo è il problema, puoi verificare se sono presenti richieste di firma dei certificati in attesa di approvazione con questo comando:
kubectl get csr
Per risolvere il problema, verifica che il tuo ruolo AWS soddisfi i requisiti.
Risoluzione dei problemi generici di kubectl
Se utilizzi Connect Gateway:
Assicurati di aver abilitato Connect Gateway nel tuo Google Cloud progetto:
gcloud services enable connectgateway.googleapis.comPer i cluster con una versione di Kubernetes precedente alla 1.25, assicurati di avere almeno un pool di nodi Linux in esecuzione e che
gke-connect-agentsia in esecuzione. Per maggiori dettagli, consulta Risolvere i problemi di connessione ai cluster.Per i cluster con una versione di Kubernetes 1.25 o successive, controlla i
gke-connect-agentlog con Cloud Logging.
Il servizio Kubernetes (LoadBalancer) o Kubernetes Ingress non funzionano
Se i bilanciatori del carico elastici (ELB/NLB/ALB) di AWS sono stati creati, ma non funzionano come previsto, il problema potrebbe essere dovuto a problemi di tagging delle subnet. Per ulteriori informazioni, consulta Subnet del bilanciatore del carico.
Arresto anomalo dei pod sui nodi Arm
Il seguente problema si verifica quando esegui il deployment di un pod su un nodo Arm, ma l'immagine container non è stata creata per l'architettura Arm.
Per identificare il problema, completa le seguenti attività:
Recupera lo stato dei pod:
kubectl get podsRecupera i log del pod che va in arresto anomalo:
kubectl logs POD_NAMESostituisci
POD_NAMEcon il nome del pod che va in arresto anomalo.Il messaggio di errore nei log dei pod è simile al seguente:
exec ./hello-app: exec format error
Per risolvere il problema, assicurati che l'immagine container supporti l'architettura Arm. Come best practice, crea più immagini di architettura.
Impossibile eliminare il cluster
Se ricevi un errore simile al seguente quando provi a eliminare un cluster, il ruolo API GKE Multi-Cloud potrebbe non esistere:
ERROR: (gcloud.container.aws.clusters.delete) FAILED_PRECONDITION: Could not
assume role
"arn:aws:iam::ACCOUNT_NUMBER:role/gke123456-anthos-api-role"
through service account
"service-123456789@gcp-sa-gkemulticloud.iam.gserviceaccount.com".
Please make sure the role has a trust policy allowing the GCP service agent to
assume it: WebIdentityErr failed to retrieve credentials
Per risolvere il problema, segui i passaggi descritti in Creare il ruolo API GKE Multi-Cloud. Quando ricrei il ruolo con lo stesso nome e le stesse autorizzazioni, puoi riprovare a eseguire il comando.
Passaggi successivi
- Se hai bisogno di ulteriore assistenza, contatta l'assistenza clienti Google Cloud.