当前位置: 首页 > news >正文

Kubernetes Dashboard 安装部署、访问与管理实战实验

本次实验旨在完成 Kubernetes Dashboard 的部署、配置及访问,掌握通过 Helm 安装 Dashboard、创建访问权限、配置端口转发及 NodePort 访问方式,并实现基于令牌的安全登录,最终通过 Web 界面管理 Kubernetes 集群资源。

实验环境

  • 单节点 Kubernetes 集群(master 节点)
  • 操作系统:CentOS/RHEL
  • Kubernetes 版本:v1.24+
  • Helm 版本:v3.12.3

Dashboard 是基于网页的 Kubernetes 用户界面。

你可以使用 Dashboard 将容器应用部署到Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment、Job、DaemonSet 等等)。 例如,你可以对 Deployment 实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新的应用。
Dashboard 同时展示了 Kubernetes 集群中的资源状态信息和所有报错信息。
https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/web-ui-dashboard/ 官方解释
 
Kubernetes Dashboard 目前仅支持基于 Helm 的安装,因为它速度更快, 并且可以让我们更好地控制
Dashboard 运行所需的所有依赖项。
https://cloud.tencent.com/developer/article/2497939  Kubernetes 包管理工具之 Helm 简介

注意:要在有k8s的虚拟机中完成

1.手动下载安装Helm (适用于内网/离线环境)

也可以使用官方脚本一键安装,二选一即可,我选择手动安装

# 官方脚本一键安装helm
# 原理:脚本会自动下载最新版本的 Helm 二进制文件并安装到系统路径。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3  
chmod 700 get_helm.sh  
sudo ./get_helm.sh  
helm version
手动安装helm
# 下载wget工具
yum install -y wget# 下载 Helm v3.12.3(根据系统架构,如 `linux-amd64`,选择版本)
wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz# 解压后将 `helm` 文件移动到系统 PATH 目录(如 `/usr/local/bin`)
tar -zxvf helm-v3.12.3-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm# 验证安装
helm version

 2.默认情况下不会部署 Dashboard,可以通过以下命令部署

# 进入目录
cd /etc/yum.repos.d/# 添加 kubernetes-dashboard 仓库
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/# 使用 kubernetes-dashboard Chart 部署名为 kubernetes-dashboard 的 Helm Release
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard# 多了一个命名空间kubernetes-dashboard
kubectl get namespaces# 查看kubernetes-dashboard 产生的pod
kubectl get pod -n kubernetes-dashboard# 查看service,其中 kubernetes-dashboard-kong-proxy 是我们访问的主要pod;
kubectl get svc -A

 

错误情况处理:

从输出来看,Kubernetes Dashboard 已经成功部署,但所有 Pod 都处于 Pending 状态,这表示它们无法被调度到节点上运行。 

 进行诊断,定位问题出现在哪,可以将以下命令的输出导入ai询问解决办法

# 检查 Pod 的 Pending 原因
kubectl describe pods -n kubernetes-dashboard重点关注 Events 部分的错误信息,常见原因包括:
资源不足(CPU/内存不够)。
节点选择器/污点不匹配。
PV/PVC 问题(如果 Dashboard 需要持久化存储)。# 检查节点资源状态
kubectl get nodes# 定位具体原因
kubectl describe pods
kubectl describe nodes

从你的诊断信息来看,Kubernetes Dashboard 的 Pod 处于 Pending 状态的主要原因是 节点调度问题。具体表现为:

核心问题分析

  1. 节点状态异常

    • master 节点:Ready,但有污点 node-role.kubernetes.io/control-plane:NoSchedule(默认不允许调度普通 Pod)。

    • node1 和 node2NotReady,且有污点 node.kubernetes.io/unreachable:NoSchedule(节点失联导致不可调度)。

  2. 调度失败的直接原因

    • 所有 Dashboard Pod 因节点污点无法调度到任何节点:

      0/3 nodes are available:
        1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: },
        2 node(s) had untolerated taint {node.kubernetes.io/unreachable: }.

由于本实验仅使用一台k8s的master节点的机子,可采用临时的解决办法,不需要将node1和node2变成ready,只需要临时允许 Pod 调度到 master

# 1. 删除 master 的 NoSchedule 污点
kubectl taint nodes master node-role.kubernetes.io/control-plane:NoSchedule-# 2. 重新部署 Dashboard(触发重新调度)
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \--namespace kubernetes-dashboard

 https://localhost:8443

验证修复结果

# 查看kubernetes-dashboard 产生的pod
kubectl get pod -n kubernetes-dashboard# 查看service,其中 kubernetes-dashboard-kong-proxy 是我们访问的主要pod;
kubectl get svc -A

 

