Pourquoi ne puis-je pas me connecter à mon cluster Amazon EKS ?

Lecture de 7 minute(s)
0

J'ai créé un cluster Amazon Elastic Kubernetes Service (Amazon EKS), mais je ne parviens pas à me connecter à mon cluster.

Brève description

Il se peut 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 votre cluster.
  • Vous ne parvenez pas à vous connecter au point de terminaison du serveur de l'API Amazon EKS.

Solution

Vous n'avez pas créé de fichier kubeconfig

Après avoir créé votre cluster Amazon EKS, vous devez configurer votre fichier  kubeconfig avec l'interface de la ligne de commande AWS (AWS CLI). Cette configuration vous permet de vous connecter à votre cluster à l'aide de la ligne de commande  kubectl. La résolution suivante explique comment créer un fichier kubeconfig pour votre cluster avec la commande  update-kubeconfig d'AWS CLI. Pour mettre à jour manuellement votre fichier kubeconfig sans utiliser l'AWS CLI, reportez-vous à Création ou mise à jour d'un fichier kubeconfig pour un cluster Amazon EKS. Remarque : si vous recevez des erreurs lors de l'exécution des commandes d'AWS CLI, vérifiez que vous utilisez la version d'AWS CLI la plus récente.

1.    Vérifiez que l'AWS CLI version 1.16.308 ou ultérieure 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 recevez une erreur.

Conseil : utilisez les gestionnaires de packages tels que yum, apt-get ou homebrew pour macOS lorsque vous installez l'AWS CLI.

2.    Vérifiez l'identité actuelle pour vous assurer que vous utilisez les bonnes informations d'identification donnant accès au cluster Amazon EKS :

aws sts get-caller-identity

Remarque : l'utilisateur ou le rôle de l'entité AWS Identity and Access Management (IAM) qui crée un cluster Amazon se voit automatiquement accorder des autorisations lorsque le cluster est créé. Ces autorisations sont données dans la configuration RBAC du cluster dans le plan de contrôle. Les utilisateurs ou les rôles IAM peuvent également avoir accès à un cluster Amazon EKS dans aws-auth ConfigMap. Par défaut, AWS IAM Authenticator for Kubernetes utilise l'identité AWS CLI ou AWS SDK configurée. Pour plus d'informations, reportez-vous à Activation de l'accès des utilisateurs et des rôles IAM à votre cluster.

3.    Créez ou mettez à jour le fichier kubeconfig pour votre 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 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 kubeconfig existant à cet emplacement. Sous Windows, l'emplacement du fichier est %USERPROFILE%.kube\config.

Vous pouvez également spécifier un autre chemin en définissant la variable d'environnement KUBECONFIG (à partir du site Web de Kubernetes), ou avec l'option --kubeconfig suivante :

$ kubectl get pods --kubeconfig ./.kube/config

Remarque : en ce qui concerne l'authentification lors de l'exécution des commandes kubectl, vous pouvez spécifier un Amazon Resource Name (ARN) de rôle IAM avec l'option --role-arn. Autrement, l'entité IAM présente dans votre chaîne d'informations d'identification AWS CLI ou AWS SDK par défaut est utilisée. Pour plus d'informations, reportez-vous à update-kubeconfig. Vous pouvez aussi effectuer l'étape 6 de la section Créer manuellement le fichier kubeconfig dans Créer ou mettre à jour 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 d'autorisation ou de type de ressource, reportez-vous à Accès non autorisé ou refusé (kubectl).

Vous ne parvenez pas à vous connecter au point de terminaison du serveur de l'API Amazon EKS

1.    Vérifiez que vous vous connectez à l'URL correcte du serveur de l'API Amazon EKS. Pour ce faire, activez la verbosité de kubectl puis exécutez la commande suivante :

$ kubectl get svc --v=9

Le résultat est similaire à ce qui suit :

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 d'API Amazon EKS est accessible publiquement en exécutant la commande suivante :

$ aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig

Le résultat est similaire à ce qui suit :

{
    "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.    Dans la sortie précédente, si endpointPublicAccess est sur true, assurez-vous d'autoriser toutes les adresses IP sources dans la liste publicAccessCidrs. Pour ce faire, procédez comme suit :

  1. Ouvrez la console Amazon EKS.
  2. Sélectionnez le cluster que vous souhaitez mettre à jour.
  3. Sélectionnez l'onglet Networking (Réseaux), puis Manage Networking (Gérer les réseaux).
  4. Sélectionnez Public.
  5. Dans Advanced settings (Paramètres avancés), pour CIDR block (Blocage CIDR), entrez la plage complète d'adresses CIDR publiques devant être autorisée.
  6. Sélectionnez Save changes (Enregistrer les modifications).

Dans la sortie précédente, si endPointPrivateAccess est sur true, assurez-vous que la requête kubectl provient du réseau du cluster. Si votre requête kubectl ne provient pas de votre Amazon Virtual Private Cloud (Amazon VPC), l'erreur d'expiration suivante apparaît :

$ 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

Mettez également à 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. Cela permet au client kubectl de se connecter au point de terminaison du serveur de l'API Amazon EKS.


Informations connexes

Résolution des erreurs d'Amazon EKS

Comment résoudre l'erreur « Vous devez être connecté au serveur (non autorisé) » lorsque je me connecte au serveur d'API Amazon EKS ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 10 mois