- 创建管理员 ServiceAccount
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
EOF
- 授予集群管理员权限
方案A:直接绑定集群管理员角色(测试环境)
kubectl create clusterrolebinding admin-user \
--clusterrole=cluster-admin \
--serviceaccount=kubernetes-dashboard:admin-user
方案B:精细化权限(生产环境推荐)
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: dashboard-admin
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
- nonResourceURLs: ["*"]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dashboard-admin-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: dashboard-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF
- 获取访问 Token
Kubernetes v1.24+ 版本(自动生成临时 Token):
kubectl -n kubernetes-dashboard create token admin-user \
--duration=8760h # 1年有效期(生产环境建议缩短)
旧版本(通过 Secret 获取),获取 Token(适用于 v1.23 及以下)
kubectl -n kubernetes-dashboard get secret \
$(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") \
-o go-template="{{.data.token | base64decode}}"
- 访问 Dashboard
方式一:kubectl proxy(本地访问)
# 访问地址:http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
方式二:NodePort(临时测试)
kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard \
-p '{"spec":{"type":"NodePort","ports":[{"port":443,"nodePort":30443}]}}'
# 访问地址:https://<节点IP>:30443
方式三:Ingress(生产环境)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: dashboard-ingress
namespace: kubernetes-dashboard
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
ingressClassName: nginx
rules:
- host: dashboard.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 443
登录 Dashboard
选择 Token 登录方式:
粘贴之前获取的 Token
点击登录即可获得管理员权限权限验证
kubectl auth can-i --list \
--as=system:serviceaccount:kubernetes-dashboard:admin-user ## 该返回YES
测试资源访问
kubectl get nodes \
--as=system:serviceaccount:kubernetes-dashboard:admin-user
- 安全建议(生产环境必做)
限制 Token 有效期:
kubectl -n kubernetes-dashboard create token admin-user --duration=2h
启用审计日志:
kubectl create -f - <<EOF
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata
namespaces: ["kubernetes-dashboard"]
EOF
配置 OIDC 集成(替代 Token 登录):
# 在 Dashboard 部署中添加启动参数
args:
- --oidc-issuer-url=https://your-oidc-provider.com
- --oidc-client-id=your-client-id
- --oidc-groups-claim=groups
故障排查
如果登录后看不到资源:
检查 Token 是否过期
验证 ClusterRoleBinding 是否存在:
kubectl get clusterrolebindings -o wide | grep admin-user
检查 API Server 日志:
kubectl logs -n kube-system kube-apiserver-<node-name> | grep "Forbidden"
通过以上步骤,您将创建一个具有完整权限的 Dashboard 管理员账户。生产环境请务必选择方案B的精细化权限控制,并定期轮换 Token。