Comment puis-je résoudre les problèmes d'expiration de connexion lorsque je me connecte à mon service hébergé sur Amazon EKS ?

Lecture de 5 minute(s)
0

Mes délais de connexion expirent lorsque je me connecte à mon service hébergé dans mon cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Les deux raisons les plus courantes pour lesquelles vous ne pouvez pas vous connecter à votre service dans votre cluster Amazon EKS sont les suivantes :

  • Les restrictions du groupe de sécurité ou de la liste de contrôle d'accès réseau (ACL réseau) empêchent le trafic d'atteindre les points de terminaison du pod.
  • Le service ne sélectionne pas les points de terminaison du pod, car les étiquettes ne correspondent pas.

Pour résoudre ces problèmes, vérifiez les groupes de sécurité et les ACL réseau associés à vos instances de composant master et à votre équilibreur de charge. Vérifiez également que les bonnes étiquettes de votre service ont été sélectionnées pour vos pods.

Remarque : le dépannage varie selon les types de service. Les résolutions suivantes s'appliquent lorsque vous dépannez des services inaccessibles. Pour en savoir plus sur les types de service Kubernetes, consultez Comment exposer les services Kubernetes exécutés sur mon cluster Amazon EKS ?

Résolution

Vérifier votre groupe de sécurité et vos ACL réseau

Adresse IP du cluster

Le type de service IP du cluster est utilisé pour la communication entre les microservices qui s'exécutent dans le même cluster Amazon EKS. Assurez-vous que le groupe de sécurité attaché à l'instance où présent dans l'espace de destination possède une règle de trafic entrant pour autoriser les communications depuis l'instance du pod client.

Dans la plupart des cas, il existe une règle automatique qui autorise toutes les communications sur tous les ports des groupes de sécurité du composant master. Si vous utilisez plusieurs groupes de nœuds dont chacun a son propre groupe de sécurité, assurez-vous d'autoriser toutes les communications entre les groupes de sécurité. Les microservices qui s'exécutent sur les multiples nœuds pourront ainsi communiquer facilement.

Pour en savoir plus, consultez la section Points relatifs aux groupes de sécurité Amazon EKS.

Port du nœud

Le groupe de sécurité du composant master doit autoriser le trafic entrant surle port spécifié dans la définition du service NodePort. S'il n'est pas spécifié dans la définition du service, la valeur du paramètre port est la même que celle du paramètre TargetPort. Le port est exposé sur tous les nœuds du cluster Amazon EKS.

Vérifiez les ACL réseau liées aux sous-réseaux du composant master. Assurez-vous que l'adresse IP de votre client figure sur la liste d'autorisation sur le port utilisé par le service.

Si vous accédez au service Kubernetes via Internet, assurez-vous que vos nœuds disposent d'une adresse IP publique. Pour accéder au service, vous devez utiliser l'adresse IP publique et la combinaison de ports du nœud.

Équilibreur de charge

Assurez-vous que le groupe de sécurité de l'équilibreur de charge autorise les ports d'écoute. Assurez-vous également que le groupe de sécurité du composant master autorise le trafic entrant en provenance du groupe de sécurité d'équilibrage de charge sur le port sur lequel le conteneur d'applications est exécuté.

Si le port spécifié dans la définition du service est différent du targetPort, vous devez autoriser le trafic entrant sur le port du groupe de sécurité du composant master pour le groupe de sécurité de l'équilibreur de charge. Le port et le targetPort sont généralement les mêmes dans la définition du service.

Les ACL réseau doivent permettre à l'adresse IP de votre client d'atteindre l'équilibreur de charge au niveau du port d'écoute. Si vous accédez à l'équilibreur de charge via Internet, assurez-vous d'avoir créé un équilibreur de charge public.

Vérifier si votre service a correctement sélectionné les points de terminaison du pod

Si vos pods ne sont pas enregistrés en tant que backends pour le Service, vous pouvez recevoir un message d'erreur de d'expiration du délai de connexion. Cette erreur peut se produire lorsque vous accédez au service à partir d'un navigateur ou lorsque vous exécutez la commande curl podip:PodPort.

Vérifiez les étiquettes des pods et vérifiez que le service dispose des sélecteurs d'étiquettes appropriés (sur le site web de Kubernetes).

Exécutez les commandes suivantes pour vérifier si votre service Kubernetes a correctement sélectionné et enregistré vos pods.

Commande :

kubectl get pods -o wide

Exemple de résultat :

NAME                    READY   STATUS    RESTARTS   AGE       IP                           NODE                         NOMINATED NODE   READINESS GATES
nginx-6799fc88d8-2rtn8   1/1     Running     0       3h4m   172.31.33.214   ip-172-31-33-109.us-west-2.compute.internal       none          none

Commande :

kubectl describe svc your_service_name -n your_namespace

Remarque : remplacez your_service_name par le nom de votre service et your_namespace par votre espace de noms.

Exemple de résultat :

Events:            none
Session Affinity:  none
Endpoints:         172.31.33.214:80
....

Dans l'exemple de sortie précédent, 172.31.33.214 est l'adresse IP de l'espace obtenue en exécutant la commande kubectl get pods -o wide. L'adresse IP 172.31.33.214 sert également de backend à un service qui s'exécute dans un cluster Amazon EKS.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans