无法使用具有更新的 aws-auth 配置映射的 kubectl 加入工作线程节点



我正在使用来自 EC2 实例的 terraform 设置 AWS EKS 集群。基本上,设置包括工作线程节点的 EC2 启动配置和自动扩展。创建集群后,我能够使用 aws-iam-authenticator 配置 kubectl。当我这样做时

kubectl get nodes 

它返回了

未找到资源

因为工作节点未加入。所以我尝试更新aws-auth-cm.yaml文件

apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
- rolearn: <ARN of instance role (not instance profile)>
username: system:node:{{EC2PrivateDNSName}}
groups:
- system:bootstrappers
- system:nodes

使用工作线程节点的 IAM 角色 ARN。并做到了

kubectl apply -f aws-auth-cm.yaml

它返回了

已创建 ConfigMap/aws-auth

然后我明白了 ARN 在aws-auth-cm.yaml中配置的角色是错误的。因此,我使用确切的工作线程节点角色 ARN 更新了相同的文件。

但是这次我再次kubectl apply -f aws-auth-cm.yaml时得到了403。

它返回了

来自服务器的错误(禁止访问):检索当前时出错 配置:资源:"/v1,资源=配置映射", GroupVersionKind: "/v1, Kind=ConfigMap" 名称: "aws-auth", 命名空间: "kube-system" 对象: &{map["apiVersion":"v1" "data":map["mapRoles":"- rolearn: arn:aws:iam::XXXXXXXXX:role/worker-node-role 用户名: system:node:{{EC2PrivateDNSName}} groups: - 系统:引导程序 - 系统:节点"] "种类":"配置映射" "metadata":map["name":"aws-auth" "namespace":"kube-system" "注释":地图["kubectl.kubernetes.io/last-applied-configuration":"]]} 从服务器: "/home/username/aws-auth-cm.yaml": configmaps 禁止使用"aws-auth":用户 "system:node:ip-XXX-XX-XX-XX.ec2.internal"无法获取资源 命名空间"kube-system"中的API组"中的"配置映射">

在此步骤之后,我无法重新配置配置映射。

我得到 403 这样的命令

kubectl apply
kubectl delete
kubectl edit 

对于配置映射。有什么帮助吗?

我找到了在这种情况下kubectl返回 403 的原因。

根据此文档,创建群集的用户/角色将在群集的RBAC配置中system:masters权限

当我尝试为aws-auth创建加入工作节点的ConfigMap时,我提供了创建集群的角色/用户的 ARN,而不是工作节点的 ARN。

它用system:bootstrapperssystem:nodes组更新了管理员的组(system:mastersRBAC,这基本上锁定了管理员本人。并且由于管理员已失去组system:masters的权限,因此无法恢复。

最新更新