Résolution des problèmes liés aux clusters et aux nœuds Amazon EKS - Amazon EKS

Aidez à améliorer cette page

Pour contribuer à ce guide de l’utilisateur, cliquez sur le lien Modifier cette page sur GitHub qui se trouve dans le volet droit de chaque page.

Résolution des problèmes liés aux clusters et aux nœuds Amazon EKS

Ce chapitre traite de certaines erreurs courantes que vous pouvez rencontrer lorsque vous utilisez Amazon EKS, ainsi que des solutions. Si vous avez besoin de dépanner des zones spécifiques d'Amazon EKS, consultez les rubriques Dépannage IAM, Dépannage des problèmes liés à Amazon EKS Connector et Dépannage d'ADOT à l'aide de modules complémentaires EKS.

Pour plus d’informations sur la résolution des problèmes, consultez Contenu du centre de connaissances sur Amazon Elastic Kubernetes Service sur AWS re:Post.

Capacité insuffisante

Si vous recevez l’erreur suivante lorsque vous essayez de créer un cluster Amazon EKS, cela signifie que l’une des zones de disponibilité que vous avez spécifiées ne dispose pas d’une capacité suffisante pour prendre en charge un cluster.

Cannot create cluster 'example-cluster' because region-1d, the targeted Availability Zone, does not currently have sufficient capacity to support the cluster. Retry and choose from these Availability Zones: region-1a, region-1b, region-1c

Essayez à nouveau de créer votre cluster avec des sous-réseaux de votre VPC de cluster hébergés dans les zones de disponibilité renvoyés par ce message d'erreur.

Il existe des zones de disponibilité dans lesquelles un cluster ne peut pas résider. Veuillez comparer les zones de disponibilité dans lesquelles se trouvent vos sous-réseaux avec la liste des zones de disponibilité dans les Exigences et considérations relatives aux sous-réseaux.

Les nœuds ne parviennent pas à joindre le cluster

Quelques raisons courantes empêchent les nœuds de joindre le cluster :

  • Si les nœuds sont des nœuds gérés, Amazon EKS ajoute des entrées à la ConfigMap aws-auth lorsque vous créez le groupe de nœuds. Si l’entrée a été supprimée ou modifiée, vous devez l’ajouter de nouveau. Pour plus d’informations, entrez eksctl create iamidentitymapping --help dans votre terminal. Vous pouvez afficher vos entrées actuelles de ConfigMap aws-auth en remplaçant my-cluster dans la commande suivante par le nom de votre cluster et en exécutant la commande modifiée : eksctl get iamidentitymapping --cluster my-cluster . L’ARN du rôle que vous spécifiez ne peut pas inclure de chemin autre que /. Par exemple, si le nom de votre rôle est development/apps/my-role, vous devez le remplacer par my-role lorsque vous spécifiez l’ARN du rôle. Assurez-vous que vous spécifiez l'ARN pour le rôle IAM du nœud (et non l'ARN du profil d'instance).

    Si les nœuds sont autogérés et que vous n’avez pas créé d’entrées d’accès pour l’ARN du rôle IAM du nœud, exécutez les mêmes commandes que celles répertoriées pour les nœuds gérés. Si vous avez créé une entrée d’accès pour l’ARN du rôle IAM de votre nœud, il se peut qu’elle ne soit pas correctement configurée dans l’entrée d’accès. Assurez-vous que l’ARN du rôle IAM du nœud (et non l’ARN du profil d’instance) est spécifié comme ARN principal dans votre entrée de ConfigMap aws-auth ou dans votre entrée d’accès. Pour plus d'informations sur les entrées d'accès, consultez Attribution de l’accès Kubernetes aux utilisateurs IAM avec les entrées d’accès EKS.

  • ClusterName dans votre modèle AWS CloudFormation de nœud ne correspond pas exactement au nom du cluster auquel vous voulez que vos nœuds se joignent. Si vous transmettez une valeur incorrecte à ce champ, le fichier /var/lib/kubelet/kubeconfig du nœud sera mal configuré et les nœuds ne rejoindront pas le cluster.

  • Le nœud n'est pas étiqueté comme appartenant au cluster. Vos nœuds doivent être balisés avec la balise suivante, où my-cluster est remplacé par le nom de votre cluster.

    Clé Valeur

    kubernetes.io/cluster/my-cluster

    owned

  • Les nœuds peuvent ne pas être en mesure d'accéder au cluster à l'aide d'une adresse IP publique. Assurez-vous qu'une adresse IP publique est attribuée aux nœuds déployés dans les sous-réseaux publics. Si ce n’est pas le cas, vous pouvez associer une adresse IP Elastic à un nœud après son lancement. Pour plus d'informations, consultez Association d'une adresse IP élastique à une instance en cours d'exécution ou à une interface réseau. Si le sous-réseau public n'est pas défini pour attribuer automatiquement des adresses IP publiques aux instances qui y sont déployées, nous vous recommandons d'activer ce paramètre. Pour plus d'informations, consultez Modification de l'attribut d'adressage IPv4 public de votre sous-réseau. Si le nœud est déployé sur un sous-réseau privé, ce sous-réseau doit disposer d'une route vers une passerelle NAT à laquelle une adresse IP publique est attribuée.

  • Le point de terminaison STS AWS pour la région AWS dans laquelle vous déployez les nœuds n’est pas activé pour votre compte. Pour activer la région, consultez Activation et désactivation de STS AWS dans une région AWS.

  • Le nœud ne dispose pas d’une entrée DNS privée, ce qui entraîne l’apparition d’une erreur « kubelet » dans le journal node "" not found. Assurez-vous que le VPC sur lequel le nœud est créé a des valeurs définies pour domain-name et domain-name-servers comme Options dans un DHCP options set. Les valeurs par défaut sont domain-name:<region>.compute.internal et domain-name-servers:AmazonProvidedDNS. Pour en savoir plus, consultez Jeux d'options DHCP dans le Guide de l'utilisateur Amazon VPC.

  • Si les nœuds du groupe de nœuds gérés ne se connectent pas au cluster dans les 15 minutes, un problème de santé « NodeCreationFailure » sera émis et le statut de la console sera défini sur « Create failed ». Pour les AMI Windows dont le temps de lancement est lent, ce problème peut être résolu à l’aide du fast launch.

