kubectl コマンドを実行できません。また、Amazon Elastic Kubernetes Service (Amazon EKS) クラスターのエンドポイントアクセス設定をパブリックからプライベートに変更しました。現在、クラスターは Failed 状態で停止しています。
簡単な説明
問題に基づいて、以下のセクションのいずれかの手順を実行してください。
**注:**Kubernetes API サーバーエンドポイントへのアクセスを設定するには、「クラスターエンドポイントアクセスの変更」を参照してください。
解像度
新規または既存のクラスターでは kubectl コマンドを実行できません
kubeconfig ファイルがクラスターに接続されていることを確認する
次の手順を実行します。
- 正しい kubeconfig ファイルを使用してクラスターに接続していることを確認します。詳細については、「kubeconfigファイルを使用したクラスターアクセスの整理」 (Kubernetes ウェブサイト上) を参照してください。
- kubeconfig ファイル内の各クラスターに複数のコンテキストがあるかどうかを確認します。
出力例:
$ kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
Cluster name Server
new200.us-east-2.eksctl.io https://D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com
使用中の kubeconfig ファイルに正しいクラスター情報がない場合は、次のコマンドを実行してクラスターの新しいエントリを作成します。
aws eks update-kubeconfig --name CLUSTER NAME --region REGION
注: CLUSTER NAME をクラスターの名前に置き換え、REGION をお使いの AWS リージョンに置き換えます。
- ポート 443 の telnet を使用して、デバイスからの API サーバーエンドポイントの接続を検証します。
出力例:
$ echo exit | telnet D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com 443
Trying 18.224.160.210...
Connected to D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com.
Escape character is '^]'.
Connection closed by foreign host.
telnet コマンドが機能しない場合は、次の手順を実行してトラブルシューティングを行います。
DNS リゾルバーを確認する
API サーバーが解決しない場合は、DNS リゾルバーに問題があります。
kubectl コマンドが失敗したのと同じデバイスから次のコマンドを実行します:
nslookup APISERVER ENDPOINT
**注:**APISERVER ENDPOINT をクラスターの API サーバーエンドポイントに置き換えます。
API サーバーエンドポイントへのパブリックアクセスを制限しているかどうかを確認する
パブリック API サーバーエンドポイントへのアクセスを制限するために CIDR ブロックを指定した場合は、プライベートエンドポイントアクセスも有効にするのがベストプラクティスです。
API サーバーのエンドポイントのアクセス動作を確認します。「クラスターエンドポイントアクセスの変更」を参照してください。
エンドポイントアクセスをパブリックからプライベートに変更した後は、クラスターで kubectl コマンドを実行できなくなります
この問題を解決するには、次の手順を実行してください。
- Amazon EKS API エンドポイントへのアクセスに、要塞ホスト、またはピアリングされた仮想プライベートクラウド (VPC)、AWS Direct Connect、VPN などの接続されたネットワークを使用していることを確認します。
**注:**プライベートアクセスモードでは、クラスターの VPC または接続されたネットワーク内からのみ Amazon EKS API エンドポイントにアクセスできます。
- セキュリティグループまたはネットワークアクセスコントロールリストが Kubernetes API サーバーへのリクエストをブロックしているかどうかを確認します。
ピアリングされた VPC を介してクラスターにアクセスする場合は、コントロールプレーンのセキュリティグループが正しいアクセスを許可していることを確認します。ピアリングされた VPC からポート 443 の Amazon EKS コントロールプレーンセキュリティグループへのアクセスを許可する必要があります。
クラスターが Failed 状態のままになり、エンドポイントのアクセス設定をパブリックからプライベートに変更できない
AWS ID とアクセス管理 (IAM) の権限の問題が原因で、クラスターが** Failed** 状態になっている可能性があります。
この問題を解決するには、次の手順を実行してください。
- ユーザーの IAM ロールに「VPC と HostedZone の関連付け」アクションを実行する権限があることを確認します。
**注:**アクションがブロックされない場合は、ユーザーのアカウントに API 呼び出しをブロックしてクラスターの障害を引き起こしている AWS Organizations ポリシーがないかどうかを確認します。
- IAM ユーザーの権限が、アカウントのどのレベルでも暗黙的または明示的にブロックされていないことを確認します。
**注:許可ポリシーステートメントに含まれていない場合、IAM ユーザー権限は暗黙的にブロックされます。拒否ポリシーステートメントに含まれている場合は、明示的にブロックされます。アカウント管理者が\ */\ * **権限の付いた AdministratorAccess IAM ポリシーをユーザーにアタッチしても、権限はブロックされます。AWS Organizations ポリシーの権限は IAM エンティティの権限よりも優先されます。