¿Por qué el complemento de CNI de mi VPC no se conecta al servidor de la API en Amazon EKS?

3 minutos de lectura
0

Mi complemento de interfaz de red de contenedores de Amazon VPC (CNI) no se conecta al servidor de la API en Amazon Kubernetes Service (Amazon EKS).

Descripción corta

Si el daemon de ipamD intenta conectarse al servidor de la API antes de que el kube-proxy agregue el puerto de servicio de Kubernetes, la conexión entre ipamD y el servidor de la API se agota. Para solucionar esta situación, compruebe los registros de IPAmD y kube-proxy y, a continuación, compare la marca de tiempo de cada uno.

También puede agregar un contenedor init. El contenedor init espera a que el kube-proxy cree el puerto de servicio de Kubernetes. Los pods aws-node finalizan la inicialización para evitar que se agote el tiempo de espera.

Resolución

Comprobar los registros de ipamD y kube-proxy

Registros de ipamD:

Si se agota el tiempo de espera de la conexión entre el ipamD y el servidor de la API, recibirá el siguiente error:

"Failed to create client: error communicating with apiserver:

Registros de kube-proxy:

kube-proxy crea rutas iptables para los puntos de conexión del servidor de la API de Kubernetes en el nodo de trabajo. Una vez que kube-proxy cree la ruta, verá el siguiente mensaje:

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

Comparar las marcas de tiempo entre los registros

Registros de 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"}

Registros de 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"}

En los registros de ipamD, puede ver que el daemon de ipamD intentó conectarse con el servidor de la API en 2021-09-22T10:40:49.735Z. La conexión se agotó y dio error. En los registros de kube-proxy, puede ver que kube-proxy agregó el puerto de servicio de Kubernetes en 2021-09-22T10:41:15.26766844Z.

Agregar un contenedor init

Para agregar un contenedor init, complete los siguientes pasos:

1.    Modifique la especificación aws-node para que el DNS se resuelva para el nombre del servicio de Kubernetes:

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

Salida:

   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.    Compruebe que los pods aws-node crearon los contenedores init:

$ kubectl get pods -n kube-system  -w

Salida:

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

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años