K8s命名空间管理员如何配置权限让开发者可使用kubectl top pods命令
根因说明
kubectl top pods 命令运行时需要两个权限支撑:
- 对应命名空间下
metrics.k8s.io/pods资源的读权限,用于拉取Pod的实际监控数据 - 集群级
nodes资源的读权限,用于计算Pod资源占节点总容量的百分比数值
你当前的命名空间级admin权限默认没有包含metrics API组的访问规则,也没有集群级节点的读权限,因此无法正常执行命令。
可行解决方案
方案一:最小权限授予(推荐,无敏感风险)
仅授予租户必要的权限,不暴露额外集群资源:
- 首先在租户命名空间下补充Pod metrics的读权限:
# dev-namespace 下的 Role 配置 apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: dev-namespace name: pod-metrics-reader rules: - apiGroups: ["metrics.k8s.io"] resources: ["pods"] verbs: ["get", "list", "watch"] --- # 绑定到对应用户 apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: pod-metrics-reader-binding namespace: dev-namespace roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: pod-metrics-reader subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: username@domain
- 全局创建仅允许读取节点基础信息的ClusterRole,绑定给所有租户用户:
这个权限仅允许查看节点的名称、总容量等非敏感元数据,无法修改节点配置也无法查看其他租户的 workload 信息,风险极低。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: node-basic-reader rules: - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] --- # 绑定到目标用户,多租户可批量绑定给租户用户组 apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: node-basic-reader-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: node-basic-reader subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: username@domain
配置完成后租户即可正常执行kubectl top pods --namespace dev-namespace命令。
方案二:零集群级权限方案
如果完全不想授予任何集群级权限,可以直接调用metrics API拉取数据,不需要节点读权限:
kubectl get --raw /apis/metrics.k8s.io/v1/namespaces/dev-namespace/pods
返回的JSON数据中直接包含了对应命名空间下所有Pod的CPU、内存实际使用值,配合jq工具做格式化输出即可得到和kubectl top一致的效果。
内容的提问来源于stack exchange,提问作者Paku
相关产品推荐
相关产品推荐