3.访问 Dashboard 用户界面

访问方式原理优势常见问题
NodePort(10.1.1.85:30083)通过集群节点的物理端口访问,无需本地进程可远程访问防火墙限制、证书验证
端口转发(localhost:8443)通过 kubectl 进程将本地端口映射到集群 Service,仅本地可用无需开放节点防火墙进程终止、端口占用、浏览器限制
(1)执行如下指令:启动dashboard(本地开发访问方式)
# 启动命令进行端口转发
kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard-kong-proxy 8443:443 --address 0.0.0.0  &kubectl 会使得 Dashboard 可以通过 [https://localhost:8443](https://localhost:8443/)
访问。
UI **只能**通过执行这条命令的机器进行访问。# 验证端口已绑定
ss -tulnp | grep 8443# 若返回 HTML 内容,说明端口转发正常
curl -k https://localhost:8443

 

此时正常情况可以通过访问Kubernetes 仪表板(本地访问)

注意:登录需要token,且token有时效性,获得令牌的步骤在下面

https://10.1.1.85:8443/

​ 

(2)创建 ServiceAccount 及ClusterRoleBinding角色绑定

K8S有两种用户:User 和 Service Account,User 给人用,Service Account 给进程用,让进程有相关权限,Dashboard 是一个进程,我们就可以创建一个Service Account 给它 

通过命令方式创建用户和绑定角色(也可以通过yaml 文件创建)

创建 ServiceAccount 和 ClusterRoleBinding(授予管理员权限)# 创建 ServiceAccount(管理员账户)
kubectl create serviceaccount admin01 -n kubernetes-dashboard# 绑定 ClusterRoleBinding(授予集群管理员权限)
kubectl create clusterrolebinding admin01 --clusterrole=cluster-admin \--serviceaccount=kubernetes-dashboard:admin01

(3)创建对应服务账号的token,我选择自定义token有效期为24h
生成访问令牌(Token)正常来说时间不用太长# 生成默认有效期(1小时)的令牌
kubectl -n kubernetes-dashboard create token admin01# 生成自定义有效期(24小时)的令牌
kubectl -n kubernetes-dashboard create token admin01 --duration 24heyJhbGciOiJSUzI1NiIsImtpZCI6ImxTR3lxNnE3UlI2em9qLUM0d3JMWHFOcG5MOUllWDZRY1ZYOU5MRGs3NTQifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzQ4NDIzMjk1LCJpYXQiOjE3NDgzMzY4OTUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbjAxIiwidWlkIjoiNTM2ZjZjODYtMDQ1Mi00MTA2LTg4MzYtNmZkZDFlYzY4OTc3In19LCJuYmYiOjE3NDgzMzY4OTUsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbjAxIn0.Uh55Iqr1gWlcCXrEFMhQcB2gmNDSiqNkJPv4b_m7kQqKxL59sSOgPTNov4PCgrP9mmYgb-hahBarMJ0JRPelYPA3vFt20sT1MAQR3V-xNpRITUUkqEY3UZ_5D7UTSYjP9624r5-vsZ_cQj60Kfcm9zsmZTXD67nAX_MB8RtYBwWvg-fEcvRDYpSugTQz8TePmcGTFUyOxClGDby4n9N6SKFtoSJFaBJVa7neKeFE6DWA3L3Xlc1S9HObzbo2_BZct4LJnqHoIcjv2uQoRy2goiVJzuRU_fqnZaJkKjQDxmp8IBfkQScSpBQwECNvqeP3wLwPR34CshwjrBjzRMWneg
​ (4)修改端口类型,可以实现外部访问
修改 Service 类型为 NodePort(外部访问)# 修改 Service 类型为 NodePort
kubectl patch svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard \--type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"}]'# 指定固定 NodePort(例如 30083)
kubectl patch svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard \--type='json' -p '[{"op":"add","path":"/spec/ports/0/nodePort","value":30083}]'

测试访问:https://10.1.1.85:30083/

由于 Dashboard 使用的是自签名证书,浏览器会显示安全警告。不同浏览器的处理方式如下:

  • Chrome/Edge
    输入地址后可能会看到 “此站点不安全” 的提示,点击 “高级” → “继续前往 localhost(不安全)”
  • Firefox
    点击 “高级” → “接受风险并继续”
  • Safari
    可能需要先在 “系统偏好设置” → “安全性与隐私” 中允许访问该证书。

输入令牌点击登录 

出现以下页面即可

4. k8s dashboard 的基本使用

(1)点击pods,创建pod(三种方式)

直接编写yaml或json 文件;导入已经写好的yaml或json;通过表单创建

点击部署,刷新状态查看

点击对应的pod 能看到详细信息;类似与  kubectl describe  pod xx 

​ (2)pod具体操作——点击 如下图标,看看作用

1为查看日志

2为在pod中运行  

3为编辑资源 

4为删除资源 

5.扩展内容

(1)权限查询
role: 名称空间的系统权限
clusterrole:全局权限
(2)系统权限
查询某一个名称空间内的所有系统权限
kubectl -n kube-system get role
查询名称空间内的系统权限的详细信息
kubectl -n kube-system describe role kube-proxy


(3)全局权限
查看所有全局权限
kubectl -n kube-system get clusterrole


指定查看某一个权限的详细信息
kubectl -n kube-system describe clusterrole admin


(4)查看用户
kubectl get serviceaccounts  [用户名]  -n kubernetes-dashboard 

示例:

# 查询 kubernetes-dashboard 命名空间下的所有 ServiceAccount

kubectl get serviceaccounts -n kubernetes-dashboard

6.验证内容

  1. 部署验证

    • Dashboard 相关 Pod 均处于 Running 状态,包括 API、Auth、Kong 代理和 Web 组件
    • Service 配置正确,kubernetes-dashboard-kong-proxy 暴露目标端口
  2. 访问验证

    • 本地端口转发访问 https://localhost:8443 成功返回 Dashboard 页面
    • NodePort 方式访问 https://10.1.1.85:30083 可正常登录
    • 令牌验证通过,可进入集群管理界面
  3. 功能验证

    • 成功通过 Web 界面创建 Pod、查看资源状态
    • 实现 Pod 日志查看、在线编辑、删除等操作
    • 验证 RBAC 权限查询功能,可查看 Role、ClusterRole 及 ServiceAccount 信息

7.关键问题与解决方案

  1. Pod 调度失败

    • 原因:master 节点默认禁止调度普通 Pod(NoSchedule 污点)
    • 解决:移除污点 kubectl taint nodes master node-role.kubernetes.io/control-plane:NoSchedule-
  2. 端口占用问题

    • 原因port-forward 进程未正确终止导致端口残留
    • 解决:强制终止进程 pkill -9 -f "kubectl port-forward",重新启动转发
  3. 证书验证失败

    • 原因:自签名证书未被浏览器信任
    • 解决:Chrome 中输入 thisisunsafe 强制跳过,或导入证书到浏览器信任列表
  4. 令牌失效问题

    • 原因:默认令牌有效期仅 1 小时
    • 解决:使用 --duration 参数生成长期令牌(如 24h

本次实验完整实现了 Kubernetes Dashboard 的部署与访问,验证了从环境准备、组件部署、权限配置到界面操作的全流程。通过解决节点调度、端口占用、证书验证等典型问题,掌握了 Dashboard 在单节点集群中的实用部署方案。Dashboard 作为 Kubernetes 的图形化管理工具,有效降低了集群操作门槛,但其安全配置和性能优化仍需在实际应用中持续关注。

相关文章:

  • VScode单双引号、分号格式
  • 【深度学习-pytorch篇】4. 正则化方法(Regularization Techniques)
  • ParakeetTDT0.6BV2,语音识别ASR,极速转录, 高精度英文转录,标点支持(附整合包)
  • 常用算法模板函数(Python)
  • 用Python玩转人工智能——手搓图像分类模型
  • 【PhysUnits】13 改进减法(sub.rs)
  • 【加密算法】
  • 从“被动养老”到“主动健康管理”:平台如何重构代际关系?
  • Odoo 条码功能全面深度解析(VIP15万字版)
  • LiveNVR :实现非国标流转国标流的全方位解决方案
  • 勾股数的性质和应用
  • 接地气的方式认识JVM(一)
  • 通过teamcity cloud创建你的一个build
  • 【C语言】详解 指针
  • Java开发之定时器学习
  • 欧拉角转为旋转矩阵
  • 二叉树的锯齿形层序遍历——灵活跳跃的层次结构解析
  • w~视觉~合集6
  • 自我觉察是成长的第一步,如何构建内心的平静
  • 【线程与进程区别】
  • 网站建设主要做什么/创建一个网站
  • WordPress添加百度联盟/最好用的手机优化软件
  • 外贸出口网站建设/今天的最新消息新闻
  • 医疗网站建设方案/上海谷歌seo推广公司
  • 网站建设方案可行性/苏州百度推广开户
  • 路由侠怎么做网站映射/seo第三方点击软件