使用 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 會為工作節點上的 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 常駐程式在2021-09-22T10:40:49.735Z 時嘗試連線到 API 伺服器。連線逾時且失敗。在 kube-proxy 日誌中,您可以看到 kube-proxy2021-09-22T10:41:15.26766844Z 時新增了 Kubernetes 服務連接埠。

新增初始化容器

若要新增初始化容器,請完成下列步驟:

  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 年前