ワーカーノードが Amazon Elastic Kubernetes Service (Amazon EKS) クラスターに参加できません。
解決策
Amazon EKS クラスターに参加できないワーカーノードをトラブルシューティングするには、次の手順を実行します。
Systems Manager Automation を使用して問題を特定する
AWSSupport-TroubleshootEKSWorkerNode オートメーションランブックを実行して、ワーカーノードがクラスターに参加するのを妨げている問題を特定します。
前提条件:
- ワーカーノードの AWS Identity and Access Management (IAM) ロールに、AmazonSSMManagedInstanceCore ポリシーがアタッチされていること
- ワーカーノードが実行中で、Systems Manager からアクセス可能であること
オートメーションの実行について詳しくは、「AWSSupport-TroubleshootEKSWorkerNode」を参照してください。
VPC の DNS 設定を確認する
次の手順を実行します。
- Amazon Virtual Private Cloud (Amazon VPC) コンソールを開きます。
- ナビゲーションペインで [VPC] を選択します。
- お使いの VPC を選択します。
- [アクション] を選択し、[VPC の設定を編集] を選択します。
- 次の設定を確認します。
[DNS 解決] が有効になっていることを確認します。
[DNS ホスト名] が有効になっていることを確認します。
- ナビゲーションペインで [DHCP オプションセット] を選択します。
- お使いの DHCP オプションセットを選択します。
- 次の値を確認します。
domain-name が region.compute.internal に設定されていることを確認します。例えば、us-west-2.compute.internal です。
domain-name-servers が AmazonProvidedDNS に設定されていることを確認します。
DHCP オプションセットについて詳しくは、「Amazon VPC の DHCP オプションセット」を参照してください。
ワーカーノードの IAM アクセス許可を確認する
次の手順を実行します。
- IAM コンソールを開きます。
- ナビゲーションペインで [ロール] を選択します。
- お使いのワーカーノードの IAM ロールを検索します。
- そのロールを選択します。
- [アクセス許可] タブを選択します。
- 次のマネージドポリシーがアタッチされていることを確認します。
AmazonEKSWorkerNodePolicy
AmazonEC2ContainerRegistryPullOnly
注: VPC CNI に IRSA または EKS Pod Identity を使用しない場合は、AmazonEKS_CNI_Policy マネージドポリシーもアタッチする必要があります。ただし、このポリシーを Amazon VPC CNI アドオン専用の別のロールにアタッチするのがベストプラクティスです。
ノード IAM ロールの作成について詳しくは、「Amazon EKS ノードの IAM ロール」を参照してください。
ワーカーノードの認証を設定する
認証を設定するには、次の方法のいずれかを選択します。
アクセスエントリを使用する
アクセスエントリは、ワーカーノードにクラスターへのアクセス権を付与する際に推奨される方法です。
- Amazon EKS コンソールを開きます。
- ナビゲーションペインで [クラスター] を選択します。
- お使いのクラスターを選択します。
- [アクセス] タブを選択します。
- Access entries セクションで、ワーカーノードの IAM ロール ARN のエントリが存在することを確認します。
- エントリが存在しない場合は、[アクセスエントリの作成] を選択します。
- [IAM プリンシパル ARN] には、インスタンスプロファイル ARN ではなく、ワーカーノードの IAM ロール ARN を入力します。
- [タイプ] では、ノードタイプに基づいて [EC2 Linux] または [EC2 Windows] を選択します。
- [次へ] を選択し、[作成] を選択します。
アクセスエントリについて詳しくは、「EKS アクセスエントリを使用して Kubernetes へのアクセスを IAM ユーザーに許可する」を参照してください。
aws-auth ConfigMap を使用する
クラスターがアクセスエントリをサポートしていない場合は、aws-auth ConfigMap 方式を使用してください。
aws-auth ConfigMap の設定について詳しくは、「ConfigMap を使用して IAM ユーザーに Kubernetes へのアクセスを許可する」を参照してください。
ユーザーデータ設定を確認する
セルフマネージドノードについては、ユーザーデータに正しいクラスター名と設定が含まれていることを確認します。
ユーザーデータには、お使いのクラスター名を含むブートストラップスクリプトが含まれている必要があります。
#!/bin/bash
/etc/eks/bootstrap.sh my-cluster
注: my-cluster を実際のクラスター名に置き換えます。
ブートストラップスクリプト設定について詳しくは、「Node bootstrapping」(ノードブートストラップ) を参照してください。
ネットワーク接続を確認する
次の手順を実行します。
- ワーカーノードがクラスター API サーバーエンドポイントに到達できることを確認します。
- パブリックサブネットのノードには、パブリック IP アドレスが割り当てられていることを確認します。
- プライベートサブネットのノードについては、サブネットに NAT ゲートウェイへのルートがあることを確認します。
- セキュリティグループが次のトラフィックを許可していることを確認します。
クラスター API 通信用のポート 443
kubelet 通信用のポート 10250
DNS 解決用のポート 53 (TCP および UDP)
セキュリティグループの要件について詳しくは、「クラスターの Amazon EKS セキュリティグループ要件を表示する」を参照してください。
プライベートクラスターの VPC エンドポイントを確認する
クラスターがプライベートエンドポイントを使用している場合は、次の VPC エンドポイントが存在することを確認してください。
- com.amazonaws.region.ec2
- com.amazonaws.region.ecr.api
- com.amazonaws.region.ecr.dkr
- com.amazonaws.region.s3
- com.amazonaws.region.sts
プライベートクラスターの要件について詳しくは、「インターネットアクセスが制限されたプライベートクラスターをデプロイする」を参照してください。
クラスターロールの設定を確認する
次の手順を実行します。
- IAM コンソールを開きます。
- ナビゲーションペインで [ロール] を選択します。
- クラスターの IAM ロールを検索します。
- そのロールを選択します。
- [信頼関係] タブを選択します。
- 信頼ポリシーが eks.amazonaws.com によるロールの引き受けを許可していることを確認します。
- [アクセス許可] タブを選択します。
- AmazonEKSClusterPolicy がアタッチされていることを確認します。
kubelet ログを確認する
ワーカーノードの kubelet ログを確認するには、次の手順を実行します。
-
SSH または Systems Manager Session Manager を使用してワーカーノードに接続します。
-
次のコマンドを実行します。
sudo journalctl -u kubelet -f
-
ノードがクラスターに参加できない理由を示すエラーメッセージを探します。
AWS STS エンドポイントがアクティブ化されていることを確認する
お使いの AWS リージョンの AWS STS エンドポイントが、アカウントでアクティブ化されていることを確認します。
STS エンドポイントのアクティベーションについて詳しくは、「AWS リージョンでの AWS STS のアクティブ化と非アクティブ化」を参照してください。
VPC とサブネットのタグ付けを確認する
次の手順を実行します。
- Amazon VPC コンソールを開きます。
- ナビゲーションペインで [サブネット] を選択します。
- ワーカーノードがデプロイされているサブネットを選択します。
- [タグ] タブを選択します。
- 次のタグが存在することを確認してください。
Key については、kubernetes.io/cluster/my-cluster
Value については、shared または owned
注: my-cluster を実際のクラスター名に置き換えます。
関連情報
Amazon EKS クラスターとノードに関する問題をトラブルシューティングする
VPC and Subnet Considerations (VPC とサブネットに関する考慮事項)