我正在使用 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:bootstrappers
,system:nodes
其中RBAC
基本上锁定了管理员本人。并且由于管理员已失去组的权限,因此无法恢复system:masters
。