kubectl コマンドを実行できません。また、Amazon Elastic Kubernetes Service (Amazon EKS) クラスターのエンドポイントアクセス設定をパブリックからプライベートに変更しました。現在、クラスターは Failed 状態で停止しています。
簡単な説明
Kubernetes API サーバーのエンドポイントに問題がある場合は、以下のセクションのいずれかの手順を実行してください:
- 新規または既存のクラスターでは** kubectl** コマンドを実行できません
- エンドポイントアクセスをパブリックからプライベートに変更した後は、クラスターで** kubectl** コマンドを実行できなくなります
- クラスターが** Failed** 状態のままになり、エンドポイントのアクセス設定をパブリックからプライベートに変更できませんません
**メモ:**Kubernetes API サーバーエンドポイントへのアクセスを設定するには、「クラスターエンドポイントアクセスの変更」を参照してください。
解像度
新規または既存のクラスターでは kubectl コマンドを実行できません
1.正しい kubeconfig ファイルを使用してクラスターに接続していることを確認します。詳細については、「kubeconfigファイルを使用したクラスターアクセスの整理」 (Kubernetes ウェブサイトから) を参照してください。
2.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
メモ:クラスター名をクラスターの名前に置き換え、リージョンを自分の AWSリージョンに置き換えます。
3.ポート 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 エンドポイントを APISERVER エンドポイントに置き換えます。
API サーバーエンドポイントへのパブリックアクセスを制限しているかどうかを確認してください
パブリックAPIサーバーエンドポイントへのアクセスを制限するためにCIDRブロックを指定した場合は、プライベートエンドポイントアクセスも有効にするのがベストプラクティスです。
4.API サーバーのエンドポイントのアクセス動作を確認します。「クラスターエンドポイントアクセスの変更」を参照してください。
エンドポイントアクセスをパブリックからプライベートに変更した後は、クラスターで kubectl コマンドを実行できなくなります
1.Amazon EKS API エンドポイントへのアクセスに、要塞ホスト、またはピアリングされた VPC、AWS Direct Connect、VPN などの接続されたネットワークを使用していることを確認します。
**メモ:**プライベートアクセスモードでは、クラスターの VPC 内からのみ Amazon EKS API エンドポイントにアクセスできます。
2.セキュリティグループまたはネットワークアクセスコントロールリストが API 呼び出しをブロックしていないか確認してください。
ピアリングされた VPC を介してクラスターにアクセスする場合は、コントロールプレーンのセキュリティグループが、ピアリングされた VPC からポート 443 のコントロールプランセキュリティグループへのアクセスを許可していることを確認します。また、ピアリングされている VPC のポート 53 が相互に開いていることを確認します。ポート 53 は DNS 解決に使用されます。
クラスターが Failed 状態のままになり、エンドポイントのアクセス設定をパブリックからプライベートに変更できない
AWS ID とアクセス管理 (IAM) の権限の問題が原因で、クラスターが** Failed** 状態になっている可能性があります。
1.ユーザーの IAM ロールに「VPC と HostedZone の関連付け」 アクションを実行する権限があることを確認します。
**メモ:**アクションがブロックされない場合は、ユーザーのアカウントに API 呼び出しをブロックしてクラスターの障害を引き起こしている AWS Organizations ポリシーがないかどうかを確認します。
2.IAM ユーザーの権限が、アカウントのどのレベルでも暗黙的または明示的にブロックされていないことを確認します。
**メモ:許可ポリシーステートメントに含まれていない場合、IAM ユーザー権限は暗黙的にブロックされます。拒否ポリシーステートメントに含まれている場合は、明示的にブロックされます。アカウント管理者が\ */\ * **権限の付いた AdministratorAccess IAM ポリシーをユーザーにアタッチしても、権限はブロックされます。AWS 組織ポリシーの権限は IAM エンティティの権限よりも優先されます。
関連情報
Amazon EKS セキュリティグループの要件と考慮事項
プライベートエンドポイントを使用する EKS クラスターの DNS 解決
Amazon EKS により、Kubernetes クラスターのパブリックエンドポイントへのネットワークアクセス制限が可能になります
Amazon EKS クラスターエンドポイントのアクセスコントロール