Por que meu plug-in VPC CNI não consegue acessar o servidor de API no Amazon EKS?

3 minuto de leitura
0

Meu plugin de Container Network Interface (CNI) da Amazon Virtual Private Cloud (Amazon VPC) não consegue acessar o servidor de API no Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

O ipamD daemon pode tentar se conectar ao servidor da API antes que o kube-proxy adicione a porta de serviço do Kubernetes. Nesse caso, a conexão entre o iPamd e o servidor da API atinge o tempo limite. Para solucionar esse problema, verifique os logs do ** iPamd ** e do kube-proxy e compare a data e hora de cada um.

Você também pode adicionar um contêiner de inicialização. O contêiner de inicilização espera que o kube-proxy crie a porta de serviço do Kubernetes. Os pods do nó aws então concluem a inicialização para evitar que atinja o tempo limite.

Resolução

Verifique os logs do iPamd e do kube-proxy

Logs do ipamD

Se a conexão entre o **iPAMD ** e o servidor da API atingir o tempo limite, você receberá o seguinte erro:

“Falha na criação do cliente: erro na comunicação com o apiserver”.

**Logs do kube-proxy **

O kube-proxy cria rotas iptables para endpoints do servidor da API Kubernetes no nó de processamento. Depois que o kube-proxy cria a rota, você vê a seguinte mensagem:

“Adicionando uma nova porta de serviço \"default/kubernetes:https\"

Compare os carimbos de data/hora entre os logs

Logs do 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"}

**Logs do 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"}

Nos logs ipamD , você pode ver que o ipamD daemon tentou se conectar ao servidor da API em 2021-09-22T10:40:49.735Z. A conexão atingiu o tempo limite e falhou. Nos logs do kube-proxy, você pode ver que o kube-proxy adicionou a porta de serviço Kubernetes em 2021-09-22T10:41:15.26766844Z.

Adicionar um contêiner de inicialização

Para adicionar um contêiner de inicialização, conclua as seguintes etapas:

  1. Modifique a especificação do nó aws para que o DNS seja resolvido para o nome do serviço Kubernetes:

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

    Você recebe a seguinte saída:

       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. Verifique se os pods do nó aws criaram os contêineres de inicialização:

    $ kubectl get pods -n kube-system  -w

    Você recebe a seguinte saída:

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

Informações relacionadas

Atualização do complemento autogerenciado kube-proxy Kubernetes

Política de desvio de versão no site do Kubernetes

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos