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

3 minutos de lectura
0

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

Descripción breve

Es posible que el daemon de ipamD intente conectarse al servidor de la API antes de que el kube-proxy añada el puerto de servicio de Kubernetes. En este caso, se agota el tiempo de espera de la conexión entre ipamD y el servidor de la API. Para solucionar este problema, compruebe los registros de ipamD y kube-proxy y, a continuación, compare la marca de tiempo de cada uno.

También puedes añadir un contenedor de inicio. El contenedor de inicio espera a que el kube-proxy cree el puerto de servicio de Kubernetes. A continuación, los pods aws-node finalizan la inicialización para evitar que se agote el tiempo de espera.

Resolución

Comprobación de los registros de ipamD y kube-proxy

Registros de ipamD

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

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

Registros de kube-proxy

El kube-proxy crea rutas iptables para los puntos de enlace 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\»

Comparación de 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 API en 2021-09-22T10:40:49.735Z. Se agotó el tiempo de espera de la conexión y se produjo un error. En los registros de kube-proxy, puede ver que el kube-proxy añadió el puerto de servicio de Kubernetes en 2021-09-22T10:41:15.26766844Z.

Cómo añadir un contenedor de inicio

Para añadir un contenedor de inicio, siga estos 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

    Recibirá el siguiente resultado:

       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 hayan creado los contenedores de inicio:

    $ kubectl get pods -n kube-system  -w

    Recibirá el siguiente resultado:

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

Información relacionada

Updating the Kubernetes kube-proxy self-managed add-on

Version skew policy en el sitio web de Kubernetes

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año