Amazon EKS クラスターに接続できない原因を把握したいです。
作成した Amazon Elastic Kubernetes Service (Amazon EKS) クラスターに接続できません。
簡単な説明
次のいずれかの要因で Amazon EKS クラスターに接続できない可能性があります。
- クラスターの kubeconfig ファイルが作成されていない。
- Amazon EKS API サーバーエンドポイントに接続できない。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
kubeconfig ファイルが作成されていない
Amazon EKS クラスターの作成後、kubectl コマンドラインを使用してクラスターに接続できるようにするために kubeconfig ファイルを構成します。kubeconfig ファイルには、Kubernetes クラスターの設定が含まれています。
使用するオペレーティングシステム (OS) に応じて、kubeconfig ファイルは次の場所に配置されます。
- Linux または macOS では、$HOME/.kube/config に移動します。
- Windows では、%USERPROFILE%\.kube\config 荷移動します。
別のファイルの場所を参照するには、次のいずれかの手順を実行します。
- KUBECONFIG 環境変数が新しい場所を指すように設定します。
- kubectl コマンドを実行してカスタムファイルパスを指定する際、--kubeconfig フラグを付与します。
既に kubeconfig ファイルがデフォルトの場所に存在する場合は、Amazon EKS は新しい設定を既存のファイルとマージします。kubectl config コマンドを使用すると、クラスターのコンテキストを管理できます。詳細については、Kubernetes のウェブサイトで kubectl config を参照してください。
Amazon EKS API サーバーエンドポイントに接続できない
この問題をトラブルシューティングするには、次の手順を実行します。
-
Amazon EKS API サーバーの URL に接続できるかどうかを確認するには、次のコマンドを実行し、高い詳細度を指定します。
kubectl get svc --v=9コマンドの出力には、接続が使用する API サーバーの URL を含む、詳細な接続情報が表示されます。[HTTP トレース: DNS ルックアップ] に表示される IP アドレスを確認します。
出力例:I0110 16:43:36.920095 48173 loader.go:373] Config loaded from file: /Users/abs/.kube/configI0110 16:43:36.936844 48173 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500' I0110 16:43:37.362185 48173 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/ resolved to [{18.119.155.77 } {3.136.153.3 }] I0110 16:43:37.402538 48173 round_trippers.go:510] HTTP Trace: Dial to tcp:18.119.155.77:443 succeed I0110 16:43:37.500276 48173 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500 200 OK in 563 milliseconds I0110 16:43:37.500302 48173 round_trippers.go:570] HTTP Statistics: DNSLookup 1 ms Dial 40 ms TLSHandshake 44 ms ServerProcessing 52 ms Duration 563 ms I0110 16:43:37.500308 48173 round_trippers.go:577] Response Headers: I0110 16:43:37.500316 48173 round_trippers.go:580] Audit-Id: 37c17136-7fa7-40e9-8fe6-b24426e81564 I0110 16:43:37.500323 48173 round_trippers.go:580] Cache-Control: no-cache, private I0110 16:43:37.500329 48173 round_trippers.go:580] Content-Type: application/json I0110 16:43:37.500334 48173 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: 508eb99e-d99b-44db-8ade-838c99fe8e9f I0110 16:43:37.500340 48173 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: d324d3db-05ce-441b-a0ff-c31cbe8f696c I0110 16:43:37.500345 48173 round_trippers.go:580] Date: Tue, 10 Jan 2023 21:43:37 GMT -
Amazon EKS API サーバーにパブリックアクセスできるかどうかを確認するには、次の AWS CLI コマンド describe-cluster を実行します。
aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig注: cluster_name をクラスター名に、example_region を使用する AWS リージョンに置き換えてください。
出力例:{ "subnetIds": [ "subnet-abc1", "subnet-abc2", "subnet-abc3", "subnet-abc4", "subnet-abc5", "subnet-abc6" ], "securityGroupIds": [ "sg-abc7" ], "clusterSecurityGroupId": "sg-abc7", "vpcId": "vpc-abc9", "endpointPublicAccess": true, "endpointPrivateAccess": false, "publicAccessCidrs": [ "0.0.0.0/0" ] }パブリックアクセスを許可するには、endpointPublicAccess を true に設定する必要があります。プライベートアクセスを維持する場合は、endpointPublicAccess が false であることを確認してください。endpointPublicAccess が false の場合は、ステップ 9 に進みます。endpointPublicAccess が true の場合は、セキュリティの観点から、endpointPublicAccess を特定の IP アドレス範囲に限定することが推奨されます。ステップ 3 ~ 8 を実行し、許可する IP アドレスを許可リスト publicAccessCidrs に追加します。
-
Amazon EKS コンソールを開きます。
-
[クラスター] を選択し、更新するクラスターを選択します。
-
[ネットワーク] タブを選択し、[ネットワークの管理] を選択します。
-
[パブリック] を選択します。
-
許可リストに追加するパブリック CIDR 範囲を [詳細設定] の [CIDR ブロック] に入力します。
重要: プライベートサブネットのワーカーノードがインターネットへのアクセスに使用する NAT ゲートウェイの IP アドレスを入力します。すべての NAT デバイスネットワークコンポーネントの IP アドレスも入力する必要があります。 -
[変更を保存] を選択します。
-
クラスターの API サーバーをプライベート専用モードで構成した場合は、kubectl リクエストは、クラスターのネットワークから送信する必要があります。kubectl リクエストが Amazon Virtual Private Cloud (Amazon VPC) 外部から行われた場合、get svc コマンドを実行すると、次のタイムアウトエラーが発生します。
$ kubectl get svc --v=9I0110 17:15:58.889798 50514 loader.go:373] Config loaded from file: /Users/example-user/.kube/config I0110 17:15:58.896715 50514 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500' I0110 17:15:59.374499 50514 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com resolved to [{192.168.126.17 } {192.168.144.26 }] I0110 17:16:14.285027 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.126.17:443 failed: dial tcp 192.168.126.17:443: i/o timeout I0110 17:16:29.191768 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.144.26:443 failed: dial tcp 192.168.144.26:443: i/o timeout I0110 17:16:29.196959 50514 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500 in 30300 milliseconds I0110 17:16:29.197724 50514 round_trippers.go:570] HTTP Statistics: DNSLookup 183 ms Dial 14906 ms TLSHandshake 0 ms Duration 30300 ms I0110 17:16:29.197768 50514 round_trippers.go:577] Response Headers: I0110 17:16:29.199254 50514 helpers.go:264] Connection error: Get https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500: dial tcp 192.168.126.17:443: i/o timeout Unable to connect to the server: dial tcp 192.168.126.17:443: i/o timeout -
クラスターのセキュリティグループを更新し、送信元の IP アドレスまたは CIDR 範囲を許可リストに追加します。この手順により、kubectl クライアントはクラスター VPC 内から Amazon EKS API サーバーエンドポイントに接続できます。
関連情報
Amazon EKS クラスターとノードに関する問題のトラブルシューティング
Amazon EKS API サーバーへの接続時に発生するエラー を解決する方法を教えてください"You must be logged in to the server (Unauthorized)"
- トピック
- Containers
- 言語
- 日本語

関連するコンテンツ
- 質問済み 9ヶ月前
