如何解决 Amazon EKS 集群中的托管节点组错误?

上次更新日期:2021 年 11 月 15 日

我的 Amazon Elastic Kubernetes Service (Amazon EKS) 集群中的托管节点组存在问题。

简短描述

在 API 服务器中注册节点时收到错误消息。

如果您在自定义 DNS 中使用不正确的 DHCP 选项,则会收到以下错误消息:

Node "ip-x-x-x-x.eu-region.compute.internal" is invalid: metadata.labels: Invalid value

要解决此问题,请完成解决方案检查 DHCP 选项部分的步骤。

当您通过使用 KMS 密钥加密的 Amazon Elastic Block Store (Amazon EBS) 卷启动 Auto Scaling 组中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例时,将会收到错误消息。

示例错误:

AccessDeniedException: User: arn:aws:sts::xxxxxxxxxxxx:assumed-role/AWSServiceRoleForAutoScaling/AutoScaling is not authorized to perform: kms:GenerateDataKeyWithoutPlaintext on resource: ARN of KMS key

如果托管节点使用通过 KMS 密钥加密的 Amazon EBS 卷,则 Auto Scaling 组服务角色无权访问该卷。要设置密钥策略,请参阅解决方案配置 EBS 卷加密的密钥策略

您的托管节点组处于降级状态,因为 EC2 启动模板版本与 Amazon EKS 创建的版本不匹配。

如果直接从 Auto Scaling 组手动更新启动模板,则您将会收到以下错误消息:

Ec2LaunchTemplateVersionMismatch

要解决此问题,请完成解决方案更新启动模板版本部分的步骤。

有关托管节点组中失败节点的其他解决方案信息,请参阅如何让 Worker 节点加入 Amazon EKS 集群?

解决方法

检查 DHCP 选项

验证主机名中包含的字符数是否不超过 63 个。要查看 DHCP 选项,请参阅使用 DHCP 选项集

指定与 AWS 区域匹配的主机名。对于 us-east-1 中的 AmazonProvidedDNS 服务器,请指定 ec2.internal。对于其他 AWS 区域中的 AmazonProvidedDNS 服务器,请指定 region.compute.internal

us-east-1 中的 DHCP 选项集示例:

domain-name: ec2.internal
domain-name-servers: AmazonProvidedDNS

其他区域中的 DHCP 选项集示例:

domain-name: region name.compute.internal
domain-name-servers: AmazonProvidedDNS

自定义 DNS 中的 DHCP 选项集示例:

domain-name:custom DNS name
domain-name-servers: domain name server

注意:请将区域名称替换为您所在的区域、将自定义 DNS 名称替换为您的 DNS 名称并将域名服务器替换为您的域名服务器。

有关更多信息,请参阅 DHCP 选项集概览中的域名部分。

注意:如果 DHCP 选项集与实例具有多个操作系统的 VPC 关联,则最好仅指定一个域名。

为 EBS 卷加密配置密钥策略

Auto Scaling 组服务角色必须拥有以下权限才能使用加密的 EBS 卷:

  • kms:Encrypt
  • kms:Decrypt
  • kms:ReEncrypt*
  • kms:GenerateDataKey*
  • kms:DescribeKey
  • kms:CreateGrant

要配置正确的 KMS 密钥策略,请参阅与加密卷搭配使用所需的 AWS KMS 密钥策略

要允许更多 IAM 角色使用加密 EBS 卷,您可以修改密钥策略。有关更多信息,请参阅允许密钥用户使用 KMS 密钥

有关 KMS 密钥访问管理的更多信息,请参阅管理 KMS 密钥的访问

更新启动模板版本

注意:从托管节点组更新 EC2 启动模板之前,请创建一个新版本。有关更多信息,请参阅使用定义的参数创建新的启动模板

要从托管节点组更新 EC2 启动模板,请完成以下步骤:

  1. 打开 EKS 控制台
  2. 选择包含要更新的节点组的集群。
  3. 选择 Configuration(配置)选项卡,然后选择 Compute(计算)选项卡。
  4. 在启动模板下面的节点组页面中,选择 Change version(更改版本)。
  5. 选择要应用到节点组的版本。确保更新策略已设置为滚动更新
  6. 选择 Update(更新)。

注意:最佳做法是使用新版本的 EC2 启动模板更新节点组。

如果您尚未使用自定义启动模板,但收到了 Ec2LaunchTemplateVersionMismatch 错误,则说明您的 Worker 节点使用的版本与 EKS 节点组不同。要解决此问题,请转到 Auto Scaling 控制台以恢复到 EKS 创建的版本。有关更多信息,请参阅托管节点组错误


这篇文章对您有帮助吗?


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