Pour identifier et résoudre les problèmes courants qui empêchent les composants master de rejoindre un cluster, vous pouvez utiliser le runbookAWSSupport-TroubleshootEKSWorkerNode. Pour plus d’informations, consultez AWSSupport-TroubleshootEKSWorkerNode dans Référence du dossier d’exploitation AWS Systems Manager Automation.

Accès non autorisé ou refusé (kubectl)

Si vous recevez l’une des erreurs suivantes lors de l’exécution des commandes kubectl, cela signifie que kubectl n’est pas correctement configuré pour Amazon EKS ou que les informations d’identification du principal IAM (rôle ou utilisateur) que vous utilisez ne correspondent pas à un nom d’utilisateur Kubernetes disposant des autorisations suffisantes pour les objets Kubernetes sur votre cluster Amazon EKS.

  • could not get token: AccessDenied: Access denied

  • error: You must be logged in to the server (Unauthorized)

  • error: the server doesn’t have a resource type "svc"

Cela peut être dû à l'une des raisons suivantes :

  • Le cluster a été créé avec les informations d'identification d'un principal IAM et kubectl est configuré pour utiliser les informations d'identification d'un autre principal IAM. Pour résoudre ce problème, mettez à jour votre fichier kube config afin d’utiliser les informations d’identification à l’origine de la création du cluster. Pour de plus amples informations, consultez Connexion de kubectl à un cluster EKS en créant un fichier kubeconfig.

  • Si votre cluster répond aux exigences minimales de la plateforme dans la section « Conditions préalables » de la section Accorder aux utilisateurs IAM l’accès à Kubernetes avec des entrées d’accès EKS, aucune entrée d’accès n’existe avec votre principal IAM. Si elle existe, elle ne dispose pas des noms de groupe Kubernetes nécessaires qui lui sont définis ou n’est pas associée à la stratégie d’accès appropriée. Pour de plus amples informations, consultez Attribution de l’accès Kubernetes aux utilisateurs IAM avec les entrées d’accès EKS.

  • Si votre cluster ne répond pas aux exigences minimales de la plateforme dans Accorder aux utilisateurs IAM l’accès à Kubernetes avec des entrées d’accès EKS, aucune entrée avec votre principal IAM n’existe dans le aws-auth ConfigMap. Si elle existe, elle n’est pas mappée aux noms de groupes Kubernetes liés à un Role ou un ClusterRole Kubernetes avec les autorisations nécessaires. Pour plus d’informations sur les objets d’autorisation basée sur les rôles (RBAC) Kubernetes, consultez Utilisation de l’autorisation RBAC dans la documentation Kubernetes. Vous pouvez afficher vos entrées actuelles de ConfigMap aws-auth en remplaçant my-cluster dans la commande suivante par le nom de votre cluster et en exécutant la commande modifiée : eksctl get iamidentitymapping --cluster my-cluster . Si une entrée pour l’ARN de votre principal IAM ne se trouve pas dans le ConfigMap, saisissez eksctl create iamidentitymapping --help dans votre terminal pour savoir comment en créer une.

Si vous installez et configurez l’AWS CLI, vous pouvez configurer les informations d’identification IAM que vous utilisez. Pour plus d’informations, consultez la section Configuration de l’AWS CLI du Guide de l’utilisateur de l’interface de la ligne de commande AWS. Vous pouvez également configurer kubectl pour utiliser un rôle IAM, si vous assumez un rôle IAM pour accéder aux objets Kubernetes sur votre cluster. Pour de plus amples informations, consultez Connexion de kubectl à un cluster EKS en créant un fichier kubeconfig.

hostname doesn’t match

La version Python de votre système doit être 2.7.9 ou ultérieure. Sinon, vous recevrez des erreurs hostname doesn’t match avec les appels AWS CLI à Amazon EKS. Pour plus d’informations, consultez Que sont les erreurs « nom d’hôte ne correspond pas » ? dans les Questions fréquentes sur les demandes Python.

getsockopt: no route to host

Docker s'exécute dans la plage d'adresses CIDR 172.17.0.0/16 dans les clusters Amazon EKS. Nous vous recommandons de ne pas faire chevaucher cette plage par les sous-réseaux VPC de votre cluster. Sinon, vous recevrez l'erreur suivante :

