Pourquoi mon plug-in CNI VPC ne parvient-il pas à atteindre le serveur API dans Amazon EKS ?

Lecture de 3 minute(s)
0

Mon plug-in CNI (Container Network Interface) Virtual Private Cloud (VPC) Amazon ne parvient pas à atteindre le serveur API dans Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Il est possible que le démon ipamD tente de se connecter au serveur API avant que le kube-proxy n'ajoute le port de service Kubernetes. Dans ce cas, la connexion entre l’ipamD et le serveur API expire. Pour résoudre ce problème, consultez les journaux de l'ipamD et du kube-proxy, puis comparez l'horodatage de chacun.

Vous pouvez également ajouter un conteneur d'initialisation. Le conteneur d'initialisation attend que le kube-proxy crée le port de service Kubernetes. Les pods aws-node terminent ensuite l'initialisation pour éviter un délai d'attente.

Résolution

Vérification des journaux de l'ipamD et du kube-proxy

Journaux de l'ipamD

Si la connexion entre l'ipamD et le serveur API expire, le message d'erreur suivant s'affiche :

« Failed to create client: error communicating with apiserver: »

Journaux du kube-proxy

Le kube-proxy crée des acheminements iptables pour les points de terminaison du serveur API Kubernetes sur le composant master. Une fois que le kube-proxy à créé l'acheminement, le message suivant s'affiche :

« Adding new service port \"default/kubernetes:https\ »

Comparaison de l'horodatage des journaux

Journaux de l'ipamD

{"level":"error","ts":"2021-09-22T10:40:49.735Z","caller":"aws-k8s-agent/main.go:28","msg":"Failed to create client: error communicating with apiserver: Get https://10.77.0.1:443/version?timeout=32s: dial tcp 10.77.0.1:443: i/o timeout"}

Journaux du kube-proxy

{"log":"I0922 10:41:15.267648       1 service.go:379] Adding new service port \"default/kubernetes:https\" at 10.77.0.1:443/TCP\n","stream":"stderr","time":"2021-09-22T10:40:49.26766844Z"}

Dans les journaux de l’ipamD, nous pouvons voir que le démon ipamD a tenté de se connecter au serveur API à la date suivante : 2021-09-22T10:40:49.735Z. La connexion a expiré et a échoué. Dans les journaux de kube-proxy, nous pouvons voir que le kube-proxy a ajouté le port de service Kubernetes à la date suivante : 2021-09-22T10:41:15.26766844Z.

Ajout d'un conteneur d'initialisation

Pour ajouter un conteneur d'initialisation, procédez comme suit :

  1. Modifiez la spécification aws-node afin que le DNS soit résolu pour le nom du service Kubernetes :

    $ kubectl -n kube-system edit daemonset/aws-node

    Vous obtenez le résultat suivant :

       initContainers:
       - name: init-kubernetes-api
         image: busybox:1.28
         command: ['sh', '-c', "until nc -zv ${KUBERNETES_PORT_443_TCP_ADDR} 443; do echo waiting for kubernetes Service endpoint; sleep 2; done"]
  2. Vérifiez que les pods aws-node ont bien créé les conteneurs d'initialisation :

    $ kubectl get pods -n kube-system  -w

    Vous obtenez le résultat suivant :

        ...
        kube-proxy-smvfl                          0/1     Pending             0          0s
        aws-node-v68bh                            0/1     Pending             0          0s
        kube-proxy-smvfl                          0/1     Pending             0          0s
        aws-node-v68bh                            0/1     Pending             0          0s
        aws-node-v68bh                            0/1     Init:0/1            0          0s
        kube-proxy-smvfl                          0/1     ContainerCreating   0          0s
        kube-proxy-smvfl                          1/1     Running             0          6s
        aws-node-v68bh                            0/1     PodInitializing     0          9s
        aws-node-v68bh                            0/1     Running             0          16s
        aws-node-v68bh                            1/1     Running             0          53s

Informations connexes

Mise à jour du module complémentaire autogéré Kubernetes kube-proxy

Version skew policy sur le site Web de Kubernetes

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an