Cette page explique comment résoudre les erreurs courantes que vous pouvez rencontrer lors de l'enregistrement de clusters dans un parc ou de la connexion à des clusters en dehors de Google Cloud à l'aide de la console Google Cloud, de Google Cloud CLI ou kubectl
via la Passerelle Connect.
Les clusters sur site et les clusters sur d'autres clouds publics dépendent de l'agent Connect pour établir et maintenir une connexion entre le cluster et votre projet Google Cloud, ainsi que pour traiter les requêtes Kubernetes. Si des erreurs telles que "Agent inaccessible" ou "Échec de la connexion au plan de contrôle du cluster" s'affichent, cela peut indiquer un problème avec l'agent Connect.
Collecte des journaux Connect Agent
Lorsque vous enregistrez un cluster en dehors de Google Cloud, il utilise l'agent Connect pour gérer la communication entre votre cluster et votre projet hôte de parc. L'agent Connect est un déploiement, gke-connect-agent
, généralement installé dans votre cluster dans l'espace de noms gke-connect
. La collecte des journaux à partir de cet agent permet de résoudre les problèmes d'enregistrement et de connexion.
Vous pouvez récupérer les journaux de l'agent en exécutant la commande suivante (ajustez le nombre de lignes si nécessaire) :
kubectl logs -n gke-connect -l app=gke-connect-agent --tail=-1
Pour obtenir des informations sur chaque agent Connect exécuté dans les clusters de votre projet, procédez comme suit :
kubectl describe deployment --all-namespaces -l app=gke-connect-agent
Une connexion réussie doit renvoyer des entrées semblables à cet exemple :
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...
Collecter les journaux d'identité de service GKE
L'inspection des journaux d'identité de service GKE peut être utile si vous rencontrez des problèmes avec Google Groupes ou l'assistance tierce pour la passerelle Connect. Cette méthode de génération de journaux ne s'applique qu'aux clusters des déploiements Google Distributed Cloud sur VMware ou Bare Metal.
Augmentez la verbosité des journaux d'identité de service GKE en modifiant la ressource personnalisée clientconfig à l'aide de la commande suivante:
kubectl edit deployment -n anthos-identity-service
et en ajoutant une option
vmodule
sous le champcontainers
comme ceci:spec: containers: ... - command: - --vmodule=cloud/identity/hybrid/charon/*=9
Redémarrez le pod d'identité de service GKE en le supprimant à l'aide de la commande suivante:
kubectl delete pods -l k8s-app=ais -n anthos-identity-service
Un pod devrait être réactivé en quelques secondes.
Une fois le pod redémarré, exécutez la commande d'origine qui renvoie une réponse inattendue afin de renseigner plus de détails dans les journaux du pod d'identité de service GKE.
Enregistrez le résultat de ces journaux dans un fichier à l'aide de la commande suivante:
kubectl logs -l k8s-app=ais -n anthos-identity-service --tail=-1 > gke_id_service_logs.txt
Si les groupes attendus ne figurent pas dans les journaux du pod d'identité de service GKE, vérifiez que la configuration du cluster est correcte. S'il existe d'autres problèmes liés à l'identité de service GKE, consultez la page Résoudre les problèmes d'accès des utilisateurs ou Résoudre les problèmes de configuration au niveau du parc.
tls: oversized record
erreurs
- Symptôme
Vous pourriez rencontrer une erreur semblable à ceci :
... 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
- Causes possibles
L'agent Connect tente de se connecter via HTTPS à un proxy qui n'accepte que les connexions HTTP. L'agent Connect n'est compatible qu'avec les proxys HTTP basés sur CONNECT.
- Solution
Vous devez reconfigurer vos variables d'environnement proxy de la manière suivante :
http_proxy=http://[PROXY_URL]:[PROXY_PORT] https_proxy=http://[PROXY_URL]:[PROXY_PORT]
oauth2: cannot fetch token
erreurs
- Symptôme
Vous pourriez rencontrer une erreur semblable à ceci :
... 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
- Causes possibles
Le proxy HTTP en amont a peut-être réinitialisé la connexion, car cette URL particulière n'est pas autorisée par votre proxy HTTP. Dans l'exemple ci-dessus, 1.1.1.1:80 est l'adresse du proxy HTTP.
- Solution
Vérifiez que votre liste d'autorisation de proxy HTTP inclut les URL ou les domaines suivants :
gkeconnect.googleapis.com oauth2.googleapis.com/token www.googleapis.com/oauth2/v1/certs
Erreurs de plantage et de redémarrage du pod Connect Agent
- Symptôme
Vous pouvez rencontrer des erreurs intermittentes "Agent inaccessible" dans la console Google Cloud pour votre cluster et/ou vous constaterez peut-être que le pod a redémarré plusieurs fois:
$ kubectl get pods -n gke-connect NAME READY STATUS RESTARTS AGE gke-connect-agent-20230706-03-00-6b8f75dd58-dzwmt 1/1 Running 5 99m
Pour résoudre ce problème, décrivez le pod pour voir si son dernier état a été arrêté en raison d'une erreur de mémoire saturée (OOMKilled). :
kubectl describe pods/gke-connect-agent-20230706-03-00-6b8f75dd58-dzwmt -n gke-connect
<some details skipped..>
Last State: Terminated
Reason: OOMKilled
- Causes possibles
- Par défaut, les pods de l'agent Connect disposent d'une limite de RAM de 256 Mio. Si le cluster a installé de nombreuses charges de travail, il est possible que certaines requêtes et réponses ne puissent pas être traitées comme prévu.
- Solution
Mettez à jour le déploiement de Connect Agent et accordez-lui une limite de mémoire plus élevée, par exemple:
containers: name: gke-connect-agent-20230706-03-00 resources: limits: memory: 512Mi
PermissionDenied
erreurs
- Symptôme
Vous pourriez rencontrer une erreur semblable à ceci :
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
- Causes possibles
Vous n'avez pas lié le rôle Identity and Access Management (IAM) requis au compte de service Google Cloud que vous avez créé pour autoriser l'agent Connect à se connecter à Google. Le compte de service Google Cloud nécessite le rôle IAM
gkehub.connect
.Cela peut également se produire si vous supprimez et recréez le compte de service Google Cloud du même nom. Dans ce cas, vous devez également supprimer et recréer la liaison de rôle IAM. Pour en savoir plus, consultez la section Supprimer et recréer des comptes de service.
- Solution
Liez le rôle
gkehub.connect
à votre compte de service (notez que le rôlegkehub.admin
ne dispose pas des autorisations nécessaires pour se connecter et qu'il n'est pas conçu pour être utilisé par des comptes de service).Par exemple, pour un projet nommé
my-project
et un compte de service Google Cloud appelégkeconnect@my-project.iam.gserviceaccount.com
, exécutez la commande suivante pour lier le rôle au compte de service :gcloud projects add-iam-policy-binding my-project --member \ serviceAccount:gkeconnect@my-project.iam.gserviceaccount.com \ --role "roles/gkehub.connect"
Vous pouvez afficher les autorisations du compte de service et vérifier qu'elles ont été appliquées à un compte de service Google Cloud en examinant le résultat de la commande ci-dessous. Le rôle
role: roles/gkehub.connect
devrait être lié au compte de service Google Cloud associé.gcloud projects get-iam-policy my-project
Erreur lors de la liaison du rôle IAM au compte de service Google Cloud
- Symptôme
Vous pourriez rencontrer une erreur semblable à ceci :
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.
- Causes possibles
Vous ne disposez peut-être pas des autorisations IAM nécessaires pour exécuter la commande
gcloud projects add-iam-policy-binding
.- Solution
Vous devez disposer de l'autorisation
resourcemanager.projects.setIamPolicy
. Si vous disposez des rôlesProject IAM Admin
,Owner
ouEditor
, vous devriez pouvoir exécuter la commande. Si vous n'y parvenez pas en raison d'une règle de sécurité interne, contactez votre administrateur.
Erreur liée à une clé de compte de service non valide
- Symptôme
Vous pourriez rencontrer une erreur semblable à ceci :
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
- Causes possibles
Ces journaux indiquent que l'agent Connect a été fourni avec une clé de compte de service non valide lors de l'installation.
- Solution
Créez un fichier JSON contenant les identifiants du compte de service, puis réinstallez l'agent Connect en suivant la procédure pour enregistrer un cluster.
Erreur liée à une clé de compte de service arrivée à expiration
- Symptôme
Vous pourriez rencontrer une erreur semblable à ceci :
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."}
- Causes possibles
Ces journaux indiquent que l'agent Connect appelait Connect avec une clé de compte de service non valide. Le fichier de clé du compte de service peut contenir des erreurs ou la clé peut avoir expiré.
Pour vérifier si la clé a expiré, utilisez la console Google Cloud pour répertorier vos clés de compte de service et leurs les dates d'expiration.
- Solution
Créez un fichier JSON contenant les identifiants du compte de service puis réinstallez l'agent Connect en suivant la procédure pour enregistrer un cluster.
Erreur suite à une horloge système faussée
- Symptôme
Vous pourriez rencontrer une erreur semblable à ceci :
acceptCall: failed to parse token in req [rpc_id=1]: Token used before issued [rpc_id=1]
- Causes possibles
Le message du journal indique généralement un décalage d'horloge sur le cluster. Le jeton émis par le cluster dispose d'un horodatage non synchronisé, et est par conséquent refusé.
- Solution
Pour vérifier si l'horloge n'est pas correctement synchronisée, Vous pouvez exécuter la commande
date
sur votre cluster et la comparer à l'heure normale. En règle générale, un décalage de quelques secondes entraînera ce problème. Pour le résoudre, resynchronisez l'horloge de votre cluster.
Les charges de travail ne s'affichent pas dans la console Google Cloud
- Symptômes
Les journaux de Connect Agent peuvent signaler les erreurs suivantes :
"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"`
- Causes possibles
Ces journaux indiquent que Google Cloud tente d'accéder au cluster à l'aide des identifiants fournis lors de l'enregistrement. Les erreurs 403 indiquent que les identifiants ne disposent pas des autorisations nécessaires pour accéder au cluster.
- Solution
Vérifiez le jeton et le compte auquel il est associé et assurez-vous qu'il dispose des autorisations appropriées sur le cluster.
Date limite du contexte dépassée
- Symptôme
Vous pourriez rencontrer une erreur semblable à ceci :
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
- Causes possibles
Cette erreur indique un problème de mise en réseau TCP de bas niveau où l'agent Connect ne peut pas communiquer avec gkeconnect.googleapis.com.
- Solution
Vérifiez que les charges de travail des pod de ce cluster peuvent résoudre gkeconnect.googleapis.com sur le port 443 et disposent d'une connectivité sortante sur cette adresse.
Échec intermittent de connexion de l'agent
- Symptômes
Les journaux de Connect Agent peuvent signaler les erreurs suivantes :
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]
- Causes possibles
La connexion à Connect se ferme lorsque l'agent Connect ne dispose pas de ressources suffisantes, par exemple sur des instances AWS EC2 plus petites telles que
t3.medium
.- Solution
Si vous utilisez AWS et le type d'instance T3, activez T3 illimité ou utilisez un type d'instance avec plus de ressources. pour vos pools de nœuds.
Fleet ne peut pas accéder au projet
- Symptômes
Lors de certaines opérations Fleet (généralement l'enregistrement du cluster), vous pouvez rencontrer une erreur semblable à celle-ci :
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
- Causes possibles
Le compte de service par défaut de Fleet,
gcp-sa-gkehub
, peut être dissocié accidentellement d'un projet. L'agent de service Fleet est un rôle IAM qui accorde au compte de service les autorisations nécessaires pour gérer les ressources du cluster. Si vous supprimez cette liaison de rôle du compte de service, le compte de service par défaut est dissocié du projet, ce qui peut vous empêcher d'enregistrer des clusters et d'effectuer d'autres opérations sur ceux-ci.Vous pouvez vérifier si le compte de service a été supprimé de votre projet à l'aide de gcloud CLI ou de la console Google Cloud. Si la commande ou le tableau de bord n'affiche pas
gcp-sa-gkehub
parmi vos comptes de service, c'est que ce compte a été dissocié.
gcloud
Exécutez la commande suivante :
gcloud projects get-iam-policy PROJECT_NAME
où PROJECT_NAME
est le nom du projet dans lequel vous essayez d'enregistrer le cluster.
Console
Accédez à la page IAM et admin dans la console Google Cloud.
- Solution
Si vous avez supprimé la liaison de rôle d'agent de service Fleet, exécutez les commandes suivantes pour la restaurer :
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
Pour confirmer que la liaison de rôle a été activée :
gcloud projects get-iam-policy PROJECT_NAME
Si vous voyez le nom du compte de service avec le rôle
gkehub.serviceAgent
, la liaison de rôle a été activée. Exemple :- members: - serviceAccount:service-1234567890@gcp-sa-gkehub.iam.gserviceaccount.com role: roles/gkehub.serviceAgent
Erreur lors de l'enregistrement d'un cluster GKE à partir d'un projet différent de Fleet
- Symptômes
Lorsque vous enregistrez un cluster GKE à partir d'un projet différent du projet Fleet, vous pouvez rencontrer une erreur semblable à celle-ci dans gcloud CLI:
... message: 'DeployPatch failed'> detail: 'DeployPatch failed' ...
Vous pouvez le vérifier dans la journalisation en appliquant les filtres suivants:
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
- Causes possibles
Le compte de service Fleet par défaut ne dispose pas des autorisations requises dans le projet du cluster GKE.
- Solution
Accordez au compte de service Fleet par défaut les autorisations requises avant d'enregistrer le cluster.
Erreur lors de l'enregistrement/de l'annulation de l'enregistrement d'un cluster GKE ou de la mise à jour des détails d'appartenance à un parc pour un cluster GKE enregistré lors de la rotation des identifiants
- Symptômes
Lors de la rotation des identifiants de votre cluster (https://cloud.google.com/kubernetes-engine/docs/how-to/credential-rotation), vous pouvez rencontrer des erreurs si vous enregistrez ou annulez l'enregistrement d'un cluster GKE ou si vous mettez à jour l'appartenance pour un cluster GKE enregistré.
ERROR: (gcloud.container.hub.memberships.unregister) "code": 13, "message": "an internal error has occurred"
- Causes possibles
Les identifiants du cluster sont dans un état intermédiaire où le service de parc ne peut pas y accéder.
- Solution
Terminez la rotation avant d'enregistrer le cluster ou d'annuler son enregistrement, ou de mettre à jour l'appartenance à un cluster GKE enregistré.
Erreur lors de la désactivation de l'API Fleet
- Symptômes
Lorsque vous essayez de désactiver l'API Fleet (
gkehub.googleapis.com
), vous pouvez rencontrer une erreur semblable à celle-ci :Not ready to deactivate the service on this project; ensure there are no more resources managed by this service.
- Causes possibles
Des clusters sont toujours enregistrés sur Google Cloud (appartenances) ou avec des fonctionnalités au niveau du parc activées dans ce projet. Toutes les appartenances ou fonctionnalités doivent être désinscrites ou désactivées pour que l'API puisse être désactivée.
Pour afficher les clusters actuellement enregistrés, suivez les instructions de la page Afficher les membres du parc.
Pour voir toutes les fonctionnalités actives au niveau du parc de votre projet, procédez comme suit :
gcloud et cURL
$ curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://gkehub.googleapis.com/v1alpha1/projects/PROJECT_NAME/locations/global/features
où PROJECT_NAME
est le nom du projet dans lequel vous essayez de désactiver l'API Fleet.
Console
Si GKE Enterprise est activé dans votre projet, consultez la page Gestionnaire de fonctionnalités dans la console Google Cloud. Les fonctionnalités répertoriées comme ENABLED sont des fonctionnalités actives au niveau du parc.
- Solution
Tout d'abord, annulez l'enregistrement de tous les clusters encore enregistrés dans le parc de votre projet. Tous les clusters doivent être désenregistrés pour que certaines fonctionnalités puissent être désactivées.
Désactivez ensuite toutes les fonctionnalités au niveau du parc. Actuellement, cela n'est possible qu'avec l'API REST Fleet.
Désactiver les fonctionnalités au niveau du parc que vous avez activées pour votre projet
$ gcloud alpha container hub FEATURE_COMMAND disable
Désactiver les outils d'activation et de mesure des fonctionnalités, qui sont activés par défaut.
$ curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -X "DELETE" \ https://gkehub.googleapis.com/v1alpha1/projects/PROJECT_NAME/locations/global/features/FEATURE
où
FEATURE
est le nom de la fonctionnalité à désactiver (par exemple,authorizer
oumetering
).
Autorisations de cluster manquantes lors de l'enregistrement d'un cluster
- Symptôme :
Lorsque vous essayez d'enregistrer un cluster avec un compte utilisateur ou un compte de service Google Cloud, vous obtenez peut-être une erreur semblable à celle-ci :
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"
- Cause possible :
Le compte qui tente d'enregistrer le cluster ne dispose pas du rôle RBAC (contrôle des accès basé sur les rôles)
cluster-admin
sur le cluster, alors que celui-ci est requis.- Résolution :
Accordez le rôle RBAC
cluster-admin
au compte avant d'enregistrer le cluster.
Erreur Failed to check if the user is a cluster-admin: Unable to connect to the server
lors de l'enregistrement d'un cluster
- Symptôme :
Lorsque vous essayez d'enregistrer un cluster, vous obtenez peut-être une erreur semblable à celle-ci :
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)
Ou
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
- Cause possible :
La machine sur laquelle vous exécutez la commande d'enregistrement
gcloud
ne peut pas se connecter au point de terminaison externe du cluster. Cela se produit généralement si vous disposez d'un cluster privé avec accès/adresse IP externe désactivé, mais que l'adresse IP externe de votre machine ne figure pas sur la liste d'autorisation. Notez que l'enregistrement d'un cluster GKE ne nécessite pas cette exigence après la version gcloud 407.0.0.- Résolution :
Assurez-vous que la machine sur laquelle vous souhaitez exécuter la commande d'enregistrement
gcloud
peut accéder au serveur d'API du cluster. Si l'accès externe n'est pas activé sur votre cluster, déposez une demande auprès de l'assistance Google Cloud.
Obtenir de l'aide supplémentaire
Pour envoyer une demande à l'assistance Google Cloud pour GKE Enterprise, procédez comme suit:
- Déposez une demande auprès de l'assistance Google Cloud
- Suivez les instructions de la section Collecte des journaux Connect Agent pour enregistrer les journaux Connect.
- Si vous dépannez un cluster sur site à l'aide de Google Groupes ou d'une assistance tierce, suivez les instructions de la page Collecter les journaux d'identité de service GKE pour enregistrer les journaux d'identité de service GKE. Veillez à nettoyer les journaux du pod dans le fichier enregistré si nécessaire.
- Joignez les journaux pertinents à votre demande.