作为 Kubernetes 集群的官方 Web UI,Dashboard 提供了可视化方式管理集群资源的能力。我在生产环境中部署过二十余次 Dashboard,发现它特别适合以下场景:
最新版 Dashboard (v2.7.0) 需要 Kubernetes 1.24+ 版本支持,如果你的集群版本较旧,建议先升级或使用兼容版本。下面这张对比表列出了不同 Kubernetes 版本对应的 Dashboard 版本选择:
| Kubernetes 版本 | 推荐 Dashboard 版本 | 主要差异点 |
|---|---|---|
| 1.24+ | 2.7.x | 支持 TokenReview API |
| 1.20-1.23 | 2.5.x | 兼容旧的 metrics 接口 |
| 1.16-1.19 | 2.0.x | 需额外部署 metrics-server |
在开始部署前,建议先运行以下命令检查集群状态:
bash复制kubectl get nodes
kubectl cluster-info
我曾遇到过因为节点 NotReady 导致 Dashboard 无法启动的情况。典型问题包括:
Dashboard 默认使用自签名证书,生产环境建议替换为正规 CA 签发的证书。通过这个命令可以检查现有证书:
bash复制kubectl get secret kubernetes-dashboard-certs -n kubernetes-dashboard
如果需要自定义证书,创建 secret 的完整流程如下:
bash复制kubectl create secret tls dashboard-tls \
--cert=tls.crt \
--key=tls.key \
-n kubernetes-dashboard
使用以下命令部署最新版 Dashboard:
bash复制kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
这个 yaml 文件包含以下关键组件:
重要提示:默认配置下 Dashboard 仅监听集群内网(ClusterIP),如需从外部访问需要修改 Service 类型为 NodePort 或 LoadBalancer
修改 service 配置的典型命令:
bash复制kubectl patch svc kubernetes-dashboard \
-n kubernetes-dashboard \
-p '{"spec":{"type":"NodePort","ports":[{"port":443,"targetPort":8443,"nodePort":30443}]}}'
安全建议:
以下是 Nginx Ingress 的典型配置:
yaml复制apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: dashboard-ingress
namespace: kubernetes-dashboard
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
tls:
- hosts:
- dashboard.example.com
secretName: dashboard-tls
rules:
- host: dashboard.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 443
推荐使用以下模版创建受限权限的 admin 用户:
yaml复制apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dashboard-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kubernetes-dashboard
获取 token 的命令:
bash复制kubectl -n kubernetes-dashboard \
create token dashboard-admin \
--duration=8760h
当出现 "forbidden" 错误时,按以下步骤检查:
可以通过这个命令验证权限:
bash复制kubectl auth can-i create deployments --as=system:serviceaccount:kubernetes-dashboard:dashboard-admin
生产环境建议配置资源限制,避免 Dashboard 占用过多资源:
yaml复制resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "512Mi"
通过 configmap 可以修改界面语言、主题等设置:
bash复制kubectl edit cm kubernetes-dashboard-settings -n kubernetes-dashboard
可调整参数包括:
限制只允许特定命名空间访问 Dashboard:
yaml复制apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: dashboard-access
namespace: kubernetes-dashboard
spec:
podSelector:
matchLabels:
k8s-app: kubernetes-dashboard
ingress:
- from:
- namespaceSelector:
matchLabels:
name: allowed-namespace
启用访问日志记录:
bash复制kubectl logs deploy/kubernetes-dashboard -n kubernetes-dashboard
建议配合 fluentd 或 filebeat 收集以下日志:
| 错误代码 | 可能原因 | 解决方案 |
|---|---|---|
| 503 | metrics-server 未运行 | 部署 metrics-server |
| 401 | token 过期或无效 | 重新生成 token |
| 403 | 权限不足 | 检查 RoleBinding |
当 Dashboard 响应缓慢时:
可以通过这个命令测试响应时间:
bash复制time curl -k -H "Authorization: Bearer <TOKEN>" https://<DASHBOARD-URL>/api/v1/pod
升级 Dashboard 的标准流程:
bash复制kubectl get deploy kubernetes-dashboard \
-n kubernetes-dashboard \
-o yaml > dashboard-backup.yaml
bash复制kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
升级后常见问题:新版可能弃用某些 API,需要检查控制台日志中的 deprecated 警告