Warum erreicht mein VPC-CNI-Plugin den API-Server in Amazon EKS nicht?
Mein Plugin von Amazon VPC Container Network Interface (CNI) erreicht den API-Server im Amazon Kubernetes Service (Amazon EKS) nicht.
Kurzbeschreibung
Wenn der iPAMD-Daemon versucht, eine Verbindung zum API-Server herzustellen, bevor der kube-Proxy den Kubernetes-Serviceport hinzugefügt hat, tritt bei der Verbindung zwischen dem ipamD und dem API-Server eine Zeitüberschreitung auf. Um diese Situation zu beheben, überprüfen Sie die ipamD- und die kube-Proxy-Protokolle, und vergleichen Sie dann den Zeitstempel der einzelnen Protokolle.
Sie können auch einen init-Container hinzufügen. Der init-Container wartet darauf, dass der kube-Proxy den Kubernetes-Serviceport erstellt. Die AWS-Knoten-Pods beenden dann die Initialisierung, um eine Zeitüberschreitung zu vermeiden.
Auflösung
ipamD- und kube-Proxy-Protokolle prüfen
ipamD-Protokolle:
Wenn die Verbindung zwischen dem ipamD und dem API-Server abläuft, wird der folgende Fehler angezeigt:
"Failed to create client: error communicating with apiserver:
kube-proxy-Protokolle:
Der kube-Proxy erstellt iptables-Routen für Kubernetes-API-Server-Endpunkte auf dem Worker-Knoten. Nachdem der kube-Proxy die Route erstellt hat, wird folgende Meldung angezeigt:
Adding new service port \"default/kubernetes:https\"
Zeitstempel zwischen den Protokollen vergleichen
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 versucht hat, sich am 2021-09-22T10:40:49.735Z mit dem API-Server zu verbinden. Die Verbindung hat das Zeitlimit überschritten und ist fehlgeschlagen. In den kube-Proxy-Protokollen können Sie sehen, dass der kube-Proxy den Kubernetes-Serviceport am 2021-09-22T10:41:15.26766844Z hinzugefügt hat.
Einen init-Container hinzufügen
Führen Sie die folgenden Schritte aus, um einen init-Container hinzuzufügen:
1. Ändern Sie die AWS-Knoten-Spezifikation so, dass das DNS für den Kubernetes-Servicenamen aufgelöst wird:
$ kubectl -n kube-system edit daemonset/aws-node
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-Knoten-Pods die init-Container erstellt haben:
$ kubectl get pods -n kube-system -w
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

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 9 Monaten
- AWS OFFICIALAktualisiert vor 6 Monaten
- AWS OFFICIALAktualisiert vor 7 Monaten
- AWS OFFICIALAktualisiert vor 4 Monaten