Pourquoi mes pods ne se connectent-ils pas à d'autres pods dans Amazon EKS ?

Date de la dernière mise à jour : 21/02/2020

Mes pods ne se connectent pas à d'autres pods dans Amazon Elastic Kubernetes Service (Amazon EKS).

Courte description

Si vos pods ne peuvent pas se connecter à d'autres pods, vous pouvez recevoir les erreurs suivantes (en fonction de votre application).

Si le groupe de sécurité d'un nœud de travail n'autorise pas la communication entre les travaux :

curl: (7) Failed to connect to XXX.XXX.XX.XXX port XX: Connection timed out

Si le DNS ne fonctionne pas :

Error: RequestError: send request failed caused by: Post  dial tcp: i/o timeout

Si le DNS fonctionne, mais qu'il y a toujours un problème de connectivité de pod :

Error: RequestError: send request failed caused by: Post  dial tcp 1.2.3.4.5:443: i/o timeout

Si le pod n'a pas été exposé via un service et que vous essayez de résoudre le DNS du pod :

kubectl exec -it busybox -- nslookup nginx 
Server:	  10.100.0.10
Address:  10.100.0.10:53
** server can't find nginx.default.svc.cluster.local: NXDOMAIN
*** Can't find nginx.svc.cluster.local: No answer
*** Can't find nginx.cluster.local: No answer
*** Can't find nginx.ap-southeast-2.compute.internal: No answer
*** Can't find nginx.default.svc.cluster.local: No answer
*** Can't find nginx.svc.cluster.local: No answer
*** Can't find nginx.cluster.local: No answer
*** Can't find nginx.ap-southeast-2.compute.internal: No answer

Pour résoudre ces erreurs, vérifiez si votre environnement est configuré correctement en confirmant ce qui suit :

  • Vous respectez les exigences de mise en réseau pour Kubernetes (à l'exception de toute stratégie NetworkPolicyintentionnelle)
  • Vos pods utilisent correctement DNS pour communiquer entre eux
  • Vos groupes de sécurité respectent les directives Amazon EKS
  • La liste de contrôle d'accès (ACL) réseau ne refuse pas la connexion
  • Votre sous-réseau dispose d'une route locale pour communiquer au sein de votre Amazon Virtual Private Cloud (Amazon VPC)
  • Il y a suffisamment d'adresses IP disponibles dans le sous-réseau
  • Vos pods sont planifiés et sont à l'état RUNNING
  • Vous disposez de la version recommandée du plug-in CNI Amazon VPC pour Kubernetes

Solution

Vous respectez les exigences de mise en réseau pour Kubernetes (à l'exception de toute stratégie NetworkPolicy intentionnelle)

Confirmez que vous respectez les exigences de mise en réseau pour Kubernetes.

Par défaut, les pods ne sont pas isolés. Les pods acceptent le trafic provenant de n'importe quelle source. Les pods sont isolés en ayant une stratégie NetworkPolicy qui les sélectionne.

Remarque : pour les configurations NetworkPolicy consultez Installation de Calico sur Amazon EKS.

Vos pods utilisent correctement DNS pour communiquer entre eux

Vous devez d'abord exposer vos pods via un service. Dans le cas contraire, vos pods n'obtiendront pas de noms DNS et ne pourront être accessibles que par leurs adresses IP spécifiques.

Reportez-vous à l'exemple suivant :

$ kubectl run nginx --image=nginx --replicas=5 -n web
deployment.apps/nginx created

$ kubectl expose deployment nginx --port=80 -n web
service/nginx exposed

$ kubectl get svc -n web
NAME    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
nginx   ClusterIP   10.100.94.70   <none>        80/TCP    2s

# kubectl exec -ti busybox -n web -- nslookup nginx
Server:    10.100.0.10
Address 1: 10.100.0.10 ip-10-100-0-10.ap-southeast-2.compute.internal
Name:      nginx
Address 1: 10.100.94.70 ip-10-100-94-70.ap-southeast-2.compute.internal

La sortie montre que l'IP ClusterIP 10.100.94.70 a été renvoyée lors de la résolution du nom DNS pour le service nginx.

Si vos pods ne parviennent toujours pas à résoudre le DNS, consultez Comment résoudre les problèmes DNS avec Amazon EKS ?

Remarque : Pour plus d'informations, consultez Pods, Service, et Services sans tête.

Vos groupes de sécurité respectent les directives Amazon EKS

Si vous souhaitez limiter le trafic autorisé sur le groupe de sécurité de votre nœud de travail, créez des règles entrantes pour n'importe quel protocole ou tous les ports utilisés par vos nœuds de travail pour la communication entre les travaux.

Une bonne pratique consiste à activer tout le trafic pour lui-même. Vous n'avez pas besoin de modifier les règles des groupes de sécurité chaque fois qu'un nouveau pod avec un nouveau port est créé.

Pour obtenir des informations supplémentaires, consultez l'article Considérations relatives aux groupes de sécurité Amazon EKS.

La liste ACL réseau ne refuse pas la connexion

1.    Vérifiez que le trafic entre votre cluster Amazon EKS et le CIDR VPC circule librement sur votre liste ACL réseau.

2.    (Facultatif) Pour ajouter une couche de sécurité supplémentaire à votre VPC, envisagez de configurer des listes ACL réseau avec des règles similaires à vos groupes de sécurité.

Votre sous-réseau dispose d'une route locale pour communiquer au sein de votre VPC

Vérifiez que vos sous-réseaux ont la route par défaut pour la communication au sein du VPC.

Il y a suffisamment d'adresses IP disponibles dans le sous-réseau

Vérifiez que vos sous-réseaux spécifiés ont suffisamment d'adresses IP disponibles pour les interfaces réseau Elastic entre comptes et vos pods.

Pour plus d'informations, consultez Adressage IP VPC.

Pour vérifier les adresses IP disponibles, exécutez la commande suivante de l'interface de ligne de commande AWS (AWS CLI) :

$ aws ec2 describe-subnets --subnet-id YOUR-SUBNET-ID --query 'Subnets[0].AvailableIpAddressCount'

Vos pods sont planifiés et sont à l'état RUNNING

Vérifiez que vos pods sont planifiés et sont à l'état RUNNING (EN COURS D'EXÉCUTION).

Pour dépanner l'état de votre pod, consultez How can I troubleshoot pod status in Amazon EKS? (Comment puis-je résoudre le problème de l'état du pod dans Amazon EKS ?)

Vous disposez de la version recommandée du plug-in CNI Amazon VPC pour Kubernetes

Si vous n'exécutez pas la version recommandée du plug-in CNI Amazon VPC pour Kubernetes, envisagez de procéder à une mise à niveau vers la dernière version.

Si vous disposez de la version recommandée, mais que vous rencontrez des problèmes, consultez Comment résoudre les problèmes de plug-in CNI pour Amazon EKS ?


Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?