Cette page explique comment résoudre les problèmes courants liés à GKE sur AWS.
Si vous avez besoin d'aide supplémentaire, contactez l'assistance Cloud Customer Care.Messages d'erreur fréquents
Les sections suivantes décrivent les causes et les solutions de messages d'erreur.
Le serveur ne dispose d'aucune ressource
Des erreurs de type error: the server doesn't have a resource type "services"
peuvent se produire lorsqu'un cluster ne contient pas de pool de nœuds en cours d'exécution ou lorsqu'une passerelle Connect ne peut pas se connecter à un pool de nœuds. Pour vérifier l'état de vos pools de nœuds, exécutez la commande suivante :
gcloud container aws node-pools list \
--cluster-name CLUSTER_NAME \
--location LOCATION
Remplacez les éléments suivants :
CLUSTER_NAME
: nom de votre cluster.LOCATION
: zone Google Cloud qui gère votre cluster
Le résultat inclut l'état des pools de nœuds de votre cluster. Si aucun pool de nœuds n'est répertorié, créez un pool de nœuds.
Utilisateur interdit
L'erreur suivante se produit lorsque votre nom d'utilisateur ne dispose pas d'un accès administrateur à votre 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
Vous pouvez configurer des utilisateurs supplémentaires en transmettant l'option --admin-users
lorsque vous créez un cluster.
Si vous utilisez la passerelle Connect et que vous ne pouvez pas vous connecter à votre cluster, procédez comme suit :
Identifiez les utilisateurs autorisés dans votre cluster.
gcloud container aws clusters describe CLUSTER_NAME \ --format 'value(authorization.admin_users)'
Remplacez
CLUSTER_NAME
par le nom de votre cluster.Le résultat inclut les noms d'utilisateur disposant d'un accès administrateur au cluster. Exemple :
{'username': 'administrator@example.com'}
Obtenez le nom d'utilisateur actuellement authentifié avec la CLI Google Cloud.
gcloud config get-value account
Le résultat inclut le compte authentifié avec la CLI Google Cloud. Si les résultats de
gcloud containers aws clusters describe
etgcloud config get-value account
ne correspondent pas, exécutez la commandegcloud auth login
et authentifiez-vous avec le nom d'utilisateur disposant d'un accès administrateur au cluster.
Problèmes liés aux commandes kubectl
Les sections suivantes expliquent comment résoudre les problèmes liés aux commandes kubectl
qui ne répondent pas ou qui échouent.
Les commandes kubectl cessent de répondre
Si votre cluster exécute une version de Kubernetes antérieure à 1.25 et que les commandes kubectl
ne répondent pas ou expirent, la cause la plus courante est que vous n'avez pas encore créé de pool de nœuds. Par défaut, GKE sur AWS génère des fichiers kubeconfig
qui utilisent la passerelle Connect comme point de terminaison accessible via Internet.
Pour que cela fonctionne, le déploiement gke-connect-agent
doit être exécuté dans un pool de nœuds sur le cluster.
Pour obtenir plus d'informations de diagnostic, exécutez la commande suivante :
kubectl cluster-info -v=9
Si aucun pool de nœuds n'est en cours d'exécution, les requêtes envoyées à connectgateway.googleapis.com
échouent avec une erreur 404 cannot find active connections for cluster
.
Pour les clusters exécutant Kubernetes 1.25 ou une version ultérieure, le gke-connect-agent
s'exécute sur le plan de contrôle et aucun pool de nœuds n'est requis. Si la commande kubectl
ne répond pas, vérifiez les journaux du composant du plan de contrôle avec Cloud Logging.
Échec des commandes kubectl exec, attach et port-forward
Les commandes kubectl exec
, kubectl attach
et kubectl port-forward
peuvent échouer avec le message error: unable to upgrade connection
lors de l'utilisation de la passerelle Connect. Il s'agit d'une limitation lorsque vous utilisez la passerelle Connect comme point de terminaison du serveur d'API Kubernetes.
Pour contourner ce problème, utilisez une commande kubeconfig
qui spécifie le point de terminaison privé du cluster. Pour obtenir des instructions sur l'accès au cluster via son point de terminaison privé, consultez la page Configurer l'accès au cluster pour kubectl.
La commande kubectl logs renvoie une erreur remote error: tls: internal error
Ce problème peut survenir s'il manque une autorisation au rôle d'API de plan de contrôle. Par exemple, cela peut se produire si votre rôle AWS ne dispose pas de l'autorisation ec2:DescribeDhcpOptions
. Dans ce cas, les requêtes de signature de certificat en provenance de nœuds ne peuvent pas être approuvées et le nœud de calcul ne dispose pas de certificat valide.
Pour déterminer si cela est bien à l'origine du problème, vous pouvez vérifier s'il existe des demandes de signature de certificat en attente qui n'ont pas été approuvées, à l'aide de cette commande :
kubectl get csr
Pour résoudre ce problème : vérifiez que votre rôle AWS répond aux exigences.
Résoudre les problèmes génériques liés à kubectl
Si vous utilisez la passerelle Connect, procédez comme suit :
Assurez-vous d'avoir activé la passerelle Connect dans votre projet Google Cloud :
gcloud services enable connectgateway.googleapis.com
Pour les clusters dont la version de Kubernetes est antérieure à la version 1.25, assurez-vous qu'au moins un pool de nœuds Linux est en cours d'exécution et que
gke-connect-agent
est en cours d'exécution. Pour en savoir plus, consultez Résoudre les problèmes de connexion au cluster.Pour les clusters exécutant Kubernetes 1.25 ou une version ultérieure, consultez les journaux
gke-connect-agent
à l'aide de Cloud Logging.
Le service Kubernetes (LoadBalancer) ou l'Ingress Kubernetes ne fonctionnent pas
Si vos équilibreurs de charge AWS Elastic Load Balancing (ELB/NLB/ALB) ont été créés mais ne fonctionnent pas comme prévu, cela peut être dû à des problèmes d'ajout de tags de sous-réseau. Pour en savoir plus, consultez la section Sous-réseaux d'équilibreur de charge.
Plantage des pods sur les nœuds Arm
Le problème suivant se produit lorsque vous déployez un pod sur un nœud Arm, mais que l'image de conteneur n'a pas été créée pour l'architecture Arm.
Pour identifier le problème, procédez comme suit :
Obtenez l'état de vos pods :
kubectl get pods
Obtenez les journaux de l''un des pods qui plante :
kubectl logs POD_NAME
Remplacez
POD_NAME
par le nom du pod qui plante.Vous devriez voir dans les journaux de vos pods un message d'erreur semblable à celui-ci :
exec ./hello-app: exec format error
Pour résoudre ce problème, assurez-vous que votre image de conteneur est compatible avec l'architecture Arm. Nous vous recommandons de créer des images multi-architectures.
Impossible de supprimer le cluster
Si vous recevez un message d'erreur semblable au suivant lorsque vous essayez de supprimer un cluster, il est possible que votre rôle pour l'API GKE Multi-Cloud n'existe pas :
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
Pour résoudre le problème, suivez les étapes décrites dans la section Créer un rôle pour l'API GKE Multi-Cloud. Vous pouvez relancer la commande après avoir recréé le rôle avec le même nom et les mêmes autorisations.
Étapes suivantes
- Si vous avez besoin d'une aide supplémentaire, contactez Cloud Customer Care.