Error: : error upgrading connection: error dialing backend: dial tcp 172.17.<nn>.<nn>:10250: getsockopt: no route to host

Instances failed to join the Kubernetes cluster

Si vous recevez l’erreur Instances failed to join the Kubernetes cluster dans la AWS Management Console, assurez-vous que l’accès au point de terminaison privé du cluster est activé ou que vous avez correctement configuré les blocs d’adresse CIDR pour l’accès au point de terminaison public. Pour de plus amples informations, consultez Point de terminaison du serveur d’API du cluster.

Codes d'erreurs liées aux groupes de nœuds gérés

Si votre groupe de nœuds gérés rencontre un problème d'intégrité matérielle, Amazon EKS renvoie un code d'erreur pour vous aider à diagnostiquer le problème. Ces surveillances de l’état ne détectent pas les problèmes logiciels, car elles sont basées sur les surveillances de l’état Amazon EC2. La liste suivante décrit les codes d'erreur.

AccessDenied

Amazon EKS ou un ou plusieurs de vos nœuds gérés ne parviennent pas à s’authentifier ou à s’autoriser auprès du serveur API de votre cluster Kubernetes. Pour de plus amples informations sur la résolution d'une cause courante, consultez Correction d'une cause courante d'erreurs AccessDenied pour les groupes de nœuds gérés. Les AMI Windows privées peuvent également provoquer ce code d’erreur, accompagné du message d’erreur Not authorized for images. Pour de plus amples informations, consultez Not authorized for images.

AmiIdNotFound

Nous n’avons pas trouvé l’ID AMI associé à votre modèle de lancement. Assurez-vous que l'AMI existe et est partagée avec votre compte.

AutoScalingGroupNotFound

Nous n’avons pas trouvé le groupe Auto Scaling associé au groupe de nœuds gérés. Vous pouvez peut-être recréer un groupe Auto Scaling avec les mêmes paramètres pour effectuer une récupération.

ClusterUnreachable

Amazon EKS ou un ou plusieurs de vos nœuds gérés ne parviennent pas à communiquer avec votre serveur API du cluster Kubernetes. Cela peut se produire s'il y a des interruptions de réseau ou si les serveurs d'API temporisent le traitement des demandes.

Ec2SecurityGroupNotFound

Nous n’avons pas trouvé le groupe de sécurité du cluster. Vous devez recréer votre cluster.

Ec2SecurityGroupDeletionFailure

Nous n'avons pas pu supprimer le groupe de sécurité d'accès à distance pour votre groupe de nœuds gérés. Supprimez toutes les dépendances du groupe de sécurité.

Ec2LaunchTemplateNotFound

Nous n’avons pas trouvé le modèle de lancement Amazon EC2 pour votre groupe de nœuds gérés. Vous devez recréer votre groupe de nœuds pour effectuer une récupération.

Ec2LaunchTemplateVersionMismatch

La version du modèle de lancement Amazon EC2 pour votre groupe de nœuds gérés ne correspond pas à la version créée par Amazon EKS. Vous pouvez peut-être revenir à la version Amazon EKS créée pour effectuer une récupération.

IamInstanceProfileNotFound

Nous n’avons pas trouvé le profil d’instance IAM pour votre groupe de nœuds gérés. Vous pouvez peut-être recréer un profil d'instance avec les mêmes paramètres pour effectuer une récupération.

IamNodeRoleNotFound

Nous n’avons pas trouvé le rôle IAM pour votre groupe de nœuds gérés. Vous pouvez peut-être recréer un rôle IAM avec les mêmes paramètres pour effectuer une récupération.

AsgInstanceLaunchFailures

Votre groupe Auto Scaling rencontre des problèmes lors d'une tentative de lancement d'instances.

NodeCreationFailure

Vos instances lancées ne peuvent pas s'enregistrer auprès de votre cluster Amazon EKS. Les causes courantes de cet échec sont des autorisations de rôle IAM de nœud insuffisantes ou l'absence d'un accès Internet sortant pour les nœuds. Vos nœuds doivent répondre à l'une des exigences suivantes :

InstanceLimitExceeded

Votre compte AWS ne peut pas lancer d'autres instances du type d'instance spécifié. Vous pouvez demander une augmentation de la limite d'instances Amazon EC2 pour effectuer une récupération.

InsufficientFreeAddresses

Un ou plusieurs sous-réseaux associés à votre groupe de nœuds gérés ne disposent pas d’adresses IP suffisantes pour les nouveaux nœuds.

InternalFailure

Ces erreurs sont généralement dues à un problème côté serveur Amazon EKS.

La cause la plus courante d'erreurs AccessDenied lors de la réalisation d'opérations sur des groupes de nœuds gérés est l'absence de eks:node-manager ClusterRole ou ClusterRoleBinding. Amazon EKS configure ces ressources dans votre cluster dans le cadre de l'onboarding avec les groupes de nœuds gérés, et celles-ci sont nécessaires pour gérer les groupes de nœuds.

La ClusterRole peut changer au fil du temps, mais elle doit ressembler à l'exemple suivant :

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:node-manager rules: - apiGroups: - '' resources: - pods verbs: - get - list - watch - delete - apiGroups: - '' resources: - nodes verbs: - get - list - watch - patch - apiGroups: - '' resources: - pods/eviction verbs: - create

