Passer au contenu

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

Lecture de 6 minute(s)
0

J’ai créé un cluster Amazon Elastic Kubernetes Service (Amazon EKS) auquel je ne parviens pas à me connecter.

Brève description

Il est possible que vous ne puissiez pas vous connecter à votre cluster Amazon 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 EKS

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Vous n’avez pas créé de fichier kubeconfig

Après avoir créé votre cluster Amazon EKS, configurez votre fichier kubeconfig afin de pouvoir utiliser la ligne de commande kubectl pour vous connecter à votre cluster. Le fichier kubeconfig contient la configuration de votre cluster Kubernetes.

En fonction de votre système d'exploitation (OS), vous pouvez trouver votre fichier kubeconfig aux emplacements suivants :

  • Pour Linux ou macOS, accédez à $HOME/.kube/config.
  • Pour Windows, accédez à %USERPROFILE%\.kube\config.

Pour utiliser un autre emplacement de fichier, effectuez l'une des actions suivantes :

  • Définissez la variable d'environnement KUBECONFIG afin qu'elle pointe vers le nouvel emplacement.
  • Utilisez l'indicateur --kubeconfig lorsque vous exécutez des commandes kubectl pour spécifier un chemin de fichier personnalisé.

Si un fichier kubeconfig existe déjà à l'emplacement par défaut, Amazon EKS fusionne les nouvelles configurations avec le fichier existant. Vous pouvez utiliser la commande kubectl config pour gérer les contextes de votre cluster. Pour plus d'informations, consultez la page kubectl config sur le site Web de Kubernetes.

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

Pour résoudre ce problème, procédez comme suit :

  1. Pour vérifier si vous pouvez vous connecter à l'URL du serveur d'API Amazon EKS, exécutez la commande suivante avec un niveau de détail accru :

    kubectl get svc --v=9

    La sortie de la commande affiche des informations de connexion détaillées, y compris l'URL du serveur API utilisée par votre connexion. Vérifiez les adresses IP répertoriées pour HTTP Trace : Recherche DNS.
    Exemple de sortie :

    I0110 16:43:36.920095   48173 loader.go:373] Config loaded from file:  /Users/abs/.kube/configI0110 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. Pour vérifier si le serveur d'API Amazon EKS est accessible au public, exécutez la commande d'interface de ligne de commande AWS describe-cluster suivante :

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

    Remarque : Remplacez cluster_name par le nom de votre cluster et example_region par votre région AWS.
    Exemple de sortie :

    {    "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"
        ]
    }

    Pour autoriser l'accès public, assurez-vous que endpointPublicAccess est défini sur true. Pour maintenir l'accès privé, assurez-vous que endpointPublicAccess est défini sur false. Si endpointPublicAccess est défini sur false, passez à l'étape 9. Si endpointPublicAccess est true, il est recommandé de limiter endpointPublicAccess à des plages d'adresses IP spécifiques. Effectuez les étapes 3 à 8 pour ajouter vos adresses IP autorisées à la liste d'autorisation publicAccessCidrs.

  3. Ouvrez la console Amazon EKS.

  4. Choisissez Clusters, puis sélectionnez le cluster que vous souhaitez mettre à jour.

  5. Cliquez sur l’onglet Mise en réseau, puis sélectionnez Gérer la mise en réseau.

  6. Choisissez Public.

  7. Dans Paramètres avancés, pour Bloc CIDR, saisissez la plage CIDR publique que vous souhaitez ajouter à la liste d’autorisation.
    Important : Incluez l'adresse IP de la passerelle NAT que les composants master de vos sous-réseaux privés utilisent pour accéder à Internet. Incluez également les adresses IP de tous les composants réseau des périphériques NAT.

  8. Sélectionnez Enregistrer les modifications.

  9. Si vous avez configuré le serveur d'API du cluster en mode privé uniquement, assurez-vous que la requête kubectl provient du réseau du cluster. Si votre requête kubectl provient de l'extérieur de votre Amazon Virtual Private Cloud (Amazon VPC), l'erreur de délai d’attente suivante s'affiche lorsque vous exécutez la commande get svc :

    $ kubectl get svc --v=9I0110 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
  10. Mettez à jour le groupe de sécurité du cluster pour ajouter l'adresse IP source ou la plage d'adresses CIDR à votre liste d'autorisation. Cela permet au client kubectl de se connecter au point de terminaison du serveur API Amazon EKS depuis le VPC du cluster.

Informations connexes

Résoudre les problèmes liés aux clusters et nœuds Amazon EKS

Comment résoudre l'erreur lorsque je me connecte au serveur API Amazon EKS ?"You must be logged in to the server (Unauthorized)"

Démystifier la mise en réseau des clusters pour les composants master Amazon EKS

Comment puis-je verrouiller l'accès de l'API à des adresses IP spécifiques dans mon cluster Amazon EKS ?