无法在Amazon EKS集群中执行kubectl顶级节点

时间:2019-08-08 13:53:13

标签: amazon-eks eks

该场景很容易复制:

  1. 使用角色TempAdmin创建eks集群(我们遵循this documentation
  2. 使用TempAdmin配置我的凭据,我可以这样做:
    kubectl top nodes
  1. documentation说,创建集群的用户/角色会自动授予system:masters权限。创建一个新角色(Admin)并向system:masters授予该角色的权限:
$ kubectl get configmap -n kube-system aws-auth -o yaml
apiVersion: v1
data:
  mapRoles: |
    - rolearn: arn:aws:iam::xxxxxxxxxxxx:role/EKS-Workers2-NodeInstanceRole-HWD4HSSO7NP1
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
    - rolearn: arn:aws:iam::xxxxxxxxxxxx:role/Admin
      groups:
        - system:masters
kind: ConfigMap
...
  1. 现在,配置我的凭据以使用Admin角色,我几乎可以做任何事情:我可以创建名称空间,编辑aws-auth configmap,获取节点。但是,当我尝试顶级节点时:
$ kubectl top nodes
Error from server (Forbidden): nodes.metrics.k8s.io is forbidden: User "system:anonymous" cannot list nodes.metrics.k8s.io at the cluster scope: no RBAC policy matched

广告信息:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.2", GitCommit:"cff46ab41ff0bb44d8584413b598ad8360ec1def", GitTreeState:"clean", BuildDate:"2019-01-10T23:35:51Z", GoVersion:"go1.11.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"12+", GitVersion:"v1.12.10-eks-2e569f", GitCommit:"2e569fd887357952e506846ed47fc30cc385409a", GitTreeState:"clean", BuildDate:"2019-07-25T23:13:33Z", GoVersion:"go1.10.8", Compiler:"gc", Platform:"linux/amd64"}

1 个答案:

答案 0 :(得分:2)

正如我在评论中提到的那样,解决方案是添加用户名,而不管您是在AWS中使用IAM角色还是使用IAM用户。必须在您的configmap中指定映射,否则将永远不会在kubernetes集群中创建用户名,因此不会将其映射到任何权限。

因此,您在mapRoles的新添加块中缺少用户名部分。

文档在某些地方有点老,在configmaps中明确显示总是很好。至少我通常会尝试这样做。

很高兴您设法使它成功。 :)

相关问题