Warum erreicht mein VPC-CNI-Plugin den API-Server in Amazon EKS nicht?

Lesedauer: 3 Minute
0

Mein Amazon Virtual Private Cloud (Amazon VPC) Container Network Interface (CNI)-Plugin kann den API-Server in Amazon Elastic Kubernetes Service (Amazon EKS) nicht erreichen.

Kurzbeschreibung

Der ipamD-Daemon versucht möglicherweise, eine Verbindung zum API-Server herzustellen, bevor der Kube-Proxy den Kubernetes-Dienstport hinzufügt. In diesem Fall kommt es bei der Verbindung zwischen ipamD und dem API-Server zu einem Timeout. Um dieses Problem zu beheben, überprüfen Sie die Protokolle für ipamD und kube-proxy und vergleichen Sie dann deren jeweiligen Zeitstempel.

Sie können auch einen init-Container hinzufügen. Der init-Container wartet darauf, dass der kube-proxy den Kubernetes-Service-Port erstellt. Die aws-node-Pods beenden dann die Initialisierung, um einen Timeout zu vermeiden.

Behebung

Überprüfen Sie die Protokolle für ipamD und kube-proxy

ipamD-Protokolle

Wenn bei der Verbindung zwischen ipamD und dem API-Server ein Timeout auftritt, erhalten Sie die folgende Fehlermeldung:

„Failed to create client: error communicating with apiserver:“

kube-proxy-Protokolle

Der kube-proxy erstellt iptables-Routen für Kubernetes-API-Serverendpunkte auf dem Worker-Knoten. Nachdem der kube-proxy die Route erstellt hat, wird die folgende Meldung angezeigt:

„Adding new service port \“default/kubernetes:https\“

Vergleichen Sie die Zeitstempel zwischen den Protokollen

ipamD-Protokolle

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

kube-proxy-Protokolle

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

In den ipamD-Protokollen können Sie sehen, dass der ipamD-Daemon zum Zeitpunkt mit dem Zeitstempel 2021-09-22T10:40:49.735Z versucht hat, eine Verbindung zum API-Server herzustellen. Bei der Verbindung kam es zu einem Timeout und sie ist fehlgeschlagen. In den kube-proxy-Protokollen können Sie sehen, dass der kube-proxy den Kubernetes-Serviceport zum Zeitpunkt mit dem Zeitstempel 2021-09-22T10:41:15.26766844Z hinzugefügt hat.

Einen init-Container hinzufügen

Gehen Sie wie folgt vor, um einen init-Container hinzuzufügen:

  1. Ändern Sie die aws-node-Spezifikation so, dass der DNS für den Kubernetes-Dienstnamen aufgelöst wird:

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

    Sie erhalten die folgende Ausgabe:

       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. Stellen Sie sicher, dass die aws-node-Pods die init-Container erstellt haben:

    $ kubectl get pods -n kube-system  -w

    Sie erhalten die folgende Ausgabe:

        ...
        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

Ähnliche Informationen

Aktualisierung des selbstverwalteten Kubernetes-Add-ons kube-proxy

Versionsverzerrungsrichtlinie auf der Kubernetes-Website

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr