作为Kubernetes生态中最常用的可视化管理工具,Dashboard面板的部署是每个云原生工程师的必修课。今天我将分享一套经过生产环境验证的部署方案,包含完整的安装流程、访问配置和常见问题解决方案。
Helm作为Kubernetes的包管理工具,相比直接使用YAML文件部署Dashboard有以下优势:
提示:生产环境建议使用Helm 3.x版本,它不再需要Tiller服务,安全性更高
在开始部署前,请确保满足以下条件:
helm version)由于Dashboard需要访问Kubernetes API,需要确认:
bash复制kubectl get pod -n kube-system -l component=kube-apiserver
kubectl get endpoints kubernetes
如果集群使用NetworkPolicy,需要确保允许以下通信:
首先添加官方Dashboard仓库并更新索引:
bash复制helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
helm repo update
验证仓库添加成功:
bash复制helm search repo kubernetes-dashboard
预期输出应包含kubernetes-dashboard/kubernetes-dashboard条目
使用NodePort方式部署到独立命名空间:
bash复制helm install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \
--namespace kubernetes-dashboard \
--create-namespace \
--set service.type=NodePort
关键参数说明:
--create-namespace:自动创建不存在的命名空间service.type=NodePort:通过节点端口暴露服务检查Pod启动情况(需等待2-5分钟):
bash复制kubectl get pods -n kubernetes-dashboard -w
正常状态应显示所有Pod为Running:
code复制NAME READY STATUS RESTARTS AGE
kubernetes-dashboard-7c4f6b9c58-2h4xk 1/1 Running 0 2m
metrics-scraper-64bcc67c9d-8xv4p 1/1 Running 0 2m
bash复制kubectl port-forward -n kubernetes-dashboard \
svc/kubernetes-dashboard 8443:443 --address 0.0.0.0
访问:https://localhost:8443
获取分配的节点端口:
bash复制kubectl get svc -n kubernetes-dashboard
输出示例:
code复制NAME TYPE CLUSTER-IP PORT(S) AGE
kubernetes-dashboard NodePort 10.96.123.123 443:32443/TCP 5m
访问:https://<节点IP>:32443
创建dashboard-admin.yaml:
yaml复制apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
应用配置:
bash复制kubectl apply -f dashboard-admin.yaml
获取管理员token:
bash复制kubectl -n kubernetes-dashboard create token admin-user
复制输出的token内容,在登录界面选择"Token"方式粘贴使用。
典型报错:
code复制ImagePullBackOff
ErrImagePull
解决方案:
bash复制docker pull kubernetesui/dashboard:v2.7.0
docker pull kubernetesui/metrics-scraper:v1.0.8
bash复制helm upgrade kubernetes-dashboard \
--set image.repository=registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard \
--set metricsScraper.image.repository=registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper
访问时浏览器提示证书不安全,解决方法:
bash复制openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout dashboard.key -out dashboard.crt -subj "/CN=dashboard.local"
bash复制helm upgrade kubernetes-dashboard \
--set ingress.tls[0].secretName=dashboard-tls \
--set ingress.tls[0].hosts[0]=dashboard.local
即使使用admin账户仍提示权限不足,检查:
bash复制kubectl api-versions | grep rbac
bash复制kubectl get clusterrolebinding admin-user -o yaml
推荐使用Ingress配合域名访问:
bash复制helm upgrade kubernetes-dashboard \
--set ingress.enabled=true \
--set ingress.hosts[0]=dashboard.yourdomain.com \
--set service.type=ClusterIP
启用metrics-scraper数据持久化:
bash复制helm upgrade kubernetes-dashboard \
--set metricsScraper.persistence.enabled=true \
--set metricsScraper.persistence.size=1Gi
设置合理的资源限制:
bash复制helm upgrade kubernetes-dashboard \
--set resources.limits.cpu=500m \
--set resources.limits.memory=512Mi \
--set metricsScraper.resources.limits.cpu=200m \
--set metricsScraper.resources.limits.memory=256Mi
配置15分钟无操作自动注销:
bash复制helm upgrade kubernetes-dashboard \
--set extraArgs[0]="--token-ttl=900"
启用操作审计:
bash复制helm upgrade kubernetes-dashboard \
--set auditLog.enabled=true \
--set auditLog.volume.size=1Gi
限制Dashboard服务访问:
yaml复制apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: dashboard-policy
namespace: kubernetes-dashboard
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: kubernetes-dashboard
ingress:
- from:
- namespaceSelector:
matchLabels:
name: kube-system
ports:
- protocol: TCP
port: 8443
bash复制helm search repo kubernetes-dashboard --versions
bash复制helm upgrade kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \
--version 6.0.0 \
-n kubernetes-dashboard
查看历史:
bash复制helm history kubernetes-dashboard -n kubernetes-dashboard
回滚到指定版本:
bash复制helm rollback kubernetes-dashboard 1 -n kubernetes-dashboard
我在生产环境部署Dashboard时发现,合理配置资源限制和网络策略可以显著提高安全性。建议至少每季度检查一次版本更新,及时修复已知漏洞。对于关键业务集群,可以考虑部署多副本Dashboard实例以提高可用性。