我的 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 启动模板,请完成以下步骤:
- 打开 EKS 控制台。
- 选择包含要更新的节点组的集群。
- 选择 Configuration(配置)选项卡,然后选择 Compute(计算)选项卡。
- 在启动模板下面的节点组页面中,选择 Change version(更改版本)。
- 选择要应用到节点组的版本。确保更新策略已设置为滚动更新。
- 选择 Update(更新)。
**注意:**最佳做法是使用新版本的 EC2 启动模板更新节点组。
如果您尚未使用自定义启动模板,但收到了 Ec2LaunchTemplateVersionMismatch 错误,则说明您的 Worker 节点使用的版本与 EKS 节点组不同。要解决此问题,请转到 Auto Scaling 控制台以恢复到 EKS 创建的版本。有关更多信息,请参阅托管节点组错误。