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」エラーとは何ですか? セクション (よくある質問にある) をご参照ください。
ヒント: yum、apt-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))」をご参照ください。