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

在test命名空间部署Kubernetes Dashboard v1.8.3遇权限报错求助

解决Kubernetes Dashboard v1.8.3跨命名空间部署的权限报错问题

这个问题我之前帮同事排查过,本质是v1.8.3版本的Dashboard代码里硬编码了kube-system命名空间——它会默认尝试把加密密钥用的kubernetes-dashboard-key-holder Secret创建在kube-system下,哪怕你把所有Dashboard资源都部署到了test命名空间,这个逻辑也不会自动跟着改,所以才会触发跨命名空间的权限拒绝错误。

下面给你两个可行的解决方案,按需选择:

方案一:给Dashboard服务账号授权kube-system的Secret操作权限

直接给test命名空间下的dashboard服务账号添加在kube-system里创建、管理指定Secret的权限,这样它就能正常完成密钥存储了。

方式1:快速授权(用现成的edit角色)

执行这条命令,直接绑定权限:

kubectl create rolebinding dashboard-kube-system-secret-access --clusterrole=edit --serviceaccount=test:dashboard --namespace=kube-system

方式2:精细化权限(更安全)

如果你不想给太宽泛的权限,可以创建一个仅允许操作kubernetes-dashboard-key-holder Secret的角色,然后绑定:
创建一个dashboard-secret-rbac.yaml文件,内容如下:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: dashboard-kube-system-secret-manager
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["create", "get", "update", "delete"]
  resourceNames: ["kubernetes-dashboard-key-holder"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: dashboard-kube-system-secret-binding
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: dashboard-kube-system-secret-manager
subjects:
- kind: ServiceAccount
  name: dashboard
  namespace: test

然后应用这个配置:

kubectl apply -f dashboard-secret-rbac.yaml

方案二:修改Dashboard启动参数,指定密钥存储的命名空间

另一种更彻底的办法是让Dashboard把密钥存在test命名空间里,不需要跨权限。你只需要修改Deployment的启动命令,添加一个参数指定密钥的命名空间:

  1. 编辑test命名空间下的Dashboard Deployment:
kubectl edit deployment kubernetes-dashboard -n test
  1. 找到spec.template.spec.containers[0].command部分,添加--secret-namespace=test参数,修改后类似这样:
spec:
  template:
    spec:
      containers:
      - name: kubernetes-dashboard
        image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
        command:
        - /dashboard
        - --secret-namespace=test  # 新增这一行
        # 其他原有参数保持不变
  1. 保存退出后,Kubernetes会自动重建Pod,新的Pod就会在test命名空间创建和使用kubernetes-dashboard-key-holder Secret,不会再访问kube-system了。

验证解决方案

不管选哪个方案,最后都可以通过以下命令验证:

  • 检查Pod是否正常运行:
kubectl get pods -n test
  • 检查对应的Secret是否创建成功:
kubectl get secrets -n test | grep kubernetes-dashboard-key-holder

内容的提问来源于stack exchange,提问作者user1578872

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:50:29