【问题标题】:Can't execute kubectl top nodes in amazon EKS cluster无法在亚马逊 EKS 集群中执行 kubectl 顶级节点
【发布时间】:2019-08-10 02:43:27
【问题描述】:

场景很容易重现:

  1. 使用角色 TempAdmin 创建 eks 集群(我们关注 this documentation
  2. 使用 TempAdmin 配置我的凭据,我可以:
    kubectl top nodes
  1. documentation 表示创建集群的用户/角色被自动授予 system:masters 权限。创建一个新角色(管理员)并向该角色授予 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. 现在,将我的凭据配置为使用管理员角色,我可以几乎做任何事情:我可以创建命名空间、编辑 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"}

【问题讨论】:

  • 您是否部署了指标服务器?
  • 是的。使用原始角色 (TempAdmin) 我可以做到kubectl top nodes。在system:masters 组中担任新角色时,我收到了该错误
  • 您是否尝试添加用户名字段并查看是否可以解决问题? IE。用户名:新管理员。
  • 我们在该帐户中没有用户,我们只有角色。虽然我可以尝试创建一个用户来测试它,但我们不会在该帐户中拥有用户。
  • 添加 arn:aws:iam::xxxxxxxxxxxx:role/Admin 作为用户名值有效。您要发布答案以便我接受吗?文档说“用户名:Kubernetes 中映射到 IAM 角色的用户名。默认情况下,用户名是 IAM 角色的 ARN。”猜猜这并不总是正确的:P

标签: amazon-eks


【解决方案1】:

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

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

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

我很高兴你设法让它工作。 :)

【讨论】:

    猜你喜欢
    • 2016-10-04
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2020-08-13
    • 2011-11-13
    相关资源
    最近更新 更多