Pourquoi ne puis-je pas me connecter à mon cluster Amazon EKS ?
J’ai créé un cluster Amazon Elastic Kubernetes Service (Amazon EKS), mais je ne parviens pas à m’y connecter.
Brève description
Il est possible que vous ne puissiez pas vous connecter à votre cluster EKS pour l’une des raisons suivantes :
- Vous n’avez pas créé de fichier kubeconfig pour le cluster.
- Vous ne parvenez pas à vous connecter au point de terminaison du serveur API Amazon EKS.
Résolution
Vous n’avez pas créé de fichier kubeconfig
Après avoir créé un cluster Amazon EKS, vous devez configurer un fichier kubeconfig à l’aide de l’interface de la ligne de commande AWS (AWS CLI). Cette configuration vous permet d’utiliser la ligne de commande kubectl pour vous connecter au cluster. La résolution suivante vous montre comment créer un fichier kubeconfig pour votre cluster à l’aide de la commande update-kubeconfig de l’AWS CLI. Pour mettre à jour manuellement le fichier kubeconfig sans utiliser l’AWS CLI, consultez la page Création ou mise à jour d’un fichier kubeconfig pour un cluster Amazon EKS.
Remarque : si des erreurs surviennent lors de l’exécution des commandes AWS CLI, vérifiez que vous utilisez la version la plus récente de l’interface.
1. Vérifiez que la version 1.16.308 ou ultérieure de l’AWS CLI est installée sur votre système :
$ aws --version
Important : la version 2.7.9 ou ultérieure de Python doit être installée sur votre système. Dans le cas contraire, vous recevrez un message d’erreur.
Conseil : installez l’AWS CLI à l’aide de gestionnaires de packages tels que yum, apt-get ou homebrew pour macOS.
2. Consultez l’identité actuelle pour vérifier que vous utilisez des informations d’identification dotées d’autorisations sur le cluster Amazon EKS :
aws sts get-caller-identity
Remarque : l’utilisateur ou rôle IAM (Gestion des identités et des accès AWS) qui crée un cluster Amazon reçoit automatiquement des autorisations lors de la création du cluster. Ces autorisations sont accordées via la configuration RBAC du cluster dans le plan de contrôle. Les utilisateurs ou rôles IAM peuvent également se voir accorder l’accès à un cluster Amazon EKS dans aws-auth ConfigMap. Par défaut, AWS IAM Authenticator pour Kubernetes utilise l’identité AWS CLI ou AWS SDK configurée. Pour en savoir plus, consultez la page Activation de l’accès des utilisateurs et rôles IAM à un cluster.
3. Créez ou mettez à jour le fichier kubeconfig du cluster :
aws eks --region example_region update-kubeconfig --name cluster_name
Remarque : remplacez example_region par le nom de votre région AWS. Remplacez cluster_name par le nom de votre cluster EKS.
Par défaut, le fichier de configuration pour Linux est créé dans le chemin kubeconfig ($HOME/.kube/config) de votre répertoire personnel. Le fichier peut également être fusionné avec un fichier kubeconfig existant à cet emplacement. Sous Windows, le fichier se trouve dans %USERPROFILE%\.kube\config.
Vous pouvez également spécifier un autre chemin en définissant la variable d’environnement KUBECONFIG (depuis le site Web de Kubernetes) ou en utilisant l’option --kubeconfig suivante :
$ kubectl get pods --kubeconfig ./.kube/config
Remarque : pour effectuer l’authentification lors de l’exécution des commandes kubectl, vous pouvez spécifier un rôle IAM Amazon Resource Name (ARN) avec l’option --role-arn. Dans le cas contraire, l’entité IAM de votre chaîne d’informations d’identification AWS CLI ou AWS SDK par défaut sera utilisée. Pour en savoir plus, consultez la page update-kubeconfig. Vous pouvez également suivre l’étape 6 Création manuelle d’un fichier kubeconfigde la section Création ou mise à jour d’un fichier kubeconfig pour un cluster Amazon EKS.
4. Testez votre configuration :
$ kubectl get svc
Exemple de sortie :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m
Remarque : si vous recevez d’autres erreurs liées aux autorisations ou au type de ressource, consultez la section Accès non autorisé ou refusé (kubectl).
Vous ne parvenez pas à vous connecter au point de terminaison du serveur API EKS
1. Vérifiez que l’URL du serveur API Amazon EKS à laquelle vous vous connectez est correcte. Pour ce faire, activez la verbosité du kubectl, puis exécutez la commande suivante :
$ kubectl get svc --v=9
Vous obtiendrez une sortie de ce type :
I0110 16:43:36.920095 48173 loader.go:373] Config loaded from file: /Users/abs/.kube/config I0110 16:43:36.936844 48173 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500' I0110 16:43:37.362185 48173 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/ resolved to [{18.119.155.77 } {3.136.153.3 }] I0110 16:43:37.402538 48173 round_trippers.go:510] HTTP Trace: Dial to tcp:18.119.155.77:443 succeed I0110 16:43:37.500276 48173 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500 200 OK in 563 milliseconds I0110 16:43:37.500302 48173 round_trippers.go:570] HTTP Statistics: DNSLookup 1 ms Dial 40 ms TLSHandshake 44 ms ServerProcessing 52 ms Duration 563 ms I0110 16:43:37.500308 48173 round_trippers.go:577] Response Headers: I0110 16:43:37.500316 48173 round_trippers.go:580] Audit-Id: 37c17136-7fa7-40e9-8fe6-b24426e81564 I0110 16:43:37.500323 48173 round_trippers.go:580] Cache-Control: no-cache, private I0110 16:43:37.500329 48173 round_trippers.go:580] Content-Type: application/json I0110 16:43:37.500334 48173 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: 508eb99e-d99b-44db-8ade-838c99fe8e9f I0110 16:43:37.500340 48173 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: d324d3db-05ce-441b-a0ff-c31cbe8f696c I0110 16:43:37.500345 48173 round_trippers.go:580] Date: Tue, 10 Jan 2023 21:43:37 GMT
2. Vérifiez que le serveur API Amazon EKS est accessible au public en exécutant la commande suivante :
$ aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig
Vous obtiendrez une sortie de ce type :
{ "subnetIds": [ "subnet-abc1", "subnet-abc2", "subnet-abc3", "subnet-abc4", "subnet-abc5", "subnet-abc6" ], "securityGroupIds": [ "sg-abc7" ], "clusterSecurityGroupId": "sg-abc7", "vpcId": "vpc-abc9", "endpointPublicAccess": true, "endpointPrivateAccess": false, "publicAccessCidrs": [ "0.0.0.0/0" ] }
3. Si endpointPublicAccess est défini sur true dans la sortie précédente, vous devez mettre toutes les adresses IP source de la liste publicAccessCidrs sur liste blanche. Pour ce faire :
- Ouvrez la console Amazon EKS.
- Choisissez le cluster que vous souhaitez mettre à jour.
- Cliquez sur l’onglet Mise en réseau, puis sélectionnez Gérer la mise en réseau.
- Sélectionnez Public.
- Dans Paramètres avancés, Bloc d’adresse CIDR, saisissez l’ensemble de la plage CIDR publique qui doit être autorisée.
- Choisissez Enregistrer les modifications.
Si endPointPrivateAccess est défini sur true dans la sortie précédente, vérifiez que la requête kubectl provient bien du réseau du cluster. Si la requête kubectl provient d’un emplacement externe à votre Virtual Private Cloud (VPC) Amazon, vous obtiendrez cette erreur de délai d’attente :
$ kubectl get svc --v=9 I0110 17:15:58.889798 50514 loader.go:373] Config loaded from file: /Users/example-user/.kube/config I0110 17:15:58.896715 50514 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500' I0110 17:15:59.374499 50514 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com resolved to [{192.168.126.17 } {192.168.144.26 }] I0110 17:16:14.285027 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.126.17:443 failed: dial tcp 192.168.126.17:443: i/o timeout I0110 17:16:29.191768 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.144.26:443 failed: dial tcp 192.168.144.26:443: i/o timeout I0110 17:16:29.196959 50514 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500 in 30300 milliseconds I0110 17:16:29.197724 50514 round_trippers.go:570] HTTP Statistics: DNSLookup 183 ms Dial 14906 ms TLSHandshake 0 ms Duration 30300 ms I0110 17:16:29.197768 50514 round_trippers.go:577] Response Headers: I0110 17:16:29.199254 50514 helpers.go:264] Connection error: Get https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500: dial tcp 192.168.126.17:443: i/o timeout Unable to connect to the server: dial tcp 192.168.126.17:443: i/o timeout
Vous devez également mettre à jour le groupe de sécurité du cluster pour vous assurer que l’adresse IP source ou la plage d’adresses CIDR est autorisée. Le client kubectl pourra ainsi se connecter au point de terminaison du serveur API Amazon EKS.
Informations connexes
Vidéos associées
Contenus pertinents
- demandé il y a 5 moislg...
- demandé il y a 7 moislg...
- demandé il y a un anlg...
- demandé il y a 2 anslg...
- demandé il y a 4 moislg...
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a un an
- AWS OFFICIELA mis à jour il y a 2 ans