Amazon EKS クラスターに接続できないのはなぜですか?

最終更新日: 2020 年 1 月 20 日

Amazon Elastic Kubernetes Service (Amazon EKS) クラスターを作成しましたが、クラスターに接続できません。

簡単な説明

Amazon EKS クラスターを作成した後で、AWS コマンドラインインターフェイス (AWS CLI) を使用して kubeconfig ファイルを設定する必要があります。この設定では、 kubectl コマンドラインを使ってクラスターに接続できます。

次の解決方法では、AWS CLI update- kubeconfig コマンドを使用してクラスターの kubeconfig ファイルを作成する方法を示しています。AWS CLI を使用せずに kubeconfig ファイルを手動で更新するには、「kubeconfig を Amazon EKS 用に作成します」をご参照ください。

解決方法

1.    AWS CLI バージョン 1.16.308 以上がシステムにインストールされていることを確認するには、次のコマンドを実行します。

$ aws --version

重要: システムに Python バージョン 2.7.9 以上がインストールされている必要があります。それ以外のバージョンの場合、エラーが発生します。詳細については、「hostname doesn't match」エラーとは何ですか? セクション (よくある質問にある) をご参照ください。

ヒント: yumapt-get、あるいは macOS 用の homebrew などのパッケージマネージャーが AWS CLI のインストールによく使用されます。AWS CLI の最新バージョンを使用していることを確認するには、「AWS CLI のインストール」をご参照ください。

2.    クラスターの kubeconfig ファイルを作成または更新するには、次のコマンドを実行します。

aws eks --region region update-kubeconfig --name cluster_name

注: region を ご自分の AWS リージョンに置き換えます。cluster_name をご自分のクラスター名に置き換えます。

デフォルトでは、設定ファイルはホームディレクトリの kubeconfig パス ($HOME/.kube/config) で作成されるか、その場所の既存の kubeconfig とマージされます。Windows の場合、ファイルは %USERPROFILE%\.kube\config にあります。

KUBECONFIG 環境変数を設定するか、次の --kubeconfig オプションを使用して、別のパスを指定することもできます。

$ kubectl get pods --kubeconfig ./.kube/config

注: kubectl コマンドを実行する際の認証に、--role-arn オプションを使用して AWS Identity and Access Management (IAM) ロールの Amazon リソースネーム (ARN) を指定できます。それ以外の場合、デフォルトの AWS CLI または SDK 認証情報チェーンの IAM エンティティを使用します。デフォルトの AWS CLI または SDK ID を表示するには、aws sts get-caller-identity コマンドを実行します。

詳細については、update-kubeconfig をご参照ください。

3.    設定をテストするには、次のコマンドを実行します。

$ kubectl get svc

出力は次の例のようになります。

NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes   ClusterIP   10.100.0.1   <none>        443/TCP   1m

注: 他の認証またはリソースタイプのエラーが発生した場合は、「許可されていないか、アクセスが拒否されました (kubectl))」をご参照ください。