问题描述
在使用 kops 1.22.6 向他的 AWS Kubernetes 集群添加新节点时遇到了问题。他希望新节点能够使用自定义的 IAM 角色,而不是像其他集群节点那样使用通用的 IAM 角色,这是通过之前的 kops 版本(1.16)的配置成功实现的。他在配置中使用了类似于以下的 YAML 配置:
iam:
profile: arn:aws:iam::1111111:instance-profile/my-custom-role
然而,当升级到最新的 kops 版本(1.22.6)后,他遇到了问题。他在节点配置中仍然使用了相同的 YAML,但却收到了以下错误:
Oct 14 10:12:58 ip-10-103-71-131 nodeup[14374]: W1014 10:12:58.617887 14374 executor.go:139] error running task "BootstrapClientTask/BootstrapClient" (5m50s remaining to succeed): bootstrap returned status code 403: failed to verify token: arn "arn:aws:sts::1111111:assumed-role/my-custom-role/i-01463a31fc9ac51b2". does not contain acceptable node role
用户希望解决这个问题并能够在 kops 1.22.6 版本中为新节点分配自定义的 IAM 角色。
解决方案
请注意以下操作可能涉及版本差异,请在执行操作前进行适当的备份。
使用 Node IAM 角色的限制
首先,让我们理解一下 kops 中关于节点 IAM 角色的一些限制。在 Kubernetes 集群中,节点 IAM 角色用于授予节点访问 AWS 资源的权限。在 kops 1.22+ 版本中,节点 IAM 角色需要满足一些要求:
- 节点 IAM 角色必须有一个显式的
ec2.amazonaws.com
的信任关系。 - 节点 IAM 角色的信任关系中需要包含
EKS-optimized
或kops.amazonaws.com
。
如果你的节点 IAM 角色不满足这些要求,将导致节点无法正确地与 AWS 服务进行交互,从而出现类似于 “does not contain acceptable node role” 的错误。
解决方案步骤
以下是解决该问题的步骤:
- 更新节点 IAM 角色的信任关系:为了确保节点 IAM 角色满足 kops 1.22+ 的要求,你需要在节点 IAM 角色的信任关系中添加必要的条目。这将确保节点 IAM 角色能够被 kops 正确识别。你可以使用 AWS IAM 控制台或 AWS CLI 来更新节点 IAM 角色的信任关系。
示例:
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com",
"AWS": "arn:aws:iam::1111111:root" // 替换为你的 AWS 账号 ID
},
"Action": "sts:AssumeRole"
},
// 添加 kops 所需的信任关系条目
]
}
- 更新节点配置:在你的 kops 配置中,确保你正确指定了节点 IAM 角色的 ARN,以及其他必要的配置。例如:
yaml
iam:
profile: arn:aws:iam::1111111:instance-profile/my-custom-role
- 更新 kops 版本:尽可能使用 kops 最新的稳定版本。kops 团队可能已经对特定版本的问题进行了修复。
请注意,根据你的具体环境和配置,可能还需要进行其他调整和检查。确保遵循 kops 的文档和最佳实践来配置节点 IAM 角色以及其他相关配置。
总结
在 kops 1.22+ 版本中,为 Kubernetes 节点分配自定义 IAM 角色需要满足特定的要求,包括更新节点 IAM 角色的信任关系。通过更新节点 IAM 角色的配置,并确保正确的信任关系,你可以解决类似于 “does not contain acceptable node role” 的错误,并在 kops 1.22.6 版本中成功为新节点分配自定义的 IAM 角色。