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

本地kubectl执行get namespace报namespaces is forbidden错误的解决

解决Kubectl集群级Namespaces列表权限问题

首先得搞清楚报错的根源:你复制到本地的kubelet.conf对应的是节点kubelet的身份(system:node:mildevkub020),这个身份默认只拥有和节点运维相关的权限,完全没有集群级别的Namespaces查看权限,所以K8s API服务器直接返回了Forbidden错误。

下面给你两种解决方案,按需选择:

方案一:自定义最小只读权限(仅允许查看Namespaces)

这个方案遵循最小权限原则,只授予你需要的权限,操作需要在有权限的集群主节点上执行:

  1. 创建一个ClusterRole,定义“查看Namespaces”的权限,新建namespace-reader-role.yaml文件:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: namespace-reader
rules:
- apiGroups: [""]  # 空字符串代表核心API组
  resources: ["namespaces"]
  verbs: ["list", "get"]  # 允许列表和查看单个Namespace详情
  1. 应用这个ClusterRole:
kubectl apply -f namespace-reader-role.yaml
  1. 创建ClusterRoleBinding,把这个角色绑定到你的节点用户:
    新建bind-namespace-reader.yaml文件:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: node-user-namespace-reader
subjects:
- kind: User
  name: system:node:mildevkub020
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: namespace-reader
  apiGroup: rbac.authorization.k8s.io
  1. 应用绑定:
kubectl apply -f bind-namespace-reader.yaml

方案二:绑定现成只读ClusterRole(快速获取更多权限)

如果你不止需要查看Namespaces,还想访问其他集群资源(比如Pods、Deployments等),可以直接绑定K8s内置的view ClusterRole,这个角色包含了大部分资源的只读权限:

在主节点执行这条命令即可:

kubectl create clusterrolebinding node-user-view-access --clusterrole=view --user=system:node:mildevkub020

验证效果

回到本地终端,重新执行:

kubectl get namespaces

这时候应该就能正常输出所有Namespaces列表了。

如果之后需要调整权限,比如收回或新增权限,直接修改对应的ClusterRole或者ClusterRoleBinding即可~

内容的提问来源于stack exchange,提问作者Mr.DevEng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:04:56