默认ClusterIP类型导致外网无法访问,需改为NodePort或用port-forward;常见原因还包括token权限绑定错误、命名空间误设及证书问题。

直接用 kubectl apply -f 部署官方 recommended.yaml 是最简路径,但默认是 ClusterIP 类型,无法从浏览器直连——必须改 Service 类型或加 port-forward,否则白装。
为什么 dashboard 服务部署后打不开?
常见现象:执行 kubectl apply -f recommended.yaml 后,kubectl get svc -n kubernetes-dashboard 显示 kubernetes-dashboard 的 TYPE 是 ClusterIP,PORT(S) 只有 443/TCP,没对外暴露端口。
- 这是设计使然:官方 YAML 默认不开放外部访问,安全优先
- 若你没配
port-forward或没改Service类型,浏览器访问任何 IP + 端口都会失败(Connection refused) - 错误日志里通常看不到明显报错,
kubectl logs -n kubernetes-dashboard deploy/kubernetes-dashboard显示正常,容易误判为“已就绪”
如何让 dashboard 从浏览器直接访问(NodePort 方式)
修改 recommended.yaml 中的 Service 定义,把 type: ClusterIP 改成 NodePort,并指定一个可用端口(如 31313)。
- 编辑 YAML 文件,定位到
kind: Service下的spec段,确保包含:ports: - port: 443 targetPort: 8443 nodePort: 31313 type: NodePort
-
nodePort范围必须是30000–32767,低于 30000 会报错:error validating data: ValidationError(Service.spec.ports[0]): invalid type for io.k8s.api.core.v1.ServicePort.nodePort - 若提示
Bind failed on port 31313,说明宿主机该端口被占用,换一个再试 - 改完保存,重新
kubectl apply -f recommended.yaml(不用删旧资源,apply 会自动更新)
token 登录失败的三个高频原因
拿到 token 后粘贴进登录页,仍提示 Unauthorized 或 Forbidden,大概率是权限绑定或 token 时效问题。
- 没绑定
ClusterRoleBinding:只运行kubectl create serviceaccount dashboard-admin-sa不够,必须补上kubectl create clusterrolebinding dashboard-admin-sa --clusterrole=cluster-admin --serviceaccount=default:dashboard-admin-sa - token 过期:用
kubectl create token生成的 token 默认有效期 1 小时;长期使用建议创建Secret类型的 token,或改用kubeadm生成的长期 token(如kubeadm token create --ttl 0) - 命名空间写错:
kubectl create token必须指定-n kubernetes-dashboard(Dashboard 自身 SA 所在命名空间),不是default;否则返回的 token 无权访问 Dashboard 后端
port-forward 临时调试更安全,但别用于生产
开发/测试阶段推荐用 port-forward,不暴露节点端口,也无需改 YAML。
- 命令:
kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard 8443:443 - 浏览器打开
https://localhost:8443,接受证书风险(自签名证书) - 注意:该命令前台运行,终端关闭即断连;后台运行需加
&,但进程易被 shell 退出带走 - 生产环境禁用此方式——它依赖本地
kubectl连接集群 API Server,一旦网络中断或 kubeconfig 权限变更,立即不可用
真正麻烦的不是部署步骤,而是每个环节都依赖前序配置准确:cgroup driver 是否与 Docker 一致、sysctl 参数是否生效、hostname 是否含下划线、甚至 /etc/hosts 里 master 和 node 的解析是否双向可达——漏掉任意一环,Dashboard 就可能卡在 “Loading…” 或反复重定向。动手前先跑通 kubectl get nodes 和 kubectl get pods -A,比急着 apply YAML 更省时间。


















