Questa pagina descrive come risolvere i problemi relativi agli errori comuni che potresti riscontrare durante la registrazione dei cluster a un parco progetti 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 on-premise e i cluster su altri cloud pubblici dipendono dall'agente Connect per stabilire e mantenere una connessione tra il cluster e il tuo progetto Google Cloud e per gestire le richieste Kubernetes. Se visualizzi errori come "Agente non raggiungibile" o "Impossibile connettersi al control plane del cluster", potrebbe esserci un problema con l'agente Connect.
Raccolta dei log dell'agente Connect
Quando registri un cluster esterno Google Cloud, utilizza 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 cluster nello spazio dei nomi
gke-connect
. La raccolta dei log da questo agente Connect può essere utile per risolvere i problemi di registrazione e connessione.
Puoi recuperare i log dell'agente eseguendo il seguente comando (modifica 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 dovrebbe avere voci simili all'esempio riportato di seguito:
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 riscontri problemi con Google Gruppi o con l'assistenza di terze parti per Connect Gateway. Questo metodo di generazione dei log è applicabile solo ai cluster nelle implementazioni Google Distributed Cloud su VMware o 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
nel campocontainers
come segue:spec: containers: ... - command: - --vmodule=cloud/identity/hybrid/charon/*=9
Riavvia il pod GKE Identity Service eliminandolo con il seguente comando:
kubectl delete pods -l k8s-app=ais -n anthos-identity-service
Un pod dovrebbe riapparire in pochi secondi.
Una volta riavviato il pod, esegui il comando originale che restituiva una risposta imprevista per popolare i log del pod del servizio di identità GKE con maggiori 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 i gruppi previsti non sono presenti nei log del pod GKE Identity Service, verifica che la configurazione del cluster sia corretta. Se si verificano altri problemi relativi a GKE Identity Service, consulta Risolvere i problemi di accesso degli utenti o Risolvere i problemi di configurazione a livello di parco progetti.
tls: oversized record
errori
- Sintomo
Potresti riscontrare un errore simile a questo:
... 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
Ciò può significare che l'agente Connect sta tentando di connettersi tramite HTTPS a un proxy solo HTTP. L'agente di connessione 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
errori
- Sintomo
Potresti riscontrare un errore simile a questo:
... 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 ha reimpostato la connessione, molto probabilmente perché questo URL specifico non è consentito dal proxy HTTP. Nell'esempio sopra, 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 arresto anomalo e riavvio del pod dell'agente Connect
- Sintomo
Potresti riscontrare errori intermittenti "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 il problema, descrivi il pod per vedere se il suo ultimo stato è stato terminato a causa di un errore di esaurimento della memoria (OOMKilled):
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 di connessione hanno un limite di RAM di 256 MiB. Se nel cluster sono installati molti carichi di lavoro, è possibile che alcune richieste e risposte non possano essere gestite come previsto.
- Risoluzione
Aggiorna il deployment dell'agente Connect e concedigli un limite di memoria più elevato, ad esempio:
containers: name: gke-connect-agent-20230706-03-00 resources: limits: memory: 512Mi
PermissionDenied
errori
- Sintomo
Potresti riscontrare un errore simile a questo:
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 al service accountGoogle Cloud che hai creato per autorizzare l'agente Connect a connettersi a Google. Il service account Google Cloud richiede il ruolo IAM
gkehub.connect
.Questo può accadere anche se elimini e ricrei il account di servizio Google Cloudcon lo stesso nome. In questo caso, devi anche eliminare e ricreare l'associazione di ruolo IAM. Per ulteriori informazioni, consulta la sezione Eliminazione e ricreazione di service account.
- 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 all'utilizzo da parte dei service account).Ad esempio, per un progetto denominato
my-project
e un account di servizio Google Clouddenominatogkeconnect@my-project.iam.gserviceaccount.com
, esegui questo comando per associare il ruolo al 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 del account di servizio siano state applicate a un service account Google Cloud esaminando l'output del seguente comando e dovresti visualizzare
role: roles/gkehub.connect
associato al service account Google Cloud .gcloud projects get-iam-policy my-project
Errore durante l'associazione del ruolo IAM al service account Google Cloud
- Sintomo
Potresti riscontrare un errore simile a questo:
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 disporre dell'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 all'amministratore.
Errore dovuto all'orologio di sistema distorto
- Sintomo
Potresti riscontrare un errore simile a questo:
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 si è verificato uno sfasamento dell'orologio sul cluster. Il token emesso dal cluster ha un timestamp non sincronizzato e pertanto viene rifiutato.
- Risoluzione
Per verificare se l'orologio non è sincronizzato correttamente, puoi eseguire il comando
date
sul cluster e confrontarlo con l'ora standard. In genere, questo problema è causato da una deriva di pochi secondi. Per risolvere il problema, sincronizza di nuovo l'orologio del cluster.
Impossibile visualizzare i workload nella console Google Cloud
- Sintomi
Nei log di Connect Agent potresti notare 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
Verifica che il token e l'account a cui è associato dispongano delle autorizzazioni appropriate sul cluster.
Scadenza del contesto superata
- Sintomo
Potresti riscontrare un errore simile a questo:
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 Connect Agent non può comunicare con gkeconnect.googleapis.com.
- Risoluzione
Verifica che i carichi di lavoro del pod all'interno di questo cluster possano risolvere e avere connettività in uscita a gkeconnect.googleapis.com sulla porta 443.
La connessione dell'agente non riesce a intermittenza
- Sintomi
Nei log di Connect Agent potresti notare 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, attiva T3 Unlimited o utilizza un tipo di istanza con più risorse per i tuoi node pool.
Il parco risorse non può accedere al progetto
- Sintomi
Durante alcune operazioni di Fleet (di solito la registrazione del cluster), potresti riscontrare 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 di Fleet,
gcp-sa-gkehub
, può essere scollegato accidentalmente da un progetto. L'agente di servizio Fleet è un ruolo IAM che concede al account di servizio le autorizzazioni per gestire le risorse del cluster. Se rimuovi questo binding del ruolo dalaccount di serviziot, il service account predefinito viene scollegato dal progetto, il che può impedirti di registrare cluster e altre operazioni sui cluster.Puoi verificare se il account di servizio è stato rimosso dal tuo progetto utilizzando gcloud CLI o la console Google Cloud . Se il comando o la dashboard non mostrano
gcp-sa-gkehub
tra i tuoi service account, ilaccount di serviziont è 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 di ruolo dell'agente di servizio Fleet, esegui questi comandi per ripristinarla:
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 verificare che l'associazione di ruolo sia stata concessa:
gcloud projects get-iam-policy PROJECT_NAME
Se vedi il nome del account di servizio insieme al ruolo
gkehub.serviceAgent
, l'associazione di ruolo è stata concessa. Ad esempio:- members: - serviceAccount:service-1234567890@gcp-sa-gkehub.iam.gserviceaccount.com role: roles/gkehub.serviceAgent
Errore durante la registrazione di un cluster GKE da un progetto diverso da Fleet
- Sintomi
Durante la registrazione di un cluster GKE da un progetto diverso dal progetto parco risorse, potresti visualizzare un errore simile al seguente nella gcloud CLI:
... message: 'DeployPatch failed'> detail: 'DeployPatch failed' ...
Può essere verificato nella registrazione applicando 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
Il service account predefinito del parco risorse non dispone delle autorizzazioni richieste 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 durante la registrazione/annullamento della registrazione di un cluster GKE o l'aggiornamento dell'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 Fleet non è in grado di accedervi.
- Risoluzione
Completa la rotazione prima di registrare/annullare la registrazione del cluster o aggiornare l'appartenenza per un cluster GKE registrato.
Errore durante la disattivazione 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
In questo progetto sono ancora registrati cluster in Google Cloud (appartenenze) o sono abilitate funzionalità a livello di parco risorse. Tutti gli abbonamenti o le funzionalità devono essere annullati o disattivati prima che l'API possa essere disattivata.
Per visualizzare i cluster registrati, segui le istruzioni riportate 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/v1alpha/projects/PROJECT_NAME/locations/global/features
dove PROJECT_NAME
è il nome del progetto in cui
stai tentando di disattivare l'API Fleet.
Console
Se hai abilitato GKE nel tuo progetto, visita la pagina Feature Manager nella console Google Cloud . Le funzionalità elencate come ATTIVATE sono funzionalità attive a livello di flotta.
- Risoluzione
Innanzitutto, annulla la registrazione di tutti i cluster ancora registrati nel parco risorse del progetto. Tutti i cluster devono essere annullati prima che alcune funzionalità possano essere disattivate.
Una volta fatto, disattiva tutte le funzionalità a livello di parco risorse. Al momento, questa operazione è possibile solo con l'API REST per la flotta.
Disattiva le funzionalità a livello di parco risorse che hai abilitato per il tuo progetto
$ gcloud alpha container hub FEATURE_COMMAND disable
Disattiva l'autorizzazione e la misurazione delle funzionalità, che sono abilitate per impostazione predefinita.
$ curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -X "DELETE" \ https://gkehub.googleapis.com/v1alpha/projects/PROJECT_NAME/locations/global/features/FEATURE
dove
FEATURE
è il nome della funzionalità da disattivare (ad esempioauthorizer
ometering
).
Autorizzazioni del cluster mancanti durante la registrazione di un cluster
- Sintomo:
Quando provi a registrare un cluster con un account utente o un service account, potresti ricevere un errore simile al seguente: Google Cloud
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 sta tentando di registrare il cluster non dispone del ruolo di controllo dell'accesso basato sui ruoli (RBAC)
cluster-admin
richiesto nel cluster.- Soluzioni
Concedi il ruolo RBAC
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:
Quando provi a 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
gcloud
di registrazione non può connettersi all'endpoint esterno del cluster. In genere questo accade se hai un cluster privato con accesso/IP esterno disattivato, ma l'indirizzo IP esterno della tua macchina non è nella lista consentita. Tieni presente che la registrazione di un cluster GKE non prevede 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 il tuo cluster non ha l'accesso esterno abilitato, apri una richiesta con l' Google Cloud assistenza.
Errore: l'eliminazione di un abbonamento gestito da Google non è consentita
Dopo aver registrato il cluster in un parco risorse, questo diventa un membro del parco risorse con un nome di appartenenza al parco risorse univoco. Se provi a eliminare questa appartenenza eseguendo
gcloud container hub memberships delete MEMBERSHIP_NAME
, potresti
visualizzare il seguente errore:
ERROR: (gcloud.container.hub.memberships.delete) FAILED_PRECONDITION: membership "projects/PROJECT_ID/locations/us-centrall/memberships/MEMBERSHIP_NAME" is a managed resource of your cluster. Deleting a google-managed membership directly is not allowed. Please offboard your fleet membership via cluster API: failed precondition
Per eliminare correttamente un'appartenenza al parco risorse, segui le istruzioni riportate in Annullamento della registrazione di un cluster.
Ricevere ulteriore assistenza
Puoi presentare un ticket all' Google Cloud assistenza per GKE seguendo questi passaggi:
- Invia una richiesta all' Google Cloud assistenza.
- Segui le istruzioni riportate in Raccolta dei log di Connect Agent per salvare i log di Connect.
- Se risolvi i problemi di un cluster on-premise utilizzando Google Gruppi o l'assistenza di terze parti, segui le istruzioni riportate in Raccolta dei log di GKE Identity Service per salvare i log di GKE Identity Service. Se necessario, assicurati di sanificare i log del pod nel file salvato.
- Allega i log pertinenti alla tua richiesta.