La ClusterRoleBinding peut changer au fil du temps, mais elle doit ressembler à l'exemple suivant :

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:node-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-manager subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager

Vérifiez que la eks:node-manager ClusterRole existe.

kubectl describe clusterrole eks:node-manager

Si elle est présente, comparez la sortie à l'exemple de la ClusterRoleprécédente.

Vérifiez que la eks:node-manager ClusterRoleBinding existe.

kubectl describe clusterrolebinding eks:node-manager

Si elle est présente, comparez la sortie à l'exemple de la ClusterRoleBindingprécédente.

Si vous avez identifié un ClusterRole ou un ClusterRoleBinding manquant ou défectueux comme cause d’une erreur AcessDenied lors de la demande d’opérations sur le groupe de nœuds gérés, vous pouvez les restaurer. Enregistrez le contenu suivant dans un fichier nommé eks-node-manager-role.yaml.

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: eks:node-manager rules: - apiGroups: - '' resources: - pods verbs: - get - list - watch - delete - apiGroups: - '' resources: - nodes verbs: - get - list - watch - patch - apiGroups: - '' resources: - pods/eviction verbs: - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks:node-manager roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eks:node-manager subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: eks:node-manager

Appliquez le fichier.

kubectl apply -f eks-node-manager-role.yaml

Réessayez l'opération de groupe de nœuds pour voir si cela a résolu votre problème.

Not authorized for images

Une cause potentielle du message d’erreur Not authorized for images est l’utilisation d’une AMI Windows Amazon EKS privée pour lancer des groupes de nœuds gérés Windows. Après avoir publié de nouvelles AMI Windows, AWS rend privées les AMI datant de plus de 4 mois, ce qui les rend inaccessibles. Si votre groupe de nœuds gérés utilise une AMI Windows privée, envisagez de mettre à jour votre groupe de nœuds gérés Windows. Bien que nous ne puissions garantir l’accès aux AMI qui ont été rendues privées, vous pouvez en faire la demande en soumettant un ticket au service d’assistance AWS. Pour plus d’informations, consultez Correctifs dans le Guide de l’utilisateur Amazon EC2.

Le nœud est dans l’état NotReady

Si votre nœud passe à l’état NotReady, cela indique probablement que le nœud est en mauvais état et indisponible pour planifier de nouveaux pods. Cela peut se produire pour diverses raisons, par exemple si le nœud ne dispose pas de ressources suffisantes pour le processeur, la mémoire ou l’espace disque disponible.

Pour les AMI Windows optimisées pour Amazon EKS, aucune réservation de ressources de calcul n’est spécifiée par défaut dans la configuration kubelet. Afin d’éviter les problèmes de ressources, vous pouvez réserver des ressources de calcul pour les processus système en fournissant au kubelet les valeurs de configuration pour kube-reserved et/ou system-reserved. Pour ce faire, utilisez le paramètre de ligne de commande -KubeletExtraArgs dans le script d’initialisation. Pour plus d’informations, consultez Réserver des ressources de calcul pour les démons système dans la documentation Kubernetes et Paramètres de configuration du script d'amorçage dans ce guide d’utilisation.

Collecteur de journaux EKS

Pour résoudre les problèmes liés aux nœuds Amazon EKS, un script pré-créé est disponible sur les nœuds à l’emplacement /etc/eks/log-collector-script/eks-log-collector.sh. Vous pouvez utiliser le script pour collecter des journaux de diagnostic pour les cas de support et le dépannage général.

Utilisez la commande suivante pour exécuter le script sur votre nœud :

sudo bash /etc/eks/log-collector-script/eks-log-collector.sh
Note

Si le script n’est pas présent à cet emplacement. Vous pouvez manuellement télécharger et exécuter le script à l'aide de la commande suivante :

curl -O https://amazon-eks.s3.amazonaws.com/support/log-collector-script/linux/eks-log-collector.sh sudo bash eks-log-collector.sh

Le script collecte les informations de diagnostic suivantes.

$ sudo bash /etc/eks/log-collector-script/eks-log-collector.sh This is version 0.7.8. New versions can be found at https://github.com/awslabs/amazon-eks-ami/blob/main/log-collector-script/ Trying to collect common operating system logs... Trying to collect kernel logs... Trying to collect mount points and volume information... ... ... Done... your bundled logs are located in /var/log/eks_i-EXAMPLE_2025-03-25_0000-UTC_0.7.8.tar.gz

Les informations de diagnostic sont collectées et stockés dans :

/var/log/eks_i-EXAMPLE_2025-03-25_0000-UTC_0.7.8.tar.gz

Pour récupérer le lot de journaux pour les nœuds Bottlerocket, veuillez vous reporter à la section Journal Bottlerocket pour plus de détails.

Le réseau d'exécution du conteneur n'est pas prêt

Vous pouvez recevoir une erreur Container runtime network not ready et des erreurs d'autorisation similaires aux suivantes :

4191 kubelet.go:2130] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized 4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized 4191 kubelet_node_status.go:106] Unable to register node "ip-10-40-175-122.ec2.internal" with API server: Unauthorized 4191 reflector.go:205] k8s.io/kubernetes/pkg/kubelet/kubelet.go:452: Failed to list *v1.Service: Unauthorized

