Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何让我的 Worker 节点加入 Amazon EKS 集群?
我的 Worker 节点无法加入 Amazon Elastic Kubernetes Service (Amazon EKS) 集群。
解决方法
要对无法加入 Amazon EKS 集群的 Worker 节点进行故障排除,请完成以下步骤:
使用 Systems Manager 自动化来识别问题
使用 AWSSupport-TroubleshootEKSWorkerNode 自动化运行手册,识别阻止 Worker 节点加入集群的问题。
先决条件:
- Worker 节点必须在其 AWS Identity and Access Management (IAM) 角色上附加 AmazonSSMManagedInstanceCore 策略
- Worker 节点必须处于运行状态且可通过 Systems Manager 进行访问
有关运行此自动化的更多信息,请参阅 AWSSupport-TroubleshootEKSWorkerNode。
检查 VPC 的 DNS 配置
完成以下步骤:
- 打开 Amazon Virtual Private Cloud (Amazon VPC) 控制台。
- 在导航窗格中,选择 Your VPCs(您的 VPC)。
- 选择您的 VPC。
- 选择 Actions(操作),然后选择 Edit VPC settings(编辑 VPC 设置)。
- 验证以下设置:
对于 DNS resolution(DNS 解析),确认其已开启。
对于 DNS hostnames(DNS 主机名),确认其已开启。 - 在导航窗格中,选择 DHCP options sets(DHCP 选项集)。
- 选择您的 DHCP 选项集。
- 验证以下值:
对于 domain-name,确认其设置为 region.compute.internal。例如,us-west-2.compute.internal。
对于 domain-name-servers,确认其设置为 AmazonProvidedDNS
有关 DHCP 选项集的更多信息,请参阅 Amazon VPC 中的 DHCP 选项集。
验证 Worker 节点的 IAM 权限
完成以下步骤:
- 打开 IAM 控制台。
- 在导航窗格中,选择 Roles(角色)。
- 搜索您的 Worker 节点 IAM 角色。
- 选择该角色。
- 选择 Permissions(权限)选项卡。
- 验证是否已附加以下托管策略:
AmazonEKSWorkerNodePolicy
AmazonEC2ContainerRegistryPullOnly
**注意:**如果您没有将 IRSA 或 EKS 容器组身份用于 VPC CNI,则还必须附加 AmazonEKS_CNI_Policy 托管策略。不过,最佳做法是将此策略附加到专门用于 Amazon VPC CNI 插件的单独角色。
有关创建节点 IAM 角色的更多信息,请参阅 Amazon EKS 节点 IAM 角色。
配置 Worker 节点的身份验证
选择以下方法之一来配置身份验证:
使用访问条目
访问条目是向 Worker 节点授予集群访问权限的推荐方法。
- 打开 Amazon EKS 控制台。
- 在导航窗格中,选择 Clusters(集群)。
- 选择您的集群。
- 选择 Access(访问)选项卡。
- 在 Access entries(访问条目)部分中,验证是否存在 Worker 节点 IAM 角色 ARN 的条目。
- 如果不存在条目,请选择 Create access entry(创建访问条目)。
- 对于 IAM principal ARN(IAM 主体 ARN),输入您的 Worker 节点 IAM 角色 ARN,而非实例配置文件 ARN。
- 对于 Type(类型),请根据您的节点类型选择 EC2 Linux 或 EC2 Windows。
- 选择 Next(下一步),然后选择 Create(创建)。
有关访问条目的更多信息,请参阅使用 EKS 访问条目授予 IAM 用户对 Kubernetes 的访问权限。
使用 aws-auth ConfigMap
如果您的集群不支持访问条目,请使用 aws-auth ConfigMap 方法。
有关 aws-auth ConfigMap 的更多信息,请参阅使用 ConfigMap 授予 IAM 用户对 Kubernetes 的访问权限。
验证用户数据配置
对于自行管理的节点,请验证用户数据是否包含正确的集群名称和配置。
用户数据必须包含带有集群名称的引导脚本:
#!/bin/bash /etc/eks/bootstrap.sh my-cluster
**注意:**请将 my-cluster 替换为您实际的集群名称。
有关引导脚本配置的更多信息,请参阅节点引导。
检查网络连接
完成以下步骤:
- 验证 Worker 节点是否可以访问集群 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 控制台。
- 在导航窗格中,选择 Roles(角色)。
- 搜索您的集群 IAM 角色。
- 选择该角色。
- 选择 Trust relationships(信任关系)选项卡。
- 验证信任策略是否允许 eks.amazonaws.com 代入该角色。
- 选择 Permissions(权限)选项卡。
- 验证是否已附加 AmazonEKSClusterPolicy 托管策略。
查看 kubelet 日志
要查看 Worker 节点上的 kubelet 日志:
-
使用 SSH 或 Systems Manager 会话管理器连接到您的 Worker 节点。
-
运行以下命令:
sudo journalctl -u kubelet -f -
查找指明节点无法加入集群原因的错误消息。
验证是否已激活 AWS STS 端点
确认您账户所在 AWS 区域的 AWS STS 端点已激活。
有关激活 STS 端点的更多信息,请参阅在 AWS 区域中激活和停用 AWS STS。
检查 VPC 和子网标签
完成以下步骤:
- 打开 Amazon VPC 控制台。
- 在导航窗格中,选择 Subnets(子网)。
- 选择部署 Worker 节点的子网。
- 选择 Tags(标签)选项卡。
- 验证是否存在以下标签:
Key(键):kubernetes.io/cluster/my-cluster
Value(值):shared 或 owned
**注意:**请将 my-cluster 替换为您实际的集群名称。

