Kubernetes Dashboard 部署与安全实践指南
1. Kubernetes Dashboard 概述与核心价值
Kubernetes Dashboard 是 Kubernetes 官方提供的 Web 用户界面,用于可视化管理和监控集群资源。作为 K8s 生态中最常用的管理工具之一,它允许用户通过图形化界面而非命令行执行以下核心操作:
- 查看集群中运行的应用程序概览
- 创建和修改单个 Kubernetes 资源(如部署、服务等)
- 获取集群资源使用情况的可视化图表
- 排查应用程序故障(日志查看、容器终端访问等)
注意:Dashboard 默认不包含身份认证机制,直接暴露在公网会带来严重安全风险。生产环境必须配置适当的访问控制。
实际运维中,Dashboard 特别适合以下场景:
- 开发人员快速查看应用状态而无需记忆 kubectl 命令
- 演示环境展示集群运行状况
- 教学场景直观呈现 K8s 对象关系
- 临时故障排查时的辅助工具
2. 部署前的环境准备
2.1 基础环境检查
在开始部署前,请确认您的 Kubernetes 集群满足以下条件:
# 检查集群版本(要求 v1.16+)
kubectl version --short
# 检查节点状态
kubectl get nodes
# 检查网络插件是否正常工作
kubectl get pods -n kube-system | grep -E 'coredns|calico|flannel'
常见问题排查:
- 如果 coredns 处于 Pending 状态,通常是网络插件未正确安装
- 节点 NotReady 可能表示 kubelet 服务异常或资源不足
- 旧版本 K8s 需要调整 Dashboard 的部署配置
2.2 资源配置要求
Dashboard 本身资源消耗较低,但根据集群规模需要预留适当资源:
| 集群规模 | 推荐配置 | 备注 |
|---|---|---|
| 测试环境 | 1核1GB | 可运行在 minikube 或单节点集群 |
| 中小规模 | 2核2GB | 50个以下节点/200个以下Pod |
| 大规模 | 4核4GB | 需要启用指标收集器 |
3. 标准部署流程详解
3.1 使用官方清单部署
推荐使用最新稳定版的官方部署清单:
# 部署 Dashboard 核心组件
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
这个清单会创建:
- dashboard 命名空间
- deployment 和 replicaSet 资源
- service account 和角色绑定
- 服务暴露(默认 ClusterIP 类型)
3.2 服务暴露方式选择
根据访问需求选择合适的服务类型:
-
ClusterIP(默认) :
kubectl -n kubernetes-dashboard get svc需要通过 kubectl proxy 访问:
kubectl proxy然后访问 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
-
NodePort :
kubectl -n kubernetes-dashboard patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}'查看分配的端口:
kubectl -n kubernetes-dashboard get svc -
LoadBalancer(云环境) :
kubectl -n kubernetes-dashboard patch svc kubernetes-dashboard -p '{"spec":{"type":"LoadBalancer"}}'
3.3 认证配置方案
3.3.1 令牌认证(推荐开发环境)
创建服务账号并获取令牌:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
EOF
cat <<EOF | kubectl apply -f -
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
EOF
# 获取访问令牌
kubectl -n kubernetes-dashboard create token admin-user
3.3.2 Kubeconfig 认证(生产环境推荐)
- 生成客户端证书
- 创建 kubeconfig 文件
- 在 Dashboard 登录界面选择 Kubeconfig 方式
4. 高级配置与优化
4.1 自定义证书配置
替换默认自签名证书:
# 生成新证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout dashboard.key -out dashboard.crt \
-subj "/CN=dashboard.example.com"
# 创建 secret
kubectl -n kubernetes-dashboard create secret tls dashboard-cert \
--key dashboard.key --cert dashboard.crt
# 更新部署使用新证书
kubectl -n kubernetes-dashboard edit deploy kubernetes-dashboard
在容器 spec 中添加:
args:
- --tls-cert-file=/tls.crt
- --tls-key-file=/tls.key
volumeMounts:
- mountPath: /tls.crt
name: cert
subPath: tls.crt
- mountPath: /tls.key
name: cert
subPath: tls.key
volumes:
- name: cert
secret:
secretName: dashboard-cert
4.2 资源限制与自动伸缩
建议为 Dashboard 设置资源限制:
resources:
limits:
cpu: "1"
memory: 512Mi
requests:
cpu: "0.5"
memory: 256Mi
启用水平自动伸缩(HPA):
kubectl -n kubernetes-dashboard autoscale deployment kubernetes-dashboard \
--cpu-percent=50 --min=1 --max=3
5. 安全加固实践
5.1 网络策略限制
仅允许特定 IP 或命名空间访问:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-dashboard
namespace: kubernetes-dashboard
spec:
podSelector:
matchLabels:
k8s-app: kubernetes-dashboard
ingress:
- from:
- namespaceSelector:
matchLabels:
name: allowed-namespace
- ipBlock:
cidr: 192.168.1.0/24
5.2 审计日志配置
启用 Dashboard 操作审计:
args:
- --audit-log-path=/var/log/dashboard-audit.log
- --audit-log-maxage=30
- --audit-log-maxbackup=5
- --audit-log-maxsize=100
6. 常见问题排查指南
6.1 访问被拒绝问题
错误现象:
Unauthorized: gateway token missing (open the dashboard url and paste the token)
解决方案:
- 确认使用的令牌未过期
- 检查服务账号的 RBAC 权限
- 验证 kube-apiserver 的认证配置
6.2 证书相关问题
错误现象:
NET::ERR_CERT_INVALID
解决方案:
- 导入自签名证书到浏览器信任库
- 或使用合法 CA 签发的证书
- 临时方案:在 Chrome 中输入 thisisunsafe 绕过警告(仅测试环境)
6.3 性能优化技巧
-
减少默认显示的资源数量:
args: - --items-per-page=50 -
禁用不需要的 API 资源:
args: - --disable-settings-authorizer=true -
调整自动刷新间隔:
args: - --auto-refresh-interval=30s
7. 生产环境最佳实践
-
访问控制三重保障 :
- 网络层:通过 Ingress 或 LB 配置 IP 白名单
- 传输层:强制 HTTPS 并启用双向 TLS
- 应用层:集成 OIDC 或企业 SSO
-
监控与告警配置 :
# Prometheus 监控示例 - job_name: 'kubernetes-dashboard' kubernetes_sd_configs: - role: endpoints namespaces: names: ['kubernetes-dashboard'] relabel_configs: - source_labels: [__meta_kubernetes_service_label_k8s_app] action: keep regex: kubernetes-dashboard -
灾备方案 :
- 定期备份 Dashboard 配置
- 准备命令行等效操作手册
- 设置维护窗口期
我在多个生产集群中部署 Dashboard 的经验是:永远不要将其作为唯一的管理工具,而应作为 kubectl 的图形化补充。特别是在处理大规模集群时,Dashboard 的资源消耗会显著增加,建议配合 kubectl 和自动化工具使用。
更多推荐
所有评论(0)