Les raisons possibles sont les suivantes :

  1. Soit vous ne disposez pas d’un aws-auth ConfigMap sur votre cluster, soit celui-ci ne contient pas les entrées pour le rôle IAM avec lequel vous avez configuré vos nœuds.

    Pour résoudre le problème, affichez les entrées existantes de votre ConfigMap en remplaçant my-cluster dans la commande suivante par le nom de votre cluster et en exécutant la commande modifiée : eksctl get iamidentitymapping --cluster my-cluster . Si vous recevez un message d’erreur de la commande, cela peut être dû au fait que votre cluster ne dispose pas d’un aws-auth ConfigMap. La commande suivante ajoute une entrée à la ConfigMap. Si le ConfigMap n’existe pas, la commande le crée également. Remplacez 111122223333 par l’ID de compte AWS du rôle IAM et myAmazonEKSNodeRole par le nom du rôle de votre nœud.

    eksctl create iamidentitymapping --cluster my-cluster \ --arn arn:aws:iam::111122223333:role/myAmazonEKSNodeRole --group system:bootstrappers,system:nodes \ --username system:node:{{EC2PrivateDNSName}}

    L’ARN du rôle que vous spécifiez ne peut pas inclure de chemin autre que /. Par exemple, si le nom de votre rôle est development/apps/my-role, vous devez le remplacer par my-role lorsque vous spécifiez l’ARN du rôle. Assurez-vous que vous spécifiez l'ARN pour le rôle IAM du nœud (et non l'ARN du profil d'instance).

  2. Vos nœuds autogérés se trouvent dans un cluster dont la version de plateforme correspond à la version minimale indiquée dans les conditions préalables de la rubrique Accorder aux utilisateurs IAM l’accès à Kubernetes avec des entrées d’accès EKS, mais aucune entrée n’est répertoriée dans le aws-auth ConfigMap (voir élément précédent) pour le rôle IAM du nœud ou aucune entrée d’accès n’existe pour le rôle. Pour résoudre le problème, affichez vos entrées existantes en remplaçant my-cluster dans la commande suivante par le nom de votre cluster et en exécutant la commande modifiée : aws eks list-access-entries --cluster-name my-cluster . La commande suivante ajoute une entrée d’accès pour le rôle IAM du nœud. Remplacez 111122223333 par l’ID de compte AWS du rôle IAM et myAmazonEKSNodeRole par le nom du rôle de votre nœud. Si vous disposez d’un nœud Windows, remplacez EC2_LINUX par EC2_Windows. Assurez-vous que vous spécifiez l'ARN pour le rôle IAM du nœud (et non l'ARN du profil d'instance).

    aws eks create-access-entry --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/myAmazonEKSNodeRole --type EC2_LINUX

Délai d'expiration de la liaison TLS

Lorsqu'un nœud est incapable d'établir une connexion avec le point de terminaison du serveur d'API public, vous pouvez voir une erreur similaire à l'erreur suivante.

server.go:233] failed to run Kubelet: could not init cloud provider "aws": error finding instance i-1111f2222f333e44c: "error listing AWS instances: \"RequestError: send request failed\\ncaused by: Post net/http: TLS handshake timeout\""

Le processus kubelet se reproduira continuellement et testera le point de terminaison du serveur d'API. L'erreur peut également se produire temporairement au cours de toute procédure qui effectue une mise à jour continue du cluster dans le plan de contrôle, telle qu'une modification de configuration ou une mise à jour de version.

Pour résoudre le problème, vérifiez la table de routage et les groupes de sécurité pour vous assurer que le trafic provenant des nœuds peut atteindre le point de terminaison public.

InvalidClientTokenId

Si vous utilisez des rôles IAM pour les comptes de service d’un pod ou d’un DaemonSet déployé sur un cluster dans une région AWS en Chine et que vous n’avez pas défini la variable d’environnement AWS_DEFAULT_REGION dans la spécification, le pod ou le DaemonSet peut recevoir l’erreur suivante :

An error occurred (InvalidClientTokenId) when calling the GetCallerIdentity operation: The security token included in the request is invalid

Pour résoudre le problème, vous devez ajouter la variable d’environnement AWS_DEFAULT_REGION à la spécification de votre pod ou DaemonSet, comme indiqué dans l’exemple de spécification de pod suivant.

apiVersion: v1 kind: Pod metadata: name: envar-demo labels: purpose: demonstrate-envars spec: containers: - name: envar-demo-container image: gcr.io/google-samples/node-hello:1.0 env: - name: AWS_DEFAULT_REGION value: "region-code"

Les groupes de nœuds doivent correspondre à la version Kubernetes avant de mettre à niveau le plan de contrôle

Avant de mettre à niveau un plan de contrôle vers une nouvelle version Kubernetes, la version mineure des nœuds gérés et Fargate de votre cluster doit être identique à la version actuelle de votre plan de contrôle. L'API update-cluster-version Amazon EKS rejette les demandes tant que vous n'avez pas mis à niveau tous les nœuds gérés par Amazon EKS vers la version actuelle du cluster. Amazon EKS fournit des API pour mettre à niveau les nœuds gérés. Pour plus d’informations sur la mise à niveau de la version Kubernetes d’un groupe de nœuds gérés, consultez Mettre à jour un groupe de nœuds gérés pour votre cluster. Pour mettre à niveau la version d’un nœud Fargate, supprimez le pod représenté par le nœud et redéployez-le après avoir mis à niveau votre plan de contrôle. Pour de plus amples informations, consultez Mettre à jour un cluster existant vers une nouvelle version de Kubernetes.

