Je reçois des messages d’expiration de la connexion lorsque je me connecte à mon service qui est hébergé dans mon cluster Amazon Elastic Kubernetes Service (Amazon EKS).
Brève description
Les problèmes les plus courants de connexion au service se produisent parce que le groupe de sécurité ou la liste de contrôle d’accès au réseau (ACL réseau) restreint le trafic provenant des points de terminaison du pod.
Pour résoudre ce problème, vérifiez les groupes de sécurité et les ACL réseau associés à vos composants master d’instance et à votre équilibreur de charge. Si vous utilisez un équilibreur de charge réseau, vérifiez que les étiquettes de votre service sont correctement sélectionnées pour vos pods.
Remarque : les résolutions suivantes s’appliquent aux services inaccessibles. Pour plus d’informations sur les types de services Kubernetes, consultez Comment puis-je exposer les services Kubernetes exécutés sur mon cluster Amazon EKS ?
Résolution
Vérifier les ACL de votre groupe de sécurité et de votre réseau
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é de l’instance du pod de destination a une règle d’entrée qui permet à l’instance du pod du client de communiquer.
Dans la plupart des cas, il existe une règle automatique qui autorise toutes les communications sur les ports des groupes de sécurité des composants master. Si vous utilisez plusieurs groupes de nœuds, chacun ayant son propre groupe de sécurité, autorisez toutes les communications entre ces derniers. Cette action permet aux microservices qui s’exécutent sur les multiples nœuds de communiquer facilement.
Pour plus d’informations, consultez les Exigences et considérations relatives au groupe de sécurité Amazon EKS.
Port des nœuds
Le groupe de sécurité des composants master doit autoriser le trafic entrant sur le port spécifié dans la définition du service NodePort. Si elle 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 du réseau qui sont liées aux sous-réseaux des composants master. Assurez-vous que l’adresse IP de votre client figure sur la liste des autorisations sur le port utilisé par le service.
Si vous accédez au service Kubernetes via Internet, vérifiez que vos nœuds ont bien une adresse IP publique. Pour accéder au service, vous devez utiliser la combinaison de l’adresse IP publique et du port des nœuds.
Équilibreur de charge
Assurez-vous que les éléments suivants sont vrais :
- Le groupe de sécurité de l’équilibreur de charge autorise le trafic entrant dans les ports.
- Le groupe de sécurité de l’équilibreur de charge autorise le trafic sortant des ports de trafic cible.
- Le groupe de sécurité des composants master autorise le trafic entrant en provenance du groupe de sécurité de l’équilibreur de charge via le port sur lequel s’exécute le conteneur d’applications.
- Si vous utilisez un Network Load Balancer sans association de groupe de sécurité qui utilise la préservation de l’adresse IP du client, les composants master autorisent le trafic client.
- Le composant master autorise le trafic qui correspond au targetPort s’il est différent du port mappé au niveau du service.
- Les ACL réseau permettent à l’adresse IP de votre client d’atteindre l’équilibreur de charge sur le port d’écoute.
- Si vous accédez à l’équilibreur de charge via Internet, c’est que vous avez créé un équilibreur de charge connecté à Internet.
Vérifier que votre service a convenablement sélectionné les points de terminaison du pod
Si vos pods ne sont pas enregistrés en tant que dorsaux du service, vous recevrez un message d’erreur de délai d'attente. Cette erreur peut se produire lorsque vous accédez au service à partir d’un navigateur. Elle peut également se produire lorsque vous exécutez la commande curl podIP:podPort.
Vérifiez les étiquettes des pods et assurez-vous que le service est équipé des sélecteurs d’étiquettes appropriés. Pour plus d’informations, consultez Étiquettes et sélecteurs sur le site Web de Kubernetes.
Exécutez les commandes suivantes pour vérifier que votre service Kubernetes est convenablement sélectionné et que vos pods ont été enregistrés.
Commande :
kubectl get pods -o wide
Exemple de sortie :
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-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 votre nom de service et your_namespace par votre espace de noms.
Exemple de sortie :
Events: noneSession Affinity: none
Endpoints: 172.31.33.214:80
....
Dans l’exemple de sortie, 172.31.33.214 est l’adresse IP du pod renvoyée par la commande kubectl get pods -o wide. L’adresse IP 172.31.33.214 sert également de dorsale à un service qui s’exécute dans un cluster Amazon EKS.