Comment résoudre les problèmes liés au point de terminaison du serveur API de mon cluster Amazon EKS ?

Date de la dernière mise à jour : 2021-12-10

Je ne parviens pas à exécuter les commandes kubectl. J'ai modifié le paramètre d'accès au point de terminaison de public à privé sur mon cluster Amazon Elastic Kubernetes Service (Amazon EKS). Mon cluster est désormais bloqué à l'état Échec.

Brève description

Si vous rencontrez des problèmes avec votre point de terminaison du serveur API Kubernetes, suivez les étapes décrites dans l'une des sections suivantes :

  • Vous ne pouvez pas exécuter les commandes kubectl sur le nouveau cluster ou celui existant
  • Vous ne pouvez pas exécuter de commandes kubectl sur le cluster après avoir modifié l'accès au point de terminaison de public à privé
  • Votre cluster est bloqué à l'état Échec et vous ne pouvez pas modifier le paramètre d'accès au point de terminaison de public à privé

Remarque : Pour configurer l'accès au point de terminaison du serveur API Kubernetes, consultez Comment configurer l'accès public et privé au serveur API dans Amazon EKS ?

Solution

Vous ne pouvez pas exécuter les commandes kubectl sur le nouveau cluster ou celui existant

1.    Vérifiez que vous utilisez les bons fichiers kubeconfig pour vous connecter à votre cluster. Pour plus d'informations, consultez la section Organisation de l'accès au cluster à l'aide de fichiers kubeconfig (sur le site Web Kubernetes).

2.    Vérifiez que chaque cluster contient plusieurs contextes dans vos fichiers kubeconfig.

Exemple de sortie :

kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
Cluster name    Server
new200.us-east-2.eksctl.io       https://D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com

Si les fichiers kubeconfig existants ne possèdent pas les informations du cluster appropriées, utilisez la commande suivante pour en créer avec les informations appropriées :

aws eks update-kubeconfig --name cluster name --region region

Remarque : Remplacez le nom du cluster par le nom de votre cluster et la région par votre région AWS.

3.    Utilisez le telnet sur le port 443 pour valider la connectivité du point de terminaison du serveur API à partir de votre appareil.

Exemple de sortie :

echo exit | telnet D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com 443
Trying 18.224.160.210...
Connected to D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com.
Escape character is '^]'.
Connection closed by foreign host.

Si le telnet ne fonctionne pas, procédez comme suit pour résoudre le problème :

Vérifiez le résolveur DNS

Si le serveur d'API ne résout pas le problème, le problème peut venir du résolveur DNS.

Exécutez la commande suivante à partir du même appareil lorsque les commandes kubectl ont échoué :

nslookup APISERVER endpoint

Remarque : Remplacez le point de terminaison APISERVER par votre point de terminaison APISERVER.

Vérifiez si vous avez restreint l'accès public au point de terminaison du serveur d'API

Si vous avez spécifié des blocs d'adresse CIDR pour limiter l'accès au point de terminaison du serveur d'API public, une bonne pratique consiste à activer également l'accès au point de terminaison privé.

4.    Vérifiez le comportement de l'accès au point de terminaison du serveur API. Consultez la section Modification de l'accès au point de terminaison d'un cluster.

Vous ne pouvez pas exécuter de commandes kubectl sur le cluster après avoir modifié l'accès au point de terminaison de public à privé

1.    Vérifiez que vous utilisez un hôte bastion ou des réseaux connectés (tels que des VPC appairés, AWS Direct Connect ou des VPN) pour accéder au point de terminaison de l'API Amazon EKS.

Remarque : En mode d'accès privé, vous pouvez accéder au point de terminaison de l'API Amazon EKS uniquement depuis le VPC du cluster.

2.    Vérifiez si les groupes de sécurité ou les listes de contrôle d'accès réseau bloquent les appels d'API.

Si vous accédez à votre cluster via un VPC appairé, confirmez que les groupes de sécurité du plan de contrôle autorisent l'accès depuis le VPC appairé au groupe de sécurité du plan de contrôle du port 443. Vérifiez également que le port 53 est ouvert l'un à l'autre sur les VPC appairés. Le port 53 est utilisé pour la résolution DNS.

Votre cluster est bloqué à l'état « Échec » et vous ne pouvez pas modifier les paramètres de l'accès au point de terminaison de public à privé

Votre cluster peut se trouver sur l'état Échec en raison d'un problème d'autorisation avec AWS Identity and Access Management (IAM).

1.    Vérifiez que le rôle IAM de l'utilisateur est autorisé à effectuer l'action AssociateVPCWithHostedZone.

Remarque : Si l'action n'est pas bloquée, vérifiez si le compte de l'utilisateur dispose des politiques AWS Organizations qui bloquent les appels d'API et entraînent l'échec du cluster.

2.    Vérifiez que l'autorisation de l'utilisateur IAM n'est bloquée implicitement ou explicitement à aucun niveau au-dessus du compte.

Remarque : L'autorisation de l'utilisateur IAM est implicitement bloquée si elle n'est pas comprise dans la déclaration de politique Autoriser. Elle est explicitement bloqué si elle est comprise dans la déclaration de politique Rejeter. Remarque : L'autorisation est bloquée même si l'administrateur du compte attache la politique IAM AdministratorAccess avec des autorisations */* à l'utilisateur. Les autorisations des politiques AWS Organizations remplacent les autorisations des entités IAM.