Lors du lancement de nombreux nœuds, des erreurs Too Many Requests se produisent

Si vous lancez plusieurs nœuds simultanément, vous pouvez voir un message d'erreur dans les journaux d'exécution des données utilisateur Amazon EC2 indiquant Too Many Requests. Cela peut se produire parce que le plan de contrôle est surchargé d'appels describeCluster. Cette surcharge se traduit par une limitation, des nœuds qui ne parviennent pas à exécuter le script d'amorçage et des nœuds qui ne parviennent pas à rejoindre le cluster.

Assurez-vous que les arguments --apiserver-endpoint, --b64-cluster-ca et --dns-cluster-ip sont transmis au script de démarrage du nœud. Lorsque vous incluez ces arguments, le script d’initialisation n’a pas besoin d’effectuer d’appel describeCluster, ce qui permet d’éviter la surcharge du plan de contrôle. Pour de plus amples informations, consultez Fournissez des données utilisateur pour transmettre des arguments au fichier bootstrap.sh inclus avec une AMI Amazon Linux/Bottlerocket optimisée pour Amazon EKS.

Réponse d'erreur non autorisée HTTP 401 sur les requêtes du serveur API Kubernetes

Ces erreurs s’affichent si le jeton de compte de service d’un pod a expiré sur un cluster.

Le serveur API Kubernetes de votre cluster Amazon EKS rejette les demandes dont les jetons datent de plus de 90 jours. Dans les versions précédentes de Kubernetes, les jetons n'avaient pas de période d'expiration. Cela signifie que les clients qui s'appuient sur ces jetons doivent les actualiser dans l'heure. Pour éviter que le serveur API Kubernetes ne rejette votre demande en raison d’un jeton non valide, la version du kit SDK client Kubernetes utilisée par votre charge de travail doit être identique ou postérieure aux versions suivantes :

  • Go version 0.15.7 et ultérieure

  • Python version 12.0.0 et ultérieure

  • Java version 9.0.0 et ultérieure

  • JavaScript version 0.10.3 et ultérieure

  • Branche master Ruby

  • Haskell version 0.3.0.0

  • Version C# 7.0.5 et ultérieure

Vous pouvez identifier tous les pod existants dans votre cluster qui utilisent des jetons périmés. Pour de plus amples informations, consultez Jetons de compte de service.

La version de la plateforme Amazon EKS est inférieure de plus de deux versions à la version actuelle de la plateforme

Cela peut se produire lorsque Amazon EKS n’est pas en mesure de mettre à jour automatiquement la platform-version de votre cluster. Bien qu'il existe de nombreuses causes à cela, certaines des causes les plus courantes suivent. Si l’un de ces problèmes s’applique à votre cluster, celui-ci peut continuer à fonctionner, mais sa version de plateforme ne sera pas mise à jour par Amazon EKS.

Problème

Le Rôle IAM du cluster a été supprimé : ce rôle a été spécifié lors de la création du cluster. Vous pouvez voir quel rôle a été spécifié à l'aide de la commande suivante. Remplacez my-cluster par le nom de votre cluster.

aws eks describe-cluster --name my-cluster --query cluster.roleArn --output text | cut -d / -f 2

L'exemple qui suit illustre un résultat.

eksClusterRole
Solution

Création d'un nouveau rôle IAM du cluster portant le même nom.

Problème

Un sous-réseau spécifié lors de la création du cluster a été supprimé : les sous-réseaux à utiliser avec le cluster ont été spécifiés lors de la création du cluster. Vous pouvez voir quels sous-réseaux ont été spécifiés à l'aide de la commande suivante. Remplacez my-cluster par le nom de votre cluster.

aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.subnetIds

L'exemple qui suit illustre un résultat.

[ "subnet-EXAMPLE1", "subnet-EXAMPLE2" ]
Solution

Vérifiez si les ID de sous-réseau existent dans votre compte.

vpc_id=$(aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.vpcId --output text) aws ec2 describe-subnets --filters "Name=vpc-id,Values=$vpc_id" --query "Subnets[*].SubnetId"

L'exemple qui suit illustre un résultat.

[ "subnet-EXAMPLE3", "subnet-EXAMPLE4" ]

Si les ID de sous-réseau renvoyés dans la sortie ne correspondent pas aux ID de sous-réseau spécifiés lors de la création du cluster, vous devez modifier les sous-réseaux utilisés par le cluster si vous voulez qu’Amazon EKS mette à jour le cluster. En effet, si vous avez spécifié plus de deux sous-réseaux lors de la création de votre cluster, Amazon EKS sélectionne de manière aléatoire les sous-réseaux que vous avez spécifiés pour y créer de nouvelles interfaces réseau Elastic. Ces interfaces réseau permettent au plan de contrôle de communiquer avec vos nœuds. Amazon EKS ne mettra pas à jour le cluster si le sous-réseau qu’il sélectionne n’existe pas. Vous n'avez aucun contrôle sur les sous-réseaux que vous avez spécifiés lors de la création du cluster dans lesquels Amazon EKS choisit de créer une nouvelle interface réseau.

