You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s命名空间管理员如何配置权限让开发者可使用kubectl top pods命令

根因说明

kubectl top pods 命令运行时需要两个权限支撑:

  1. 对应命名空间下 metrics.k8s.io/pods 资源的读权限,用于拉取Pod的实际监控数据
  2. 集群级 nodes 资源的读权限,用于计算Pod资源占节点总容量的百分比数值
    你当前的命名空间级admin权限默认没有包含metrics API组的访问规则,也没有集群级节点的读权限,因此无法正常执行命令。

可行解决方案

方案一:最小权限授予(推荐,无敏感风险)

仅授予租户必要的权限,不暴露额外集群资源:

  1. 首先在租户命名空间下补充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
  1. 全局创建仅允许读取节点基础信息的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:36:02