如何将 Worker 节点加入 Amazon EKS 集群?

上次更新日期:2021 年 12 月 2 日

我的 Worker 节点无法加入 Amazon Elastic Kubernetes Service (Amazon EKS) 集群。

简短描述

要将 Worker 节点加入 Amazon EKS 集群,您必须完成以下步骤:

  • 确认您的 Amazon Virtual Private Cloud (Amazon VPC) 支持 DNS。
  • 获取 Worker 节点实例配置文件的相应权限。
  • 配置 Worker 节点的用户数据。
  • 验证 Worker 节点是否在与 EKS 集群关联的子网中。
  • 使用 Worker 节点的 NodeInstanceRole 更新 aws-auth ConfigMap。
  • 满足 Worker 节点的安全组要求。
  • 为您的 Worker 节点设置标签。
  • 确认您的 Worker 节点可以到达 EKS 集群的 API 服务器端点。
  • 使用 SSH 连接到 EKS Worker 节点的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,然后在 kubelet 代理日志中搜索错误。

重要提示:以下步骤不包括在不满足以下条件的环境中,在 EKS 集群中注册 Worker 节点所需的配置:

  • 在 EKS 集群的 VPC 中,配置参数 domain-name-servers 设置为 AmazonProvidedDNS。有关更多信息,请参阅 DHCP 选项集
  • 您正在使用经过 Amazon EKS 优化的 Linux Amazon 系统映像 (AMI) 来启动工作线程节点。
    注意:经过 Amazon EKS 优化的 Linux AMI 提供了所有必要的配置,包括用于将工作线程节点注册到您的 Amazon EKS 集群的 /etc/eks/bootstrap.sh 引导脚本。

解决方法

确认您的 VPC 支持 DNS

确认您的 EKS 集群的 VPC 支持 DNS 主机名和 DNS 解析。

如果需要,请查看和更新您的 VPC 的 DNS 支持属性

获取工作线程节点实例配置文件的相应权限

将以下 AWS 管理策略附加到与您的工作线程节点实例配置文件关联的角色:

  • AmazonEKSWorkerNodePolicy
  • AmazonEKS_CNI_Policy
  • AmazonEC2ContainerRegistryReadOnly

要将策略附加到角色,请参阅添加 IAM 身份权限(控制台)

配置 Worker 节点的用户数据

注意:如果您使用 AWS CloudFormation 启动 Worker 节点,则不必为 Worker 节点配置用户数据。相反,请按照启动自我托管式 Amazon Linux 节点的“AWS 管理控制台”选项卡上的说明进行操作。

如果使用托管式节点组启动 Worker 节点,则无需使用 Amazon EKS 优化的 Amazon Linux AMI 配置任何用户数据。只有在使用自定义 AMI 通过托管式节点组启动 Worker 节点时,才能配置用户数据。

要为 Worker 节点配置用户数据,请在启动 Amazon EC2 实例时指定用户数据

例如,如果您使用的是 Terraform 等第三方工具,请更新用户数据字段以使用以下命令启动您的 EKS Worker 节点:

#!/bin/bash
set -o xtrace
/etc/eks/bootstrap.sh ${ClusterName} ${BootstrapArguments}

重要提示:${ClusterName} 替换为您的 EKS 集群的名称。将 ${BootstrapArguments} 替换为其他 Bootstrap 框架值,或将该属性留空。

验证 Worker 节点是否与 EKS 集群位于同一 VPC 中

1.    打开 Amazon EKS 控制台

2.    选择集群,然后选择您的集群。

3.    在联网部分中,确认与集群关联的子网。

注意:您可以配置不同的子网以在其中启动 Worker 节点。这些子网必须存在于同一 VPC 中,并进行适当标记。EKS 仅自动管理在集群创建期间配置的子网标签。因此,请确保正确标记子网。

使用 Worker 节点的 NodeInstanceRole 更新 aws-auth ConfigMap

验证是否使用 Worker 节点(而不是实例配置文件)的 AWS Identity and Access Management (IAM) 角色正确配置了 aws-auth ConfigMap。

满足 Worker 节点的安全组要求

确认已为控制面板安全组和 Worker 节点安全组配置了入站和出站流量的建议设置

此外,请确认您的自定义网络 ACL 规则已配置为允许进出端口 80,443 和 1025-65535 的“0.0.0.0/0”的流量。

为您的 Worker 节点设置标签

对于工作线程节点的标签属性,请将密钥设置为 kubernetes.io/cluster/clusterName,并将设置为 owned

如需更多信息,请参阅集群 VPC 注意事项

确认您的 Worker 节点可以到达 Amazon EKS 集群的 API 服务器端点

请考虑以下事项:

  • 您可以在与路由表关联的子网中启动 Worker 节点,该路由表具有通过 NAT 网关或互联网网关到 API 端点的路由。
  • 如果您的 Worker 节点是在受限制的私有网络中启动的,请确认您的 Worker 节点可以到达 EKS API 服务器端点。
  • 如果您将 Worker 节点作为使用自定义 DNS 而不是 AmazonProvidedDNS 的 VPC 的一部分启动,则可能无法解析端点。当停用对端点的公有访问并且仅激活私有访问时,会发生端点未解析的问题。有关更多信息,请参阅启用 Amazon EKS 集群端点的 DNS 解析
  • 对于私有集群,必须包含专用于私有集群的 VPC 终端节点。确保自我托管式和托管式节点可以访问 VPC 终端节点。对于托管式节点组,VPC 终端节点安全组必须允许子网或集群安全组的 CIDR。

使用 SSH 连接到您的 EKS Worker 节点实例并检查 kubelet 代理日志

kubelet 代理已配置为 systemd 服务。

1.    要验证 kubelet 日志,请运行以下命令:

journalctl -f -u kubelet

2.    要解决任何问题,请查看 Amazon EKS 故障排除指南以了解常见错误。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?