Perché il mio plug-in CNI VPC non riesce a raggiungere il server API in Amazon EKS?
Il mio plug-in CNI (Container Network Interface) Amazon VPC non riesce a raggiungere il server API in Amazon EKS (Amazon Kubernetes Service).
Breve descrizione
Se il daemon ipamD tenta di connettersi al server API prima che il kube-proxy abbia aggiunto la porta del servizio Kubernetes, la connessione tra ipamD e il server API scade. Per risolvere questo problema, controlla i log di ipamD e del kube-proxy, quindi confronta il timestamp di ciascuno di essi.
È inoltre possibile aggiungere un container di inizializzazione. Il container di inizializzazione attende che il kube-proxy crei la porta del servizio Kubernetes. I pod aws-node terminano quindi l'inizializzazione per evitare un timeout.
Risoluzione
Controlla i log di ipamD e kube-proxy
Log ipamD:
Se si verifica il timeout della connessione tra ipamD e il server API, viene visualizzato il seguente errore:
"Failed to create client: error communicating with apiserver:
Log kube-proxy:
Il kube-proxy crea instradamenti iptables per gli endpoint del server API Kubernetes sul nodo worker. Dopo che il kube-proxy ha creato l'instradamento, viene visualizzato il seguente messaggio:
Adding new service port \"default/kubernetes:https\"
Confronta i timestamp tra log
Log 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"}
Log 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"}
Nei log di ipamD, puoi vedere che il daemon ipamD ha provato a connettersi al server API all'indirizzo 2021-09-22T 10:40:49 .735Z. La connessione è scaduta e non è riuscita. Nei log del kube-proxy, puoi vedere che il kube-proxy ha aggiunto la porta del servizio Kubernetes su 2021-09-22T 10:41:15 .26766844Z.
Aggiungi un container di inizializzazione
Per aggiungere un container di inizializzazione, completa i seguenti passaggi:
1. Modifica la specifica aws-node in modo che il DNS venga risolto per il nome del servizio Kubernetes:
$ kubectl -n kube-system edit daemonset/aws-node
Output:
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. Verifica che i pod aws-node abbiano creato i container di inizializzazione:
$ kubectl get pods -n kube-system -w
Output:
... 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
Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa