K8s Dashboard 部署实操:从证书签发到访问验证
在 Kubernetes 集群中部署 Dashboard 通常需要解决三个问题:生成自签名证书、应用官方 YAML 文件、以及获取登录 Token。
本文按顺序梳理从零开始的部署流程,默认你已有一个可用的 K8s 集群和 kubectl 命令行工具。
环境检查与证书签发
开始之前,先确认集群版本和节点状态。
执行以下命令应能正常返回节点列表和版本号:
kubectl get nodes
kubectl version --short
Dashboard 默认使用 HTTPS 访问,需要准备 TLS 证书。
如果只是内部测试,可以用 OpenSSL 生成自签名证书。
先创建一个工作目录,例如 ~/dashboard-certs,然后执行:
mkdir ~/dashboard-certs && cd ~/dashboard-certs
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout dashboard.key -out dashboard.crt \
-subj "/CN=dashboard.local"
将生成的 dashboard.crt 和 dashboard.key 导入为 Kubernetes Secret,供 Dashboard 容器挂载使用:
kubectl create namespace kubernetes-dashboard
kubectl -n kubernetes-dashboard create secret tls dashboard-tls \
--cert=dashboard.crt --key=dashboard.key
如果命名空间已存在,跳过 create namespace 这一行。
执行后可用 kubectl -n kubernetes-dashboard get secret 确认 Secret 创建成功。
部署 Dashboard 资源
官方推荐通过 YAML 文件部署。
下载对应版本的 recommended.yaml(以官方仓库为准,不固定版本号):
curl -LO https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
打开文件,找到 kubernetes-dashboard 的 Deployment 部分,在 spec.template.spec.volumes 下添加证书卷,并在 containers 的 volumeMounts 中挂载。
同时把 Service 类型改为 NodePort 方便外部访问:
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 30443
保存后应用配置:
kubectl apply -f recommended.yaml
等待 Pod 启动,用 kubectl -n kubernetes-dashboard get pods 观察状态,直到显示 Running。
获取登录 Token
Dashboard 从 1.7 版本后默认使用 Token 登录。
创建一个 ServiceAccount 并绑定 cluster-admin 角色(仅测试环境建议,生产环境应细化权限):
kubectl -n kubernetes-dashboard create serviceaccount dashboard-admin
kubectl create clusterrolebinding dashboard-admin \
--clusterrole=cluster-admin \
--serviceaccount=kubernetes-dashboard:dashboard-admin
获取 Token 的命令:
kubectl -n kubernetes-dashboard create token dashboard-admin
复制输出的长字符串,在 Dashboard 登录页选择 Token 方式粘贴即可。
常见报错与避坑
Pod 一直处于 CrashLoopBackOff:多半是证书挂载路径不对,检查 volumeMounts 的 mountPath 是否与容器内实际读取证书的路径一致。
浏览器提示证书无效:自签名证书本身不被浏览器信任,这是正常现象。
内部测试可点击“继续访问”;
生产环境应换成受信任 CA 签发的证书。
访问 NodePort 超时:确认节点防火墙放行了 30443 端口,云服务器还需检查安全组规则。
Token 登录后提示权限不足:
检查 clusterrolebinding 是否绑定成功,
用 kubectl get clusterrolebinding dashboard-admin -o yaml 核对 ServiceAccount 名称和命名空间。
验证部署结果
在浏览器打开 https://<节点IP>:30443,出现登录页面即表示服务已启动。
粘贴 Token 后能进入集群概览页面,看到命名空间、节点和工作负载列表,说明部署完整可用。
如果页面能打开但数据加载失败,
通常是 Dashboard 与 API Server 通信问题,
检查 kubectl -n kubernetes-dashboard logs 中是否有连接拒绝或证书验证错误。
整个流程的核心是证书、YAML 和 Token 三部分。
证书决定能否建立 HTTPS 连接,YAML 决定资源如何创建,Token 决定能否通过认证。
任何一步出错,优先回看对应章节的检查项。