Amazon VPC コンテナネットワークインターフェイス (CNI) プラグインが Amazon Kubernetes サービス (Amazon EKS) の API サーバーに到達できない。
簡単な説明
kube-proxy が Kubernetes サービスポートを追加する前に ipamD デーモンが API サーバーに接続しようとすると、ipamD と API サーバー間の接続がタイムアウトします。この状況をトラブルシューティングするには、ipamD ログとkube-proxy ログを確認し、それぞれのタイムスタンプを比較します。
init コンテナを追加することもできます。init コンテナは、kube-proxy が Kubernetes サービスポートを作成するのを待ちます。aws-node ポッドは、タイムアウトを回避するために初期化を完了します。
解決方法
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 ログでは、2021-09-22T10:40:49.735Z に ipamD デーモンが API サーバーに接続しようとしたことが確認できます。接続がタイムアウトし、失敗しました。kube-proxy ログでは、kube-proxy が 2021-09-22T10:41:15.26766844Z に Kubernetes サービスポートを追加したことがわかります。
init コンテナを追加する
init コンテナーを追加するには、以下のステップを完了します。
1. DNS が Kubernetes サービス名で解決されるように aws-node 仕様を変更します。
$ 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 ポッドが init コンテナを作成したことを確認します。
$ 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