无法在亚马逊 EKS 集群中执行 kubectl 顶级节点

Can't execute kubectl top nodes in amazon EKS cluster

场景重现简单:

  1. 使用 Role TempAdmin 创建 eks 集群(我们遵循 this documentation
  2. 使用 TempAdmin 配置我的凭据,我可以这样做:
    kubectl top nodes
  1. documentation 表示创建集群的 user/rol 被自动授予 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"}

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

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

文档有些地方有点旧,在 configmaps 中明确说明总是好的。这至少是我通常尝试遵循的事情。

我很高兴你成功了。 :)