20 扩展增强:Dashboard

最近更新:2026-06-21
来源:技术书栈原文。本页按授权迁移至 GoClub。

整体概览

通过前面的介绍,想必你已经迫不及待的想要将应用部署至 K8S 中,但总是使用 kubectl 或者 Helm 等命令行工具也许不太直观,你可能想要一眼就看到集群当前的状态,或者想要更方便的对集群进行管理。

本节将介绍一个 Web 项目 Dashboard 可用于部署容器化的应用程序,管理集群中的资源,甚至是排查和解决问题。

当然它和大多数 Dashboard 类的项目类似,也为集群的状态提供了一个很直观的展示。

img

如何安装

要想使用 Dashboard,首先我们需要安装它,而 Dashboard 的安装其实也很简单。不过对于国内用户需要注意的是需要解决网络问题,或替换镜像地址等。

这里我们安装当前最新版 v1.10.1 的 Dashboard:

  • 对于已经解决网络问题的用户:

可使用官方推荐做法进行安装,以下链接是使用了我提交了 path 的版本,由于官方最近的一次更新导致配置文件中的镜像搞错了。

  • 也可使用我修改过的这份(使用 Docker Hub 同步了镜像)仓库地址 GitHub, 国内 Gitee

当已经执行完以上步骤后,可检查下是否安装成功:

可以看到 Pod 已经在正常运行,接下来便是访问 Dashboard.

访问 Dashboard

以当前的部署方式,Service 使用了 ClusterIP 的类型,所以在集群外不能直接访问。我们先使用 kubectl 提供的 port-forward 功能进行访问。

还记得,我们在第 5 节时候安装过一个名为 socat 的依赖项吗? socat 的主要功能便是端口转发。

现在在浏览器打开 https://127.0.0.1:8443 便可看到如下的登录界面。

img

对于我们的 新版本 而言,我们 使用令牌登录 的方式。

查找 Token

首先,我们查看刚才创建出的 serviceaccount 可以看到其中有配置 secrets 。

查看该 secret 详情获得 Token

将此处的 token 填入输入框内便可登录,注意这里使用的是 describe。

img

修正权限

但是我们注意到这里有很多提示 configmaps is forbidden: User “system:serviceaccount:kube-system:kubernetes-dashboard” cannot list resource “configmaps” in API group “” in the namespace “default” 。根据我们前面的介绍,这很明显就是用户权限不足。

我们已经知道,当前我们的集群是开启了 RBAC 的,所以这里我们还是以前面学到的方法创建一个用户并进行授权。

  • 创建 ServiceAccount:
  • 创建 RoleBinding: 这里为了方便直接绑定了 cluster-admin 的 ClusterRole ,但是生产环境下,请按照实际情况进行授权,参考前面第 8 节相关的内容。

使用以上配置创建了用户和绑定,然后还是同样的办法获取 Token。

点击 Dashboard 右上角,退出登录后,重新使用新的 Token 进行登录。登录完成后便可看到如下图:

img

部署应用

点击右上角的 +创建 可进入创建页面,现在支持三种模式:从文本框输入;从文件创建;直接创建应用。

我们仍然以我们的示例项目 SayThx 为例。先 clone 该项目,并进入项目的 deploy 目录中。将 namespace.yaml 的内容复制进输入框,点击上传按钮,便可创建名为 work 的 Namespace 了。

通过以下命令验证:

可以看到 Namespace 已经创建成功。或者刷新下网页,点击左侧的命名空间即可看到当前的所有 Namespace 。

img

我们先将左侧的命名空间选择为 全部命名空间work (当刷新过网页后) ,接下来继续点击右上角的 +创建 按钮,将 redis-deployment.yaml 的内容复制进输入框,点击上传按钮,部署 Redis 。

部署成功后,点击 部署 ,点击刚才的 saythx-redis 便可看到其详情。

img

点击左侧的容器组,便可看到刚才部署的 Pod,

img

在此页面的右上角,可以点击命令行按钮,打开新标签页进入其内部执行命令。

img

或者是点击日志按钮,可打开新标签页,查看日志。

img

总结

本节我们介绍了 Kubernetes Dashboard 的基本功能,以及如何安装和使用它。

Dashboard 相比 kubectl 为用户提供了一种相对直观的 Web 端操作方式,但是并不能完全取代 kubectl,这两者应该是相辅相成的。

如果你所需的功能相对简单或是想要给某些用户提供一种通过 Web 操作的方式,那便推荐使用 Dashboard。Dashboard 的后端使用了 K8S 的 client-go ,前端主要使用了 Angular,有兴趣可以大致看看其源代码,对于开发基于 K8S 的云平台会有些启发。

下节,我们将介绍用于 DNS 和服务发现的插件 CoreDNS,学习如何利用它完成这些需求。并且它在 K8S 1.13 版本中,已经成为了默认的 DNS server。

内容反馈

发现错误或想补充内容?

GoClub 是静态知识库,评论功能不再加载第三方脚本。你可以在 GitHub 仓库提交 Issue,反馈会直接进入项目协作流程。

提交 GitHub 反馈