Lorsque vous lancez une mise à jour de la version Kubernetes pour votre cluster, la mise à jour peut échouer pour la même raison.

Problème

Un groupe de sécurité spécifié lors de la création du cluster a été supprimé : si vous avez spécifié des groupes de sécurité lors de la création du cluster, vous pouvez voir leurs ID à l'aide de la commande suivante. Remplacez my-cluster par le nom de votre cluster.

aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.securityGroupIds

L'exemple qui suit illustre un résultat.

[ "sg-EXAMPLE1" ]

Si [] est renvoyé, cela signifie qu’aucun groupe de sécurité n’a été spécifié lors de la création du cluster et que l’absence de groupe de sécurité n’est pas le problème. Si des groupes de sécurité sont renvoyés, vérifiez qu'ils existent dans votre compte.

Solution

Vérifiez si ces groupes de sécurité existent dans votre compte.

vpc_id=$(aws eks describe-cluster --name my-cluster --query cluster.resourcesVpcConfig.vpcId --output text) aws ec2 describe-security-groups --filters "Name=vpc-id,Values=$vpc_id" --query "SecurityGroups[*].GroupId"

L'exemple qui suit illustre un résultat.

[ "sg-EXAMPLE2" ]

Si les ID de groupe de sécurité renvoyés dans la sortie ne correspondent pas aux ID de groupe de sécurité qui ont été spécifiés lors de la création du cluster, et si vous voulez qu’Amazon EKS mette à jour le cluster, vous devez modifier les groupes de sécurité utilisés par le cluster. Amazon EKS ne mettra pas à jour un cluster si les ID de groupe de sécurité spécifiés lors de la création du cluster n’existent pas.

Lorsque vous lancez une mise à jour de la version Kubernetes pour votre cluster, la mise à jour peut échouer pour la même raison.

  • Vous ne disposez pas d’au moins six (bien que nous recommandions 16) adresses IP disponibles dans chacun des sous-réseaux que vous avez spécifiés lors de la création de votre cluster. Si vous ne disposez pas d’un nombre suffisant d’adresses IP disponibles dans le sous-réseau, vous devez soit libérer des adresses IP dans le sous-réseau, soit modifier les sous-réseaux utilisés par le cluster afin d’utiliser des sous-réseaux disposant d’un nombre suffisant d’adresses IP disponibles.

  • Vous avez activé le chiffrement des secrets lors de la création de votre cluster et la clé AWS KMS que vous avez spécifiée a été supprimée. Si vous souhaitez qu'Amazon EKS mette à jour le cluster, vous devez créer un nouveau cluster

Foire aux questions sur l’intégrité du cluster et codes d’erreur avec chemins de résolution

Amazon EKS détecte les problèmes liés à vos clusters EKS et à l’infrastructure du cluster, puis les stocke dans l’objet health de votre ressource de cluster EKS. Vous pouvez détecter et résoudre les problèmes de cluster plus rapidement à l'aide des informations relatives à l'état du cluster. Cela vous permet de créer des environnements d'applications plus sécurisés et à jour. De plus, il peut vous être impossible de mettre à niveau vers des versions plus récentes de Kubernetes ou d’Amazon EKS d’installer des mises à jour de sécurité sur un cluster dégradé en raison de problèmes liés à l’infrastructure nécessaire ou à la configuration du cluster. Amazon EKS peut mettre 3 heures pour détecter les problèmes ou détecter qu'un problème est résolu.

La santé d'un cluster Amazon EKS est une responsabilité partagée entre Amazon EKS et ses utilisateurs. Vous êtes responsable de l'infrastructure préalable des rôles IAM et des sous-réseaux Amazon VPC, ainsi que des autres infrastructures nécessaires, qui doivent être fournies à l'avance. Amazon EKS détecte les modifications apportées à la configuration de cette infrastructure et du cluster.

Pour accéder à l’état de santé de votre cluster dans la console Amazon EKS, recherchez un tableau intitulé Problèmes de santé dans l’onglet Problèmes de santé du cluster du tableau de bord d’observabilité accessible depuis la page de détails du cluster Amazon EKS. Ces données seront également disponibles en appelant l’action DescribeCluster dans l’API EKS, par exemple à partir de l’interface de ligne de commande AWS.

Pourquoi utiliser cette fonctionnalité ?

Vous pourrez bénéficier d'une visibilité accrue sur l'état de votre cluster Amazon EKS, diagnostiquer et résoudre rapidement les problèmes, sans avoir à passer du temps à déboguer ou à ouvrir des cas de support AWS. Par exemple : si vous avez accidentellement supprimé un sous-réseau pour le cluster Amazon EKS, Amazon EKS ne pourra pas créer d’interfaces réseau intercompte et les commandes AWS CLI Kubernetes telles que kubectl exec ou kubectl logs. L'erreur suivante s'affiche : Error from server: error dialing backend: remote error: tls: internal error. Le problème d'état Amazon EKS indique : subnet-da60e280 was deleted: could not create network interface.

Comment cette fonctionnalité est-elle liée ou fonctionne-t-elle avec d’autres services AWS ?

