我正在使用来自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。
对于
之类的命令,我收到403kubectl apply
kubectl delete
kubectl edit
用于配置映射。有帮助吗?
答案 0 :(得分:0)
在这种情况下,我找到了kubectl
返回403的原因。
根据此doc,在集群的system:masters
配置中,创建集群的用户/角色将获得RBAC
权限
当我尝试为ConfigMap
创建一个aws-auth
来加入工作节点时,我给了创建集群的角色/用户ARN,而不是工作节点的ARN。
它用system:masters
中的system:bootstrappers
和system:nodes
组更新了管理员组(RBAC
),基本上锁定了管理员本人。由于管理员已失去组system:masters
的特权,因此无法恢复。