无法使用带有更新的aws-auth configmap

时间:2019-06-07 12:03:58

标签: amazon-web-services kubernetes kubectl amazon-eks eks

我正在使用来自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已创建

然后,我知道在aws-auth-cm.yaml中配置的角色ARN是错误的角色。因此,我使用完全相同的工作节点角色ARN更新了同一文件。

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

它返回了

  

服务器错误(禁止):检索当前错误   资源的配置:“ / v1,资源= configmaps”,   GroupVersionKind:“ / v1,种类= ConfigMap”名称:“ aws-auth”,命名空间:   “ kube-system”对象:&{map [“ apiVersion”:“ v1”“ data”:map [“ mapRoles”:“-   角色:arn:aws:iam :: XXXXXXXXX:role / worker-node-role \ n用户名:   系统:节点:{{EC2PrivateDNSName}} \ n组:\ n-   system:bootstrappers \ n-system:nodes \ n“]” kind“:” ConfigMap“   “元数据”:map [“名称”:“ aws-auth”“名称空间”:“ kube-system”   “注释”:map [“ kubectl.kubernetes.io/last-applied-configuration”:“”]]]}}   从服务器获取:“ / home / username / aws-auth-cm.yaml”:configmaps   禁止“ aws-auth”:用户   “系统:节点:ip-XXX-XX-XX-XX.ec2.internal”无法获取资源   命名空间“ kube-system”中API组“”中的“ configmaps”

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

对于

之类的命令,我收到403
kubectl apply
kubectl delete
kubectl edit 

用于配置映射。有帮助吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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