K8s系列二:安装 Dashboard – 原生 Web 控制台配置

🗺️ 系列目录:
  1. K8s系列一:Ubuntu 22.04 从零搭建集群(Flannel + Containerd) 
  2. K8s系列二:安装 Dashboard – 原生 Web 控制台配置 👈 当前篇章
  3. K8s系列三:安装 Rancher – 企业级多集群管理平台
  4. K8s系列四:安装 Kuboard – 国产可视化运维工具
📋 文档概述

  本文档旨在为已搭建好的 Kubernetes 集群安装官方 Web 管理控制台 —— Kubernetes Dashboard。通过 Dashboard,可以图形化地查看和管理集群中的大多数资源(工作负载、服务、配置、存储等),大大降低 K8s 的学习和运维门槛。

✅ 适用条件
  • 已有一个正常运行的 K8s 集群(参考本系列第一篇文档)
  • 集群网络插件(如 Flannel)已安装且所有节点状态为 Ready
  • 在 Master 节点上执行以下操作
一、部署 Kubernetes Dashboard
1.1 下载并安装 Dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
执行后,K8s 会自动在 kubernetes-dashboard 命名空间中创建所有必要的资源(Deployment、Service、RBAC 等)。

1.2 验证安装状态
# 查看 Dashboard 相关 Pod 是否正常运行
kubectl get pods -n kubernetes-dashboard

# 查看 Service 信息
kubectl get svc -n kubernetes-dashboard
等待所有 Pod 状态变为 Running 即可继续下一步。
二、创建管理员用户并获取 Token

Dashboard 默认不开放外部访问,并且需要权限才能登录。我们需要创建一个管理员用户并获取其 Token 作为登录凭证。

2.1 创建管理员用户配置文件

创建一个文件 dashboard-adminuser.yaml,内容如下:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
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
2.2 应用配置并获取 Token
# 应用配置
kubectl apply -f dashboard-adminuser.yaml

# 获取登录所需的 token
kubectl -n kubernetes-dashboard create token admin-user

执行后会输出一长串字符串,这就是登录 Dashboard 的密码,妥善保存。

三、配置外部访问(NodePort 方式)

默认情况下 Dashboard 的服务类型为 ClusterIP,只能在集群内部访问。为了方便外部访问,我们将其修改为 NodePort 类型。

3.1 修改 Service 类型
# 编辑 dashboard 服务
kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
找到 spec.type 字段,将 ClusterIP 改为 NodePort
spec:
  type: NodePort   # 原来为 ClusterIP
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 32593  # 系统会自动分配,也可以手动指定(可选)

3.2 查看暴露的端口
kubectl -n kubernetes-dashboard get service kubernetes-dashboard
输出示例:
root@k8s-master:~# kubectl -n kubernetes-dashboard get service kubernetes-dashboard
NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.100.254.94   <none>        443:32593/TCP   18m
记下 PORT(S) 列中的 32593(实际端口由系统自动分配)

四、访问 Kubernetes Dashboard
4.1 访问地址

在浏览器中输入以下地址:

https://<任意节点IP>:32593
4.2 登录说明
  1. 登录方式:选择 Token 方式登录。
  2. 输入 Token:粘贴之前在第二步中获取的 token 字符串。

4.3 验证登录

成功登录后,将看到 Kubernetes Dashboard 的主界面,可以浏览集群中的各种资源:

  • 工作负载:查看 Pod、Deployment、StatefulSet 等
  • 服务与发现:查看 Service、Ingress 等
  • 配置:查看 ConfigMap、Secret 等
  • 存储:查看 PVC、StorageClass 等
五、常见问题排查
Q1: Dashboard Pod 一直处于 CrashLoopBackOff 状态?

可能原因:镜像拉取失败或权限配置错误。

解决方法

# 查看详细日志
kubectl logs -n kubernetes-dashboard -l k8s-app=kubernetes-dashboard

# 如果国内拉取镜像困难,可以手动修改镜像地址
kubectl set image -n kubernetes-dashboard deployment/kubernetes-dashboard \
  kubernetes-dashboard=registry.aliyuncs.com/google_containers/dashboard:v2.7.0

Q2: 浏览器访问时提示 403 或 401?

可能原因:Token 过期或权限不足。

解决方法:重新生成一个新的 Token

kubectl -n kubernetes-dashboard create token admin-user
Q3: 忘记保存的 Token 怎么办?

解决方法:可以随时重新获取

kubectl -n kubernetes-dashboard create token admin-user
Q4: 如何修改 NodePort 端口为固定值?

解决方法:编辑 service 时,在 ports 下指定 nodePort 字段

ports:
  - port: 443
    targetPort: 8443
    nodePort: 30001  # 指定为 30001,需在 30000-32767 范围内
六、清理(如需卸载)

如果需要卸载 Dashboard,执行以下命令:

# 删除管理员用户
kubectl delete -f dashboard-adminuser.yaml

# 删除 Dashboard 所有资源
kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml