Comment résoudre les problèmes de plugin kubelet ou CNI pour Amazon EKS ?

Dernière mise à jour : 15/11/2021

Je souhaite résoudre des problèmes avec mon plugin kubelet ou CNI pour Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Pour attribuer et exécuter une adresse IP au pod sur votre composant master avec votre plugin CNI (sur le site Web de Kubernetes), vous devez disposer des éléments suivants :

  • Autorisations AWS Identity and Access Management (IAM), y compris une politique CNI attachée au rôle IAM de votre composant master ou fournie via des rôles IAM pour les comptes de service
  • Un point de terminaison de serveur d'API Amazon EKS accessible depuis le nœud de travail
  • Accès réseau aux points de terminaison d'API pour Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic Container Registry (Amazon ECR) et Amazon Simple Storage Service (Amazon S3)
  • Assez d'adresses IP disponibles dans votre sous-réseau
  • Un kube-proxy qui s'exécute avec succès pour que le pod aws-node progresse vers l'état Prêt

Solution

Vérifiez que le pod aws-node est à l'état Running (En cours d'exécution) sur chaque composant master

Pour vérifier que le pod aws-node est à l'état Running (En cours d'exécution) sur un composant master, exécutez la commande suivante :

kubectl get pods -n kube-system -l k8s-app=aws-node -o wide

Si le résultat de la commande indique que le nombre RESTARTS est de 0, le pod aws-node est à l'état Running (En cours d'exécution). Essayez les étapes de dépannage de la section Vérifier que votre sous-réseau a suffisamment d'adresses IP libres disponibles.

Si le résultat de la commande indique que le nombre RESTARTS est d'une valeur supérieure à 0, essayez les étapes suivantes :

Vérifiez que le composant master peut atteindre le point de terminaison du serveur d'API de votre cluster Amazon EKS :

curl -vk https://eks-api-server-endpoint-url

Vérifiez la connectivité à votre cluster Amazon EKS

1.    Vérifiez que les paramètres de groupe de sécurité pour Amazon EKS de votre composant master sont correctement configurés. Pour en savoir plus, consultez la section Considérations relatives aux groupes de sécurité Amazon EKS.

2.    Vérifiez que les règles de la liste de contrôle d'accès (ACL) réseau de votre composant master pour votre sous-réseau autorisent la communication avec le point de terminaison du serveur d'API Amazon EKS.

Important : autorisez le trafic entrant et sortant sur le port 443.

3.    Vérifiez que le pod kube-proxy est à l'état Running (En cours d'exécution) sur chaque composant master :

kubectl get pods -n kube-system -l k8s-app=kube-proxy -o wide

4.    Vérifiez que votre nœud de travail peut accéder aux points de terminaison d'API pour Amazon EC2, Amazon ECR et Amazon S3.

Remarque : vous pouvez configurer ces services via des points de terminaison publics ou AWS PrivateLink.

Vérifiez que votre sous-réseau dispose de suffisamment d'adresses IP libres disponibles

Pour répertorier les adresses IP disponibles dans chaque sous-réseau de l'ID Amazon Virtual Private Cloud (Amazon VPC), exécutez la commande suivante :

aws ec2 describe-subnets --filters "Name=vpc-id,Values= VPCID" | jq '.Subnets[] | .SubnetId + "=" + "\(.AvailableIpAddressCount)"'

Remarque : le nombre d'adresses IP disponibles (AvailableIpAddressCount) doit être supérieur à 0 pour le sous-réseau sur lequel les pods sont lancés.

Vérifiez si les limites de votre groupe de sécurité ont été atteintes

La configuration de votre réseaux de pod peut échouer si vous atteignez les limites de vos groupes de sécurité par interface réseau Elastic.

Pour plus d'informations, consultez Quotas Amazon VPC.

Vérifiez que vous exécutez la dernière version stable du plugin CNI

Pour confirmer que vous disposez de la dernière version du plugin CNI, consultez Gestion du module complémentaire CNI Amazon VPC.

Pour un dépannage supplémentaire, consultez la page Problèmes AWS GitHub et les notes de mise à jour pour le plugin CNI.

Vérifiez les journaux du plugin CNI du VPC sur le composant master

Si vous avez créé un pod et qu'une adresse IP n'a pas été attribuée au conteneur, vous recevez l'erreur suivante :

failed to assign an IP address to container

Pour vérifier les journaux, allez dans le répertoire /var/log/aws-routed-eni/, puis localisez les noms de fichiers plugin.log et ipamd.log.

Vérifiez que votre kubelet extrait les images du conteneur Docker

Si votre kubelet n'extrait pas les images du conteneur Docker pour les conteneurs kube-proxy et amazon-k8s-cni, vous recevez l'erreur suivante :

network plugin is not ready: cni config uninitialized

Assurez-vous que le point de terminaison du serveur d'API EKS est accessible depuis le composant master.

Vérifiez que la valeur WARM_PREFIX_TARGET est correctement définie

WARM_PREFIX_TARGET doit être défini sur une valeur supérieure ou égale à 1. Si elle est définie sur 0, vous recevez l'erreur suivante :

Error: Setting WARM_PREFIX_TARGET = 0 is not supported while WARM_IP_TARGET/MINIMUM_IP_TARGET is not set. 
Please configure either one of the WARM_{PREFIX/IP}_TARGET or MINIMUM_IP_TARGET env variable

Consultez Variables de configuration du plugin CNI pour plus d'informations.

Vérifiez l'espace réservé dans le sous-réseau

Assurez-vous que vous disposez de suffisamment de blocs d'adresse CIDR IP /28 (16 IP) disponibles dans le sous-réseau. Les 16 adresses IP doivent être contiguës. Si vous ne disposez pas d'une plage /28 d'adresses IP continues, vous recevez l'erreur suivante :

InsufficientCidrBlocks

Pour résoudre cette erreur, créez un nouveau sous-réseau et lancez les pods à partir de celui-ci. Vous pouvez également utiliser une réservation CIDR de sous-réseau Amazon EC2 pour réserver un espace dans un sous-réseau avec un préfixe attribué. Pour plus d'informations, consultez Réservations CIDR de sous-réseau.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?