Les rôles IAM et les sous-réseaux Amazon VPC sont deux exemples d'infrastructure préalable avec laquelle l'état du cluster détecte les problèmes. Cette fonctionnalité renvoie des informations détaillées si ces ressources ne sont pas correctement configurées.

Un cluster présentant des problèmes de santé entraîne-t-il des frais ?

Oui, chaque cluster Amazon EKS est facturé au tarif standard d'Amazon EKS. La fonctionnalité liée à l'état du cluster est disponible sans frais supplémentaires.

Cette fonctionnalité fonctionne-t-elle avec les clusters Amazon EKS sur AWS Outposts ?

Oui, les problèmes de cluster sont détectés pour les clusters EKS dans le cloud AWS, y compris les clusters étendus sur AWS Outposts et les clusters locaux sur AWS Outposts. La santé du cluster ne détecte pas les problèmes avec Amazon EKS Anywhere ou Amazon EKS Distro (EKS-D).

Puis-je être averti lorsque de nouveaux problèmes sont détectés ?

Oui. AWS envoie un courriel et une notification sur le tableau de bord d’intégrité personnel lorsque de nouveaux problèmes d’intégrité du cluster sont détectés.

La console m’avertit-elle des problèmes d’intégrité ?

Oui, tout cluster présentant des problèmes d'état présentera une bannière en haut de la console.

Les deux premières colonnes sont celles qui sont nécessaires pour les valeurs de réponse de l'API. Le troisième champ de l’objet Health ClusterIssue est resourceIds, dont le retour dépend du type de problème.

Code Message ResourceIds Le cluster est-il récupérable ?

SUBNET_NOT_FOUND

Nous n’avons pas pu trouver un ou plusieurs sous-réseaux actuellement associés à votre cluster. Veuillez appeler l’API Amazon EKS update-cluster-config pour mettre à jour les sous-réseaux.

ID de sous-réseaux

Oui

SECURITY_GROUP_NOT_FOUND

Nous n’avons pas pu trouver un ou plusieurs groupes de sécurité actuellement associés à votre cluster. Appelez l'API update-cluster-config d'Amazon EKS pour mettre à jour les groupes de sécurité

ID de groupe de sécurité

Oui

IP_NOT_AVAILABLE

Un ou plusieurs sous-réseaux associés à votre cluster ne disposent pas d'un nombre suffisant d'adresses IP pour qu'Amazon EKS puisse effectuer des opérations de gestion de cluster. Libérez des adresses dans le ou les sous-réseaux ou associez différents sous-réseaux à votre cluster à l'aide de l'API update-cluster-config d'Amazon EKS.

ID de sous-réseaux

Oui

VPC_NOT_FOUND

Nous n’avons pas pu trouver le VPC associé à votre cluster. Vous devez supprimer et recréer votre cluster.

ID du VPC

Non

ASSUME_ROLE_ACCESS_DENIED

Votre cluster n'utilise pas le rôle lié au service Amazon EKS. Nous n’avons pas pu assumer le rôle associé à votre cluster pour effectuer les opérations de gestion Amazon EKS requises. Vérifiez que le rôle existe et qu'il dispose de la politique de confiance requise.

Rôle IAM du cluster

Oui

PERMISSION_ACCESS_DENIED

Votre cluster n'utilise pas le rôle lié au service Amazon EKS. Le rôle associé à votre cluster n'accorde pas les autorisations suffisantes à Amazon EKS pour effectuer les opérations de gestion requises. Vérifiez les politiques associées au rôle de cluster et si des politiques de refus distinctes sont appliquées.

Rôle IAM du cluster

Oui

ASSUME_ROLE_ACCESS_DENIED_USING_SLR

Nous n’avons pas pu assumer le rôle lié à un service de gestion du cluster Amazon EKS. Vérifiez que le rôle existe et qu'il dispose de la politique de confiance requise.

Rôle lié au service Amazon EKS

Oui

PERMISSION_ACCESS_DENIED_USING_SLR

Le rôle lié au service de gestion de cluster Amazon EKS n'accorde pas les autorisations suffisantes à Amazon EKS pour effectuer les opérations de gestion requises. Vérifiez les politiques associées au rôle de cluster et si des politiques de refus distinctes sont appliquées.

Rôle lié au service Amazon EKS

Oui

OPT_IN_REQUIRED

Votre compte ne dispose pas d’un abonnement au service Amazon EC2. Mettez à jour les abonnements de votre compte sur la page des paramètres de votre compte.

N/A

Oui

STS_REGIONAL_ENDPOINT_DISABLED

Le point de terminaison régional STS est désactivé. Activez le point de terminaison pour qu'Amazon EKS effectue les opérations de gestion de cluster requises.

N/A

Oui

KMS_KEY_DISABLED

La clé AWS KMS associée à votre cluster est désactivée. Réactivez la clé pour récupérer votre cluster.

L’ARN de la clé KMS

Oui

KMS_KEY_NOT_FOUND

Nous n’avons pas pu trouver la clé AWS KMS associée à votre cluster. Vous devez supprimer et recréer le cluster.

L’ARN de la clé KMS

Non

KMS_GRANT_REVOKED

Les autorisations pour la clé AWS KMS associée à votre cluster sont révoquées. Vous devez supprimer et recréer le cluster.

L’ARN de la clé KMS

Non