dashboard打不开是正常现象,核心卡点为service暴露方式(默认clusterip)和token权限绑定;需改nodeport并配置cluster-admin绑定,且浏览器需手动信任自签名证书。

Dashboard 默认不对外暴露,kubectl apply -f recommended.yaml 后访问不了是正常现象,不是装错了——核心卡点就两个:Service 暴露方式 + token 权限绑定。
为什么 dashboard 服务部署后打不开
执行 kubectl apply -f recommended.yaml 后,kubectl get svc -n kubernetes-dashboard 显示 TYPE 是 ClusterIP,端口只有 443/TCP,没对外映射。这是官方设计,不是 bug。
- 浏览器直接访问任意 IP + 端口会报
Connection refused,因为 ClusterIP 只在集群内部可达 -
kubectl logs -n kubernetes-dashboard deploy/kubernetes-dashboard显示正常,容易误判为“已就绪” - 若用
port-forward临时调试,命令是:kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8443:443,然后浏览器打开https://localhost:8443
改 NodePort 让浏览器直连(生产慎用)
修改 recommended.yaml 中的 Service 定义,把 type: ClusterIP 改成 NodePort,并指定端口:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 31313
-
nodePort必须在30000–32767范围内,否则报错:invalid type for io.k8s.api.core.v1.ServicePort.nodePort - 若提示
Bind failed on port 31313,说明宿主机该端口被占用,换一个再试(如32232) - 改完直接
kubectl apply -f recommended.yaml,无需先delete,apply 会自动更新资源 - 确认生效:
kubectl get svc -n kubernetes-dashboard输出中PORT(S)应显示类似443:31313/TCP
token 登录失败的三个高频原因
粘贴 token 后仍提示 Unauthorized 或 Forbidden,大概率是权限或命名空间错配:
- 没绑
ClusterRoleBinding:只运行kubectl create serviceaccount dashboard-admin-sa -n kubernetes-dashboard不够,必须补上kubectl create clusterrolebinding dashboard-admin-sa --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin-sa - token 过期:用
kubectl create token生成的默认有效期 1 小时;长期使用建议加--duration=8760h(1 年),或改用kubeadm token create --ttl 0 - 命名空间写错:获取 token 时必须明确指定
-n kubernetes-dashboard,因为 SA 在该命名空间下,不是default
真正容易被忽略的点
很多人卡在证书信任环节:浏览器访问 https://<node-ip>:31313</node-ip> 时,会因 Dashboard 使用自签名证书而拦截。这不是配置问题,而是浏览器行为——你得手动点 “高级” → “继续前往……(不安全)”。这个步骤无法跳过,也没法用简单参数绕过,除非你额外签发并注入可信证书,但那已超出一键部署范畴。










