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

无法使用更新了 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 已创建

然后我明白了配置的角色 ARNaws-auth-cm.yaml是错误的。因此,我用确切的工作节点角色 ARN 更新了同一个文件。

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

它又回来了

来自服务器的错误(禁止):检索当前配置时出错:资源:“/ v1,Resource = configmaps”,GroupVersionKind:“/ v1,Kind = ConfigMap”名称:“aws-auth”,命名空间:“kube-system”对象:&{map [“apiVersion”:“v1”“data”:map [“mapRoles”:“-rolearn:arn:aws:iam :: XXXXXXXXX:role / worker-node-role \ n用户名:system:node:{{EC2PrivateDNSName}} \ n组:\ n - system:bootstrappers \ n - system:nodes \ n“]”kind“:”ConfigMap“”metadata“:map [“name”:“aws-auth”“namespace”:“kube-system”“annotations”:map [“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 组“”中获取资源“configmaps”

此步骤之后我无法重新配置 ConfigMap。

我执行类似命令时遇到 403 错误

kubectl apply
kubectl delete
kubectl edit 

用于配置图。有什么帮助吗?

答案1

kubectl我找到了此场景返回 403 的原因。

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

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

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

相关内容