尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
解构 K8s Web 管理界面:Dashboard 与 Kuboard 部署认证
Kubernetes 集群 Dashboardkuboardkuboard 介绍Kuboard 是一款专为 Kubernetes 设计的免费管理界面兼容 Kubernetes 版本 1.13 及以上。Kuboard 每周发布一个 beta 版本最长每月发布一个正式版本经过两年的不断迭代和优化已经具备多集群管理、权限管理、监控套件、日志套件等丰富的功能并且有 1000 的企业将 Kuboard 应用于其生产环境。Kuboard 自 2019年8月发布第一个版本以来得到了众多用户的认可目前已经获得了 10000 GitHub Star。Kuboard 的定位和 Dashboard 是相似的主要的区别在于Kuboard 关注微服务参考架构的视角对界面进行组织参考 Kuboard 简介。Kuboard 中不需要手工编写 YAML 文件进一步降低 K8S 使用难度提高便捷性。Kuboard 可以导出整个微服务架构的部署信息并在新的名称空间/集群导入配置信息。Kuboard 的一个发展方向是提供内建的 监控套件目前的全局监控套件成熟度比较高。kuboard 特点相较于 Kubernetes Dashboard 等其他 Kubernetes 管理界面Kuboard 的主要特点有多种认证方式Kuboard 可以使用内建用户库、gitlab / github 单点登录或者 LDAP 用户库进行认证避免管理员将 ServiceAccount 的 Token 分发给普通用户而造成的麻烦。使用内建用户库时管理员可以配置用户的密码策略、密码过期时间等安全设置。多集群管理管理员可以将多个 Kubernetes 集群导入到 Kuboard 中并且通过权限控制将不同集群/名称空间的权限分配给指定的用户或用户组。微服务分层展示在 Kuboard 的名称空间概要页中以经典的微服务分层方式将工作负载划分到不同的分层更加直观地展示微服务架构的结构并且可以为每一个名称空间自定义名称空间布局。工作负载的直观展示Kuboard 中将 Deployment 的历史版本、所属的 Pod 列表、Pod 的关联事件、容器信息合理地组织在同一个页面中可以帮助用户最快速的诊断问题和执行各种相关操作。工作负载编辑Kuboard 提供了图形化的工作负载编辑界面用户无需陷入繁琐的 YAML 文件细节中即可轻松完成对容器的编排任务。支持的 Kubernetes 对象类型包括Node、Namespace、Deployment、StatefulSet、DaemonSet、Secret、ConfigMap、Service、Ingress、StorageClass、PersistentVolumeClaim、LimitRange、ResourceQuota、ServiceAccount、Role、RoleBinding、ClusterRole、ClusterRoleBinding、CustomResourceDefinition、CustomResource 等各类常用 Kubernetes 对象存储类型支持在 Kuboard 中可以方便地对接 NFS、CephFS 等常用存储类型并且支持对 CephFS 类型的存储卷声明执行扩容和快照操作。丰富的互操作性可以提供许多通常只在kubectl命令行界面中才提供的互操作手段例如Top Nodes / Top Pods容器的日志、终端容器的文件浏览器支持从容器中下载文件、上传文件到容器KuboardProxy在浏览器中就可以提供kubectl proxy的功能套件扩展Kuboard 提供了必要的套件库使得用户可以根据自己的需要扩展集群的管理能力。当前提供的套件有资源层监控套件基于 Prometheus / Grafana 提供 K8S 集群的监控能力可以监控集群、节点、工作负载、容器组等各个级别对象的 CPU、内存、网络、磁盘等资源的使用情况日志聚合套件基于 Grafana / Loki / Promtail 实现日志聚合存储卷浏览器查看和操作存储卷中的内容告警配置可以通过界面直接配置资源层监控套件发送告警消息支持邮件、微信发送告警消息支持告警路由配置支持告警规则配置等操作审计Kuboard 支持操作审计的功能审计用户通过 Kuboard 界面和 Kuboard API 执行的操作自定义审计规则在线演示在线演示环境中您具备 只读 权限只能体验 Kuboard 的一部分功能。地址https://demo.kuboard.cn用 户demo密 码demo123kuboard 版本Kuboard v2.x 版本说明Kuboard v2.x 支持 Kubernetes 单集群管理。版本支持Kuboard v3.x 版本说明Kuboard v3.x 支持 Kubernetes 多集群管理。如果您从 Kuboard v1.0.x 或者 Kuboard v2.0.x 升级到 Kuboard请注意您可以同时使用 Kuboard v3.x 和 Kuboard v2.0.xKuboard v3.x 支持 amd64 (x86) 架构和 arm68 (armv8) 架构的 CPU版本支持kuboard 安装和配置本次实验环境kubernetes版本是1.32.0使用kuboard v3.x版本。安装方式以独立容器方式运行在 Kubernetes 中运行以static pod方式运行基于如下原因建议您以独立容器方式 Kuboard结构更清晰Kuboard 作为多个集群的管理界面应该独立于任何集群之外登录 Kuboard 时使用不同的认证方式问题排查更简单以独立容器方式运行安装计划在正式安装 kuboard v3 之前需做好一个简单的部署计划的设计在本例中各组件之间的连接方式如下图所示假设用户通过 http://外网IP:80 访问 Kuboard v3安装在 Kubernetes 中的 Kuboard Agent 通过内网IP访问 Kuboard 的 Web 服务端口 80 和 Kuboard Agent Server 端口 10081。安装过程# 创建目录rootmaster30:~# mkdir /kuboard-data# 创建容器rootmaster30:~# nerdctl run -d --namekuboard \-p80:80/tcp\-p10081:10081/tcp\-eKUBOARD_ENDPOINThttp://10.1.8.30:80\-eKUBOARD_AGENT_SERVER_TCP_PORT10081\-v/kuboard-data:/data\eipwork/kuboard:v3# 10.1.8.30是物理机的ip卸载rootmaster30:~# nerdctl container rm kuboard --forcerootmaster30:~# rm -fr /kuboard-data以static pod方式运行自学安装# 在master节点上执行rootmaster30:~# curl -fsSL https://addons.kuboard.cn/kuboard/kuboard-static-pod.sh -o kuboard.shrootmaster30:~# sh kuboard.shcurrentipaddress is10.1.8.30 createfile/root/kuboard-sa.yaml kubectl apply-f/root/kuboard-sa.yaml namespace/kuboard created serviceaccount/kuboard-admin created clusterrolebinding.rbac.authorization.k8s.io/kuboard-admin-crb created serviceaccount/kuboard-viewer created clusterrolebinding.rbac.authorization.k8s.io/kuboard-viewer-crb created createfile/etc/kubernetes/manifests/kuboard.yaml restart kubelet 检查状态 待 kuboard-v3-master30.laoma.cloud 的容器组变为 Running 状态后则安装成功可以通过 http://10.1.8.30 访问 kuboard 界面 No resources foundinkuboard namespace.# 验证rootmaster30:~# kubectl get all -n kuboardNAME READY STATUS RESTARTS AGE pod/kuboard-v3-laoma30.redhat.fun1/1 Running045s卸载# 删除静态文件rootmaster30:~# rm -f /etc/kubernetes/manifests/kuboard.yaml# 删除数据目录rootmaster30:~# rm -fr /usr/share/kuboard# 删除命名空间rootmaster30:~# kubectl delete ns kuboard访问过程在浏览器输入http://your-host-ip:80访问 Kuboard v3.x 的界面。登录信息用户名admin密 码Kuboard123添加集群这里选择.kubeconfig导入凭据文件复制~/.kube/config内容到红色方框中导入后效果选择访问集群时所使用的身份使用 ServiceAccount kuboard-admin参考资料安装手册https://kuboard.cn/install/v3/install.htmlKubernetes Dashboard介绍项目地址https://github.com/kubernetes/dashboard/Kubernetes Dashboard 是 Kubernetes 的官方 Web UI。Kubernetes Dashboard 具备的功能向 Kubernetes 集群部署容器化应用诊断容器化应用的问题管理集群的资源查看集群上所运行的应用程序创建、修改Kubernetes 上的资源例如 Deployment、Job、DaemonSet等展示集群上发生的错误例如您可以伸缩一个 Deployment、执行滚动更新、重启一个 Pod 或部署一个新的应用程序。部署# 下载资源yaml文件#也可以使用外网资源下载rootmaster30 ~12:26:06# wget https://laoma.cloud/class/course-materials/softwares/stage03/kubernetes-dashboard-recommended-v2.6.1.yaml -O recommended.yaml# 查看images#一般把hub.laoma.cloud改成docker.iorootmaster30 ~12:26:52# grep image: recommended.yamlimage: hub.laoma.cloud/kubernetesui/dashboard:v2.6.1 image: hub.laoma.cloud/kubernetesui/metrics-scraper:v1.0.8# 执行部署rootmaster30 ~12:27:05# kubectl apply -f recommended.yaml验证rootmaster30 ~12:29:07# kubectl get nsNAME STATUS AGE....kubernetes-dashboard Active 91s... rootmaster30 ~12:29:40# kubectl config set-context --current --namespace kubernetes-dashboardrootmaster30 ~12:43:47# kubectl get deployments.appsNAME READY UP-TO-DATE AVAILABLE AGE dashboard-metrics-scraper1/1119m55s kubernetes-dashboard1/1119m55s rootmaster30 ~12:44:00# kubectl get serviceNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)AGE dashboard-metrics-scraper ClusterIP10.97.212.131none8000/TCP 10m kubernetes-dashboard ClusterIP10.98.217.132none443/TCP 10m rootmaster30 ~12:44:12# kubectl get serviceaccountsNAME SECRETS AGE default016m kubernetes-dashboard016m rootmaster30 ~12:44:30# kubectl describe serviceaccounts kubernetes-dashboardName: kubernetes-dashboard Namespace: kubernetes-dashboard Labels: k8s-appkubernetes-dashboard Annotations:noneImage pull secrets:noneMountable secrets:noneTokens:noneEvents:none# 创建了clusterrolebindings/kubernetes-dashboardrootmaster30 ~12:44:41# kubectl get clusterrolebindings |grep dashboardkubernetes-dashboard ClusterRole/kubernetes-dashboard 17m# sa/kubernetes-dashboard具有ClusterRole/kubernetes-dashboardrootmaster30 ~12:45:11# kubectl describe clusterrolebindings kubernetes-dashboardName: kubernetes-dashboard Labels:noneAnnotations:noneRole: Kind: ClusterRole Name: kubernetes-dashboard Subjects: Kind Name Namespace ---- ---- --------- ServiceAccount kubernetes-dashboard kubernetes-dashboard# ClusterRole/kubernetes-dashboard权限如下rootmaster30 ~12:45:47# kubectl describe clusterroles kubernetes-dashboardName: kubernetes-dashboard Labels: k8s-appkubernetes-dashboard Annotations:nonePolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- nodes.metrics.k8s.io[][][get list watch]pods.metrics.k8s.io[][][get list watch]# deployments.apps/kubernetes-dashboard以sa/kubernetes-dashboard身份运行所以deployments.apps/kubernetes-dashboard部署的pod只可以查看资源nodes.metrics.k8s.io和pods.metrics.k8s.iorootmaster30 ~12:46:08# kubectl get deployments.apps kubernetes-dashboard -o yaml|grep serviceAccountserviceAccount: kubernetes-dashboard serviceAccountName: kubernetes-dashboard修改 service/kubernetes-dashboard 类型为 NodePort从外部访问。rootmaster30 ~12:47:41# kubectl edit svc kubernetes-dashboardspec:......type: LoadBalancer rootmaster30 ~12:48:21# kubectl get svc kubernetes-dashboardNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)AGE kubernetes-dashboard LoadBalancer10.98.217.13210.1.8.41443:31487/TCP 14m使用ingress配置访问参考apiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:ingress-dashboardnamespace:kubernetes-dashboardannotations:# 关键透传 TLSIngress 不解密nginx.ingress.kubernetes.io/ssl-passthrough:truenginx.ingress.kubernetes.io/backend-protocol:HTTPSspec:ingressClassName:nginxrules:-host:dashboard.laoma.cloudhttp:paths:-path:/pathType:Prefixbackend:service:name:kubernetes-dashboardport:number:443客户端配置dashboard.laoma.cloud域名到ingress服务地址实验环境是10.1.8.40后续直接访问https://dashboard.laoma.cloud访问 Dashboard访问 https://10.1.8.41新版本Kubernetes Dashboard 新版本只支持使用 Bearer Token登录。rootmaster30 ~12:48:39# kubectl create token -n kubernetes-dashboard kubernetes-dashboardeyJhbGciOiJSUzI1NiIsImtpZCI6IkR0N3owR1lHaVNtbDdsSDhHRDNiZkN0MWF1aEtOT3ZSZUxKbkFwUUE2UncifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzg2NzczMDIwLCJpYXQiOjE3ODY3Njk0MjAsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiODQ1MTA5MDMtZTkwZC00ZWE3LTg0ZDQtODAyOTZlM2NiMDdmIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInVpZCI6IjZkYjQ1MWRmLTQzMzUtNDE3My1iNzZlLTJkMzYyNDE5MmVlZiJ9fSwibmJmIjoxNzg2NzY5NDIwLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQifQ.UXHtTs0aRcXwpi5JFe22J0I9eq1Bz--TX3RQTTyQoOkQNeJpALSij1tiviQIrtWqUe4Of45RG4ar9RJjmILKiSB_jrAoCX3mn8sM1Y8D6qiAC6mbDjoQFSTzjEok-ORhmkxmtNz2hZUS2Y4JZkHU6HAkZbNt-Huhwlrp3FPBJvOzpNX2GFUp8VkGusTy4zNkCSIAAqgb45xi78cxhXpAt_SiHSo2vBJQK3HmbGkhtyEtP84ilGJrW707lGwkHjpk6ky8fHPfh08nCD8UXG9uFEFm5U3dOZOKLBEUy_YzjPoMtIQ-99SGcF5MYpNBc-g7Shk-qc5bsSiGPPzh9KPAEw#当前直接创建的token登录进去没有权限操作Kubernetes Dashboard 默认部署时只配置了最低权限的 RBAC。因此我们要创建一个名为admin-user的 ServiceAccount再创建一个 ClusterRolebinding将其绑定到 Kubernetes 集群中默认初始化的cluster-admin这个 ClusterRole。rootmaster30:~# cat kubernetes-dashboard-admin.yaml EOFapiVersion: v1 kind: ServiceAccount metadata: name: kubernetes-dashboard-admin namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kubernetes-dashboard-admin namespace: kubernetes-dashboard EOFrootmaster30 ~12:53:53# kubectl apply -f kubernetes-dashboard-admin.yaml# 创建 Bearer Tokenrootmaster30 ~12:53:58# kubectl -n kubernetes-dashboard create token kubernetes-dashboard-admineyJhbGciOiJSUzI1NiIsImtpZCI6IkR0N3owR1lHaVNtbDdsSDhHRDNiZkN0MWF1aEtOT3ZSZUxKbkFwUUE2UncifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzg2NzczMjc2LCJpYXQiOjE3ODY3Njk2NzYsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiYTI2MGYwNDQtOTBmYi00MTE5LTk3ZmMtNTkwYjg0ODU5ZTYzIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiIsInVpZCI6IjQ3YzA2MDgyLTk2YzQtNGUwNS1iNTk1LTVlZTI4YjMxMmVkYyJ9fSwibmJmIjoxNzg2NzY5Njc2LCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQtYWRtaW4ifQ.UnD6-GI-uqOadFwFC35UIk2MzjbJV2U7oowYOKWaOC2YN0RIK7wabej4YHMhH0I7pyti1F5ilw8Z4AszQL5JpoJHzAqwJ4CFuANieYE5RqO0aVbj3gO-q1jNh8TcfyxLYshFcB6h9ee2wMQi8C6HbgD8CJ4A1xv_rBGGmyrhIffrrO-J6XKI2G3p7IA5gRatK_LVPzaVkykCMgd1sfm6w9xI1FIc3hlwtE60PxVf8igoO67XMfY-CBMQsaNJXegyXzYZlfNaTs3raj2H8kb0O6b4mk2DT47PRdlcoNeYfR8QbdjF96KbXDji9bl1H9IaPgohKbaD3u1Wi6JtAdcVSQ提示Token默认有效期24小时过期后自动删除。下一次登录需要生成新的Token。分析 SA 使用案例Kubernetes Dashboard 默认部署时只配置了最低权限的 RBAC。接下来分析默认的权限配置。# Kubernetes Dashboard 以deployment形式运行rootmaster30 ~12:54:36# kubectl get deployments.appsNAME READY UP-TO-DATE AVAILABLE AGE dashboard-metrics-scraper1/11128m kubernetes-dashboard1/11128m# 以 serviceAccount: kubernetes-dashboard 身份运行rootmaster30 ~13:02:13# kubectl get deployments.apps kubernetes-dashboard -o yaml|grep serviceAcserviceAccount: kubernetes-dashboard serviceAccountName: kubernetes-dashboard# serviceAccount: kubernetes-dashboard 绑定了Role/kubernetes-dashboardrootmaster30 ~13:02:21# kubectl get rolebindingsNAME ROLE AGE kubernetes-dashboard Role/kubernetes-dashboard 35m# Role/kubernetes-dashboard 具备能力如下rootmaster30 ~13:02:53# kubectl describe role kubernetes-dashboardName: kubernetes-dashboard Labels: k8s-appkubernetes-dashboard Annotations:nonePolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- secrets[][kubernetes-dashboard-certs][get update delete]secrets[][kubernetes-dashboard-csrf][get update delete]secrets[][kubernetes-dashboard-key-holder][get update delete]configmaps[][kubernetes-dashboard-settings][get update]services/proxy[][dashboard-metrics-scraper][get]services/proxy[][heapster][get]services/proxy[][http:dashboard-metrics-scraper][get]services/proxy[][http:heapster:][get]services/proxy[][https:heapster:][get]services[][dashboard-metrics-scraper][proxy]services[][heapster][proxy]# 创建 serviceAccount: kubernetes-dashboard Tokenrootmaster30:~# kubectl -n kubernetes-dashboard create token kubernetes-dashboard#这个token没有啥权限
RELATED

相关推荐

YOLO坐姿检测实战:从303张数据集到模型部署全流程

YOLO坐姿检测实战:从303张数据集到模型部署全流程

简介:目标检测是计算机视觉的核心任务,其原理是通过算法在图像中定位并识别特定对象。YOLO系列算法因其出色的实时性能与精度平衡,成为工业界热门选择。这项技术的核心价值在于将通用视觉能力转化为解决垂直场景问题的实际工具,例…

📅 2026/10/21 9:10:54
YOLOv8坐姿检测实战:从数据集构建到模型部署全流程解析

YOLOv8坐姿检测实战:从数据集构建到模型部署全流程解析

简介:目标检测是计算机视觉的核心任务之一,其原理是通过算法在图像或视频中定位并识别出感兴趣的目标。这项技术的价值在于能将视觉信息转化为结构化数据,广泛应用于安防监控、自动驾驶、工业质检等领域。在实际工程中,高质量的数…

📅 2026/10/24 2:49:42
排序-堆排序(Heap Sort)

排序-堆排序(Heap Sort)

目录 前言: 堆排序思路 为什么升序 → 建大根堆;降序 → 建小根堆。 演示图如下: 代码如下: 练习 排序的时间复杂度与空间复杂度 结语: 前言: 排序算法是计算机数据处理领域最基础、最核心的一类算…

📅 2026/10/24 20:00:32
MORE NEWS

更多资讯

📰

电工证过期时间你知道吗?内部消息告诉你怎么转异地

电工证过期时间你知道吗?内部消息告诉你怎么转异地 你现在急需特种作业证才能上岗找工作,电工证过期时间成了你最关心的问题之一。很多学员在安阳培训后,发现证书有效期只有6年,一旦过期,不仅影响工作,还可能面临重新考试的麻烦。更让人头疼的是,证书…

📰

邳州在哪审电工证多少钱?工地太忙根本没时间复习考试

邳州在哪审电工证多少钱?工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是大多数电工、焊工、高处作业人员的真实写照。尤其是像邳州这样的地区,特种作业操作证的审核和复审流程相对复杂,很多人因为时间紧张,往往在关键时刻才发现自己证照过…

📰

义乌哪里换电工证在哪考 工地太忙根本没时间复习考试

义乌哪里换电工证在哪考 工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,你是不是也经常被这个问题困扰?特别是像低压电工证、高压电工证这类特种作业操作证, 换证…

📰

在校生电工证考试报名能跨省转移吗?考前押题资料怎么获取

在校生电工证考试报名能跨省转移吗?考前押题资料怎么获取 之前考的证在外省能不能转过来?这几乎是所有在外省打工或读书的小伙伴最关心的问题。尤其是像你这样在濮阳读书的在校生,如果之前在别的地方考了电工证,想要在本地继续使用,肯定得先搞清楚转移流…

📰

初级电工证报名哪里好网上查询实操考试怎么准备

初级电工证报名哪里好网上查询实操考试怎么准备 实操考试心里没底怕挂科,这是很多准备考初级电工证的学员最真实的状态。尤其是对于安阳公路工程从业者来说,电工证不仅是上岗的门槛,更关系到日常作业的安全责任。初级电工证报名哪里好?网上查询信息不统一…

📰

南宁那里办电工证怎么考怎么考过 郑州报考避坑指南

南宁那里办电工证怎么考怎么考过 郑州报考避坑指南 证书过期了不知道怎么复审延期?别慌,南宁那里的电工证办理流程其实不难,关键是你得知道怎么操作。今天我们就来聊聊南宁地区电工证的报考、复审、薪资前景以及避坑指南,尤其是针对郑州地区报考者的一些…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