默认recommended.yaml部署的Dashboard Service为ClusterIP类型,仅限集群内访问;需改为NodePort并配置合法Token才能外部HTTPS访问。

直接用 recommended.yaml 部署会卡在登录页,因为默认没配访问方式
最新版 recommended.yaml(如 v2.7.0)部署后,kubernetes-dashboard Service 默认是 ClusterIP 类型,只允许集群内访问。你用 kubectl get svc -n kubernetes-dashboard 会看到它没有 NODE_PORT 或 EXTERNAL-IP,浏览器打不开。
这不是配置失败,而是设计如此 —— 官方不推荐直接暴露 Dashboard 到公网,所以默认关闭外部访问。
- 别试
http://<master-ip>:8080/ui</master-ip>:Kubernetes 1.20+ 已移除/ui路径,该地址返回 404 - 别依赖
kubectl proxy长期使用:它只绑定本地localhost:8001,且需保持终端运行,不适合团队共享或生产调试 - 最简验证法:先用
kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8443:443本地临时访问,确认 Pod 已就绪(Running状态)再改服务类型
把 Service 改成 NodePort 是最常用且可控的外网访问方式
修改前先删掉原 Service:kubectl delete service kubernetes-dashboard -n kubernetes-dashboard,否则 apply 会报错资源冲突。
新建 dashboard-svc.yaml,核心字段必须对齐:
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 30443 # 可选:指定端口,范围 30000–32767;不写则由系统分配
selector:
k8s-app: kubernetes-dashboard
-
nodePort值必须在 30000–32767 范围内,低于 30000 会被 Kubernetes 拒绝 -
targetPort: 8443不能改成 443 —— Dashboard 容器实际监听的是 8443,改了会导致 502 - 如果集群节点有防火墙(如 CentOS 的
firewalld),要手动放行30443端口:firewall-cmd --permanent --add-port=30443/tcp && firewall-cmd --reload
登录时提示 “Unauthorized” 或跳回登录页,大概率是 Token 权限不足
Dashboard 默认禁用 admin/admin 这类静态凭据,v2.0+ 版本强制要求使用 ServiceAccount Token 登录。你看到的登录页里“Skip”按钮只是绕过认证,进不去主界面。
生成可用 Token 的最小权限做法:
kubectl create serviceaccount dashboard-admin-sa -n kubernetes-dashboard kubectl create clusterrolebinding dashboard-admin-sa --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin-sa kubectl -n kubernetes-dashboard create token dashboard-admin-sa
- 最后一条命令输出的就是 Base64 编码的 Token,复制整段(含换行符),粘贴到登录页的 “Token” 输入框
- 不要用
kubectl describe secret查 token:v1.24+ Secret 不再自动挂载 ca.crt 和 token 字段,create token是唯一可靠方式 - 如果集群启用了 PodSecurityPolicy 或 Pod Security Admission(如
restricted模式),Dashboard Pod 可能因权限不足启动失败,检查kubectl logs -n kubernetes-dashboard deploy/kubernetes-dashboard
Chrome 打开白屏或报 “NET::ERR_CERT_INVALID”,不是证书问题而是协议强制
Dashboard v2.0+ 默认只支持 HTTPS,且内置自签名证书。Chrome 会拦截不安全的连接,但错误不是证书本身,而是你用了 http:// 协议访问 NodePort 地址。
正确访问格式只有两种:
-
https://<node-ip>:30443</node-ip>(注意是https,不是http;Chrome 会弹警告,点 “高级 → 继续前往”) - 或者用
kubectl port-forward后访问https://localhost:8443(同样要忽略证书警告)
别试图删掉 Dashboard 的 TLS 配置 —— 它没有 HTTP 回退入口,硬关会导致 400 错误。真正需要 HTTPS 透传的场景(比如配了 Ingress + Let's Encrypt),得额外加一层反向代理,Dashboard 本身不处理证书卸载。


















