Questa pagina descrive come risolvere gli errori comuni che potresti riscontrare durante la registrazione dei cluster in un parco risorse o la connessione a cluster esterni a Google Cloud utilizzando la console Google Cloud, Google Cloud CLI o kubectl
tramite il gateway di connessione.
I cluster e i cluster on-premise su altri cloud pubblici dipendono dall'agente Connect per stabilire e mantenere una connessione tra il cluster e il progetto Google Cloud, nonché per gestire le richieste Kubernetes. Se visualizzi errori come "Agente non raggiungibile" o "Impossibile connettersi al piano di controllo del cluster", ciò potrebbe indicare un problema con l'agente Connect.
Raccolta dei log dell'agente Connect in corso...
Quando registri un cluster all'esterno di Google Cloud, viene utilizzato l'agente Connect per gestire la comunicazione tra il cluster e il progetto host del parco risorse. L'agente Connect è un deployment, gke-connect-agent
, in genere installato nel tuo cluster nello spazio dei nomi gke-connect
. La raccolta dei log da questo agente Connect può essere utile per la risoluzione dei problemi di registrazione e connessione.
Puoi recuperare i log dell'agente eseguendo il comando seguente (regolare il conteggio delle righe, se necessario):
kubectl logs -n gke-connect -l app=gke-connect-agent --tail=-1
Per ottenere informazioni su ogni agente Connect in esecuzione nei cluster del progetto:
kubectl describe deployment --all-namespaces -l app=gke-connect-agent
Una connessione riuscita deve contenere voci simili all'esempio seguente:
2019/02/16 17:28:43.312056 dialer.go:244: dialer: dial: connected to gkeconnect.googleapis.com:443 2019/02/16 17:28:43.312279 tunnel.go:234: serve: opening egress stream... 2019/02/16 17:28:43.312439 tunnel.go:248: serve: registering endpoint="442223602236", shard="88d2bca5-f40a-11e8-983e-42010a8000b2" {"Params":{"GkeConnect":{"endpoint_class":1,"metadata":{"Metadata":{"Default":{"manifest_version":"234227867"}}}}}} ... 2019/02/16 17:28:43.312656 tunnel.go:259: serve: serving requests...
Raccolta dei log di GKE Identity Service
L'ispezione dei log di GKE Identity Service può essere utile se hai problemi con Google Gruppi o con l'assistenza di terze parti per Connect Gateway. Questo metodo di generazione dei log è applicabile solo a GKE on VMware o ai cluster Google Distributed Cloud Virtual for Bare Metal.
Aumenta il livello di dettaglio dei log di GKE Identity Service modificando la risorsa personalizzata clientconfig con il seguente comando:
kubectl edit deployment -n anthos-identity-service
e aggiungendo un flag
vmodule
sotto il campocontainers
in questo modo:spec: containers: ... - command: - --vmodule=cloud/identity/hybrid/charon/*=9
Riavvia il pod GKE Identity Service eliminandolo con il comando seguente:
kubectl delete pods -l k8s-app=ais -n anthos-identity-service
Un pod dovrebbe riaccendersi entro pochi secondi.
Dopo il riavvio del pod, esegui il comando originale che restituiva una risposta imprevista per compilare i log del pod GKE Identity Service con ulteriori dettagli.
Salva l'output di questi log in un file utilizzando il seguente comando:
kubectl logs -l k8s-app=ais -n anthos-identity-service --tail=-1 > gke_id_service_logs.txt
Se nei log dei pod di GKE Identity Service mancano gruppi previsti, verifica che la configurazione del cluster sia corretta. Se sono presenti altri problemi relativi al servizio GKE Identity, consulta Risolvere i problemi di accesso degli utenti o Risolvere i problemi di configurazione a livello di parco risorse.
tls: oversized record
di errori
- Sintomo
Potresti riscontrare un errore simile al seguente:
... dialer: dial: connection to gkeconnect.googleapis.com:443 failed after 388.080605ms: serve: egress call failed: rpc error: code = Unauthenticated desc = transport: oauth2: cannot fetch token: Post https://oauth2.googleapis.com/token: proxyconnect tcp: tls: oversized record received with length 20527
- Cause possibili
Questo può significare che l'agente Connect sta tentando di connettersi tramite HTTPS a un proxy solo HTTP. L'agente Connect supporta solo proxy HTTP basati su CONNECT.
- Risoluzione
Devi riconfigurare le variabili di ambiente del proxy come segue:
http_proxy=http://[PROXY_URL]:[PROXY_PORT] https_proxy=http://[PROXY_URL]:[PROXY_PORT]
oauth2: cannot fetch token
di errori
- Sintomo
Potresti riscontrare un errore simile al seguente:
... dialer: dial: connection to gkeconnect.googleapis.com:443 failed after 388.080605ms: serve: egress call failed: rpc error: code = Unauthenticated desc = transport: oauth2: cannot fetch token: Post https://oauth2.googleapis.com/token: read tcp 192.168.1.40:5570->1.1.1.1:80 read: connection reset by peer
- Cause possibili
Ciò può significare che il proxy HTTP upstream reimposta la connessione, molto probabilmente perché questo particolare URL non è consentito dal tuo proxy HTTP. Nell'esempio precedente, 1.1.1.1:80 è l'indirizzo del proxy HTTP.
- Risoluzione
Verifica che la lista consentita del proxy HTTP includa i seguenti URL/domini:
gkeconnect.googleapis.com oauth2.googleapis.com/token www.googleapis.com/oauth2/v1/certs
Errori di riavvio e arresto anomalo dei pod Connect Agent
- Sintomo
Potresti riscontrare errori intermittenti di tipo "Agente non raggiungibile" nella console Google Cloud per il tuo cluster e/o potresti notare che il pod è stato riavviato più volte:
$ kubectl get pods -n gke-connect NAME READY STATUS RESTARTS AGE gke-connect-agent-20230706-03-00-6b8f75dd58-dzwmt 1/1 Running 5 99m
Per risolvere questo problema, descrivi il pod per vedere se il suo ultimo stato è stato terminato a causa di un errore di memoria esaurita (OOM interrotto).
kubectl describe pods/gke-connect-agent-20230706-03-00-6b8f75dd58-dzwmt -n gke-connect
<some details skipped..>
Last State: Terminated
Reason: OOMKilled
- Cause possibili
- Per impostazione predefinita, i pod dell'agente Connect hanno un limite di RAM di 256 MiB. Se il cluster ha installato molti carichi di lavoro, è possibile che alcune richieste e risposte non possano essere gestite come previsto.
- Risoluzione
Aggiorna il deployment dell'agente Connect e concedi un limite di memoria più elevato, ad esempio:
containers: name: gke-connect-agent-20230706-03-00 resources: limits: memory: 512Mi
PermissionDenied
di errori
- Sintomo
Potresti riscontrare un errore simile al seguente:
tunnel.go:250: serve: recv error: rpc error: code = PermissionDenied desc = The caller does not have permission dialer.go:210: dialer: dial: connection to gkeconnect.googleapis.com:443 failed after 335.153278ms: serve: receive request failed: rpc error: code = PermissionDenied desc = The caller does not have permission dialer.go:150: dialer: connection done: serve: receive request failed: rpc error: code = PermissionDenied desc = The caller does not have permission dialer.go:228: dialer: backoff: 1m14.1376766s
- Cause possibili
Ciò può significare che non hai associato il ruolo Identity and Access Management (IAM) richiesto all'account di servizio Google Cloud che hai creato per autorizzare l'agente Connect a connettersi a Google. L'account di servizio Google Cloud richiede il ruolo IAM
gkehub.connect
.Questo può accadere anche se elimini e ricrei l'account di servizio Google Cloud con lo stesso nome. In questo caso, dovrai anche eliminare e ricreare l'associazione del ruolo IAM. Per ulteriori informazioni, consulta la sezione Eliminare e ricreare gli account di servizio.
- Risoluzione
Associa il ruolo
gkehub.connect
al tuo account di servizio (tieni presente che il ruologkehub.admin
non dispone delle autorizzazioni appropriate per la connessione e non è destinato a essere utilizzato dagli account di servizio).Ad esempio, per un progetto denominato
my-project
e un account di servizio Google Cloud chiamatogkeconnect@my-project.iam.gserviceaccount.com
, dovresti eseguire il seguente comando per associare il ruolo all'account di servizio:gcloud projects add-iam-policy-binding my-project --member \ serviceAccount:gkeconnect@my-project.iam.gserviceaccount.com \ --role "roles/gkehub.connect"
Puoi visualizzare e verificare che le autorizzazioni dell'account di servizio siano state applicate a un account di servizio Google Cloud esaminando l'output del comando seguente. Dovresti vedere il valore
role: roles/gkehub.connect
associato all'account di servizio Google Cloud associato.gcloud projects get-iam-policy my-project
Errore durante l'associazione del ruolo IAM all'account di servizio Google Cloud
- Sintomo
Potresti riscontrare un errore simile al seguente:
ERROR: (gcloud.projects.add-iam-policy-binding) PERMISSION_DENIED: Service Management API has not been used in project [PROJECT_ID] before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/servicemanagement.googleapis.com/overview?project=[PROJECT_ID] then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
- Cause possibili
Potresti non disporre delle autorizzazioni IAM per eseguire il comando
gcloud projects add-iam-policy-binding
.- Risoluzione
Devi avere l'autorizzazione
resourcemanager.projects.setIamPolicy
Se disponi dei ruoliProject IAM Admin
,Owner
oEditor
, dovresti essere in grado di eseguire il comando. Se un criterio di sicurezza interno ti impedisce di eseguire il comando, rivolgiti al tuo amministratore.
Errore con una chiave dell'account di servizio non valida
- Sintomo
Potresti riscontrare un errore simile al seguente:
2020/05/08 01:22:21.435104 environment.go:214: Got ExternalID 3770f509-b89b-48c4-96e0-860bb70b3a58 from namespace kube-system. 2020/05/08 01:22:21.437976 environment.go:485: Using gcp Service Account key 2020/05/08 01:22:21.438140 gkeconnect_agent.go:50: error creating kubernetes connect agent: failed to get tunnel config: unexpected end of JSON input
- Cause possibili
Questi log indicano che all'agente Connect è stata fornita una chiave dell'account di servizio non valida durante l'installazione.
- Risoluzione
Crea un nuovo file JSON contenente le credenziali dell'account di servizio e reinstalla l'agente Connect seguendo i passaggi per registrare un cluster.
Errore con chiave dell'account di servizio scaduta
- Sintomo
Potresti riscontrare un errore simile al seguente:
2020/05/08 01:22:21.435104 dialer.go:277: dialer: dial: connection to gkeconnect.googleapis.com:443 failed after 37.901608ms: serve: egress call failed: rpc error: code = Unauthenticated desc = transport: oauth2: cannot fetch token: 400 Bad Request Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}
- Cause possibili
Questi log indicano che l'agente Connect stava chiamando Connect con una chiave dell'account di servizio non valida. Il file della chiave dell'account di servizio potrebbe contenere errori o la chiave potrebbe essere scaduta.
Per verificare se la chiave è scaduta, utilizza la console Google Cloud per elencare le chiavi degli account di servizio e le relative date di scadenza.
- Risoluzione
Crea un nuovo file JSON contenente le credenziali dell'account di servizio e reinstalla l'agente Connect seguendo i passaggi per registrare un cluster.
Errore a causa di un orologio di sistema inclinato
- Sintomo
Potresti riscontrare un errore simile al seguente:
acceptCall: failed to parse token in req [rpc_id=1]: Token used before issued [rpc_id=1]
- Cause possibili
Il messaggio di log di solito indica che esiste un disallineamento dell'orologio nel cluster. Il token emesso dal cluster ha un timestamp non sincronizzato, pertanto viene rifiutato.
- Risoluzione
Per verificare se l'orologio non è sincronizzato correttamente, puoi eseguire il comando
date
sul tuo cluster e confrontarlo con l'ora standard. In genere questo problema è dovuto a una deviazione di pochi secondi. Per risolvere il problema, sincronizza di nuovo l'orologio del cluster.
Impossibile visualizzare i carichi di lavoro nella console Google Cloud
- Sintomi
Nei log di Connect Agent, potresti visualizzare i seguenti errori:
"https://10.0.10.6:443/api/v1/nodes" YYYY-MM-DDTHH mm:ss.sssZ http.go:86: GET "https://10.0.10.6:443/api/v1/pods" YYYY-MM-DDTHH mm:ss.sssZ http.go:139: Response status: "403 Forbidden" YYYY-MM-DDTHH mm:ss.sssZ http.go:139: Response status: "403 Forbidden"`
- Cause possibili
Questi log indicano che Google Cloud sta tentando di accedere al cluster utilizzando le credenziali che hai fornito durante la registrazione. Gli errori 403 indicano che le credenziali non dispongono delle autorizzazioni necessarie per accedere al cluster.
- Risoluzione
Controlla che il token e l'account a cui è associato e che disponga delle autorizzazioni appropriate sul cluster.
Scadenza contesto superata
- Sintomo
Potresti riscontrare un errore simile al seguente:
2019/03/06 21:08:43.306625 dialer.go:235: dialer: dial: connecting to gkeconnect.googleapis.com:443... 2019/03/06 21:09:13.306893 dialer.go:240: dialer: dial: unable to connect to gkeconnect.googleapis.com:443: context deadline exceeded 2019/03/06 21:09:13.306943 dialer.go:183: dialer: connection done: context deadline exceeded
- Cause possibili
Questo errore indica un problema di rete TCP di basso livello in cui l'agente Connect non può comunicare con gkeconnect.googleapis.com.
- Risoluzione
Verifica che i carichi di lavoro dei pod all'interno del cluster possano essere risolti e avere la connettività in uscita a gkeconnect.googleapis.com sulla porta 443.
La connessione all'agente non funziona a intermittenza
- Sintomi
Nei log di Connect Agent, potresti visualizzare i seguenti errori:
2020/10/06 18:02:34.409749 dialer.go:277: dialer: dial: connection to gkeconnect.googleapis.com:443 failed after 8m0.790286282s: serve: receive request failed: rpc error: code = Unavailable desc = transport is closing 2020/10/06 18:02:34.416618 dialer.go:207: dialer: connection done: serve: receive request failed: rpc error: code = Unavailable desc = transport is closing 2020/10/06 18:02:34.416722 dialer.go:295: dialer: backoff: 978.11948ms 2020/10/06 18:02:34.410097 tunnel.go:651: sendResponse: EOF [rpc_id=52] 2020/10/06 18:02:34.420077 tunnel.go:651: sendResponse: EOF [rpc_id=52] 2020/10/06 18:02:34.420204 tunnel.go:670: sendHalfClose: EOF [rpc_id=52] 2020/10/06 18:02:34.401412 tunnel.go:670: sendHalfClose: EOF [rpc_id=53]
- Cause possibili
La connessione a Connect si chiude quando l'agente Connect non dispone di risorse sufficienti, ad esempio su istanze AWS EC2 più piccole come
t3.medium
.- Risoluzione
Se utilizzi AWS e il tipo di istanza T3, abilita T3 illimitati o un tipo di istanza con più risorse per i pool di nodi.
Il parco risorse non può accedere al progetto
- Sintomi
Durante alcune operazioni del parco risorse (di solito la registrazione del cluster) potresti notare un errore simile al seguente:
ERROR: (gcloud.container.hub.memberships.register) failed to initialize Feature "authorizer", the fleet service account (service-PROJECT_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com) may not have access to your project
- Cause possibili
L'account di servizio predefinito del parco risorse,
gcp-sa-gkehub
, potrebbe non essere più associato a un progetto. L'agente di servizio del parco risorse è un ruolo IAM che concede all'account di servizio le autorizzazioni per gestire le risorse del cluster. Se rimuovi questa associazione dei ruoli dall'account di servizio, l'account di servizio predefinito verrà scollegato dal progetto, il che potrebbe impedirti di registrare i cluster e altre operazioni di cluster.Puoi verificare se l'account di servizio è stato rimosso dal progetto utilizzando gcloud CLI o la console Google Cloud. Se il comando o la dashboard non visualizzano
gcp-sa-gkehub
tra i tuoi account di servizio, l'account di servizio è stato scollegato.
gcloud
Esegui questo comando:
gcloud projects get-iam-policy PROJECT_NAME
dove PROJECT_NAME
è il nome del progetto
in cui stai tentando di registrare il cluster.
Console
Visita la pagina IAM e amministrazione nella console Google Cloud.
- Risoluzione
Se hai rimosso l'associazione del ruolo Agente di servizio del parco risorse, esegui questi comandi per ripristinare l'associazione dei ruoli:
PROJECT_NUMBER=$(gcloud projects describe PROJECT_NAME --format "value(projectNumber)") gcloud projects add-iam-policy-binding PROJECT_NAME \ --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \ --role roles/gkehub.serviceAgent
Per confermare che l'associazione del ruolo è stata concessa:
gcloud projects get-iam-policy PROJECT_NAME
Se vedi il nome dell'account di servizio insieme al ruolo
gkehub.serviceAgent
, l'associazione del ruolo è stata concessa. Ad esempio:- members: - serviceAccount:service-1234567890@gcp-sa-gkehub.iam.gserviceaccount.com role: roles/gkehub.serviceAgent
Errore nella registrazione di un cluster GKE da un progetto diverso dal parco risorse
- Sintomi
Durante la registrazione di un cluster GKE da un progetto diverso dal progetto del parco risorse, potresti notare un errore simile al seguente in gcloud CLI:
... message: 'DeployPatch failed'> detail: 'DeployPatch failed' ...
Per verificarlo nel logging, applica i seguenti filtri:
resource.type="gke_cluster" resource.labels.cluster_name="my-cluster" protoPayload.methodName="google.container.v1beta1.ClusterManager.UpdateCluster" protoPayload.status.code="13" protoPayload.status.message="Internal error." severity=ERROR
- Cause possibili
L'account di servizio predefinito del parco risorse non dispone delle autorizzazioni necessarie nel progetto del cluster GKE.
- Risoluzione
Concedi all'account di servizio predefinito del parco risorse le autorizzazioni richieste prima di registrare il cluster.
Errore durante la registrazione/annullamento della registrazione di un cluster GKE o l'aggiornamento dei dettagli dell'appartenenza al parco risorse per un cluster GKE registrato durante la rotazione delle credenziali
- Sintomi
Durante la rotazione delle credenziali del cluster(https://cloud.google.com/kubernetes-engine/docs/how-to/credential-rotation), potresti riscontrare errori se registri/annulla la registrazione di un cluster GKE o aggiorni l'appartenenza per un cluster GKE registrato.
ERROR: (gcloud.container.hub.memberships.unregister) "code": 13, "message": "an internal error has occurred"
- Cause possibili
Le credenziali del cluster si trovano in uno stato intermedio in cui il servizio parco risorse non è in grado di accedervi.
- Risoluzione
Completa la rotazione prima di registrare/umpregistrare il cluster o aggiornare l'appartenenza per un cluster GKE registrato.
Errore durante la disabilitazione dell'API Fleet
- Sintomi
Quando provi a disabilitare l'API Fleet (
gkehub.googleapis.com
), potresti riscontrare un errore simile al seguente:Not ready to deactivate the service on this project; ensure there are no more resources managed by this service.
- Cause possibili
Sono ancora presenti cluster registrati in Google Cloud (abbonamenti) o funzionalità a livello di parco risorse abilitate in questo progetto. La registrazione o la disattivazione di tutte le appartenenze o funzionalità deve essere annullata prima di poter disabilitare l'API.
Per visualizzare i cluster attualmente registrati, segui le istruzioni in Visualizzare i membri del parco risorse
Per visualizzare tutte le funzionalità attive a livello di parco risorse per il tuo progetto:
gcloud e cURL
$ curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://gkehub.googleapis.com/v1alpha1/projects/PROJECT_NAME/locations/global/features
dove PROJECT_NAME
è il nome del progetto
in cui stai tentando di disabilitare l'API Fleet.
Console
Se hai abilitato GKE Enterprise nel tuo progetto, visita la pagina della pagina di panoramica delle funzionalità nella console Google Cloud. Le funzionalità elencate come ATTIVATE sono funzionalità attive a livello di parco risorse.
- Risoluzione
Innanzitutto, annulla la registrazione dei cluster ancora registrati nel parco risorse di progetti. Devi annullare la registrazione di tutti i cluster prima di disabilitare alcune funzionalità.
Dopo aver eseguito questa operazione, disabilita tutte le funzionalità a livello di parco risorse. Attualmente, ciò è possibile solo con l'API REST del parco risorse.
Disattiva le funzionalità a livello di parco risorse che hai abilitato per il progetto
$ gcloud alpha container hub FEATURE_COMMAND disable
Disattiva l'autorizzazione e il monitoraggio delle funzionalità, che sono attivi per impostazione predefinita.
$ curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -X "DELETE" \ https://gkehub.googleapis.com/v1alpha1/projects/PROJECT_NAME/locations/global/features/FEATURE
dove
FEATURE
è il nome della funzionalità da disabilitare (ad esempioauthorizer
ometering
).
Autorizzazioni mancanti durante la registrazione di un cluster
- Sintomo:
Quando provi a registrare un cluster con un account utente o con un account di servizio Google Cloud, potresti visualizzare un errore simile al seguente:
ERROR: (gcloud.container.hub.memberships.register) ResponseError: code=403, message=Required "container.clusters.get" permission(s) for "projects/my-project/zones/zone-a/clusters/my-cluster"
- Possibile causa:
L'account che tenta di registrare il cluster non dispone del ruolo
cluster-admin
controllo dell'accesso basato sui ruoli (RBAC) richiesto nel cluster.- Soluzioni
Concedi il ruolo RBAC di
cluster-admin
all'account prima di registrare il cluster.
Errore Failed to check if the user is a cluster-admin: Unable to connect to the server
durante la registrazione di un cluster
- Sintomo:
Durante il tentativo di registrare un cluster, potresti ricevere un errore simile al seguente:
ERROR: (gcloud.container.hub.memberships.register) Failed to check if the user is a cluster-admin: Unable to connect to the server: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Oppure
ERROR: (gcloud.container.hub.memberships.register) Failed to check if the user is a cluster-admin: Unable to connect to the server: dial tcp MASTER_ENDPOINT_IP:443: i/o timeout
- Possibile causa:
La macchina su cui esegui il comando di registrazione
gcloud
non può connettersi all'endpoint esterno del cluster. In genere questo accade se hai un cluster privato con accesso esterno/IP disabilitato, ma l'indirizzo IP esterno della tua macchina non è incluso nella lista consentita. Tieni presente che la registrazione di un cluster GKE non ha questo requisito dopo gcloud 407.0.0.- Soluzioni
Assicurati che la macchina su cui vuoi eseguire il comando di registrazione
gcloud
possa accedere al server API del cluster. Se nel cluster non è abilitato l'accesso esterno, invia una richiesta all'assistenza di Google Cloud.
Ulteriore assistenza
Puoi inviare un ticket all'assistenza Google Cloud per GKE Enterprise seguendo questi passaggi:
- Invia una richiesta all'assistenza Google Cloud.
- Segui le istruzioni riportate in Raccolta dei log dell'agente Connect per salvare i log di Connect.
- Se risolvi i problemi di un cluster GKE su VMware o Google Distributed Cloud Virtual for Bare Metal utilizzando Google Gruppi o l'assistenza di terze parti, segui le istruzioni in Raccolta dei log di GKE Identity Service per salvare i log di GKE Identity Service. Se necessario, assicurati di pulire i log dei pod nel file salvato.
- Allega i log pertinenti alla richiesta.