事象
Cloud9から「API server endpoint access」が「Private」であるEKSに対し、接続ができない。
具体的にはaws eks update-kubeconfig --name xx
によってコンフィグファイルに接続先情報が入っているにも関わらず以下のように応答が返ってこない。
$ kubectl get pod ^C
環境情報
- EKS : 1.28
- aws-cli/2.15.5
原因/解決策
EKSに設定したSecurity Groupによって通信がブロックされている。
該当のEKSに入っている設定は「Networking」タブの「Cluster security group/Additional security groups」より確認ができる。
Cloud9のIPアドレスからの通信をSecurity Groupにて追加設定をすると、接続が可能となる。
以下、補足です。
補足
Cloud9からEKSへの接続設定のためにクラスター名を入れると、以下のようにエンドポイントの宛先含めた設定がconfigファイルに格納されます。
$ aws eks update-kubeconfig --name xx Added new context arn:aws:eks:ap-northeast-1:xx:cluster/xx to /home/ec2-user/.kube/config
しかしネットワークに設定が入っていない状態では以下のように名前解決後のプライベートIPに接続失敗している様子が確認できます。
$ kubectl get pod --v=9 ... 17437 loader.go:374] Config loaded from file: /home/ec2-user/.kube/config ... 17437 round_trippers.go:466] curl -v -XGET -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.24.10 (linux/amd64) kubernetes/xx" 'https://xx.ap-northeast-1.eks.amazonaws.com/api?timeout=32s' ... 17437 round_trippers.go:495] HTTP Trace: DNS Lookup for xx.ap-northeast-1.eks.amazonaws.com resolved to [{xx } {xx }] ... 17437 round_trippers.go:508] HTTP Trace: Dial to tcp:xx:443 failed: dial tcp xx:443: i/o timeout
よってネットワークが起因で接続失敗していることが分かるので、EKSに指定したセキュリティグループの設定を見直すことで接続が可能となりました。
以上、ご参考になれば幸いです。