使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

为什么我的 VPC CNI 插件无法访问 Amazon EKS 的 API 服务器?

2 分钟阅读
0

我的 Amazon Virtual Private Cloud (Amazon VPC) 容器网络接口 (CNI) 插件无法访问 Amazon Elastic Kubernetes Service (Amazon EKS) 的 API 服务器。

简短描述

kube-proxy 添加 Kubernetes 服务端口之前,ipamD 进程守护程序可能会尝试连接到 API 服务器。此时,ipamD 和 API 服务器之间的连接会超时。要解决此问题,请检查 ipamDkube-proxy 日志,然后比较各日志的时间戳。

您还可以添加初始化容器。初始化容器会等待 kube-proxy 创建 Kubernetes 服务端口。然后 aws-node 容器组(pod)会完成初始化以避免超时。

解决方法

检查 ipamD 和 kube-proxy 日志

ipamD 日志

如果 ipamD 和 API 服务器之间的连接超时,则会收到以下错误:

"Failed to create client: error communicating with apiserver:"

kube-proxy 日志

kube-proxy 会为 Worker 节点上的 Kubernetes API 服务器端点建立 iptables 路由。在 kube-proxy 创建路由后,您会看到以下消息:

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

比较各日志的时间戳

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

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

ipamD 日志中,可以看到 ipamD 进程守护程序试图连接到 API 服务器的时间为 2021-09-22T10:40:49.735Z。该连接超时并失败。在 kube-proxy 日志中,可以看到 kube-proxy 添加 Kubernetes 服务端口的时间为 2021-09-22T10:41:15.26766844Z

添加初始化容器

要添加初始化容器,请完成以下步骤:

  1. 修改 aws-node 规范,以便对 Kubernetes 服务名称进行 DNS 解析:

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

    您会收到以下输出:

       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. 验证 aws-node 容器组(pod)是否创建了初始化容器:

    $ kubectl get pods -n kube-system  -w

    您会收到以下输出:

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

相关信息

更新 Kubernetes kube-proxy 自行管理的附加组件

Kubernetes 网站上的版本偏差策略

AWS 官方
AWS 官方已更新 1 年前