写点什么

软件测试 | Dashboard 是什么?

  • 2023-03-05
    北京
  • 本文字数:2116 字

    阅读完需:约 7 分钟

K8S Dashboard 是一个带有图形界面的集群管理服务, 带有基本的监控和运维管理功能, 虽然对于熟悉 K8S 的人来说这个服务显得比较鸡肋,因为更习惯使用命令行来操作集群并且命令行更灵活更强大。 但是对于初学者来说,使用 K8S Dashboard 倒也是个不错的选择。 要安装 Dashboard 首先需要 下载 它的配置文件。

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml
复制代码

这个配置文件里包含了启动 Dashboard 所需要的所有资源对象的配置。只需要使用 kubectl creaet -f 命令就可以进行创建。 但是在这里不能直接创建,因为官方的配置文件中并没 有将容器网络暴露出来。也就是无法与 Dashboard 容器进行网络通信。 所以需要修改这段配置文件中 关于 Service 的配置

kind: ServiceapiVersion: v1metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboardspec: ports: - port: 443 targetPort: 8443 selector: k8s-app: kubernetes-dashboard
复制代码

上面这段是 dashboard 中对于 Service 的配置, 需要修改成下面的样子:

kind: ServiceapiVersion: v1metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboardspec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 30022 selector: k8s-app: kubernetes-dashboard
复制代码

通过上面的配置细节可以看出来针对原始配置修改了 2 处地方:

  • 在 spec 字段下面添加了 type 字段,值为 NodePort。意思是要暴露 NodePort 类型的网络。 这种 网络可以理解为跟 Docker 一样是通过端口映射来完成的。所以下面还会指定 nodePort:30022 来 指定宿主机的对应端口。只不过这里不一样的是,当用户在 Service 中指定了对应的端口后,它不 仅仅针对当前 POD 所在节点生效,而是针对所有节点都会生成对应的端口映射规则。 也就是说用 户可以使用任意节点的 ip 地址+端口号都可以对其进行网络访问。 因为 K8S 在集群的每一个节点 中 都会启动一个名为 kube-proxy 的服务,当创建了一个 Service 后, 集群中每个节点的 kubeproxy 都会通过 iptables 创建对应的端口映射规则。

  • 在 ports 字段下添加了一个新的字段叫 nodePort,用来指定具体映射到哪个端口上, 如果用户没 有指定这个字段,那么 K8S 会随机为这个 Service 选取一个端口号通过这样的修改后再通过 kubectl create -f 命令来创建后就可以在浏览器上访问 Dashboard 了。 但是这里需要解释一 下 Service 的工作原理。 在上一个章节中讲到在 K8S 中任何资源都是可以被打上 Label 的,这些 Label 是 K8S 用来管理调度的重要机制。 也是资源寻址的重要方式,可以通过 kubectl get pods -l {label} 的方式找到对应的一批 POD。 所以对于 Service 来说也是一样的, Service 本身的功能是接管容器网络,不论在集群外部还是内部与容器的网络通信都是先发送给 Service 再 由 Service 转发给对应的 POD。 而 Service 的寻址 POD 的方式就是通过 Label 寻址的,而 label 是一个 K,V 格式的字段。如下:

selector: k8s-app: kubernetes-dashboard
复制代码

这段配置声明 Service 会接管所有带有 k8s-app=kubernetes-dashboard 这个 Label 的 POD, 所以看 dashboard 的 POD 定义中,在 meatadata 字段内会有对应的定义:

metadata: labels: k8s-app: kubernetes-dashboard
复制代码

所以在修改 dashboard 文件的时候,注意不要碰 service 的 selector 字段,一但与 POD 的 label 不匹 配,就会出现错误。 当创建好 dashboard 后,就可以通过浏览器访问了。 但是第一次访问会提示选择 身份验证的方式, 分为 token 和 kubeconfig 文件两种。

之前已经介绍了 kubeconfig 文件的作用, 本次说明一下使用 token 的方式进行认证。首先需要获取 dashboard 的 secrets。

kubectl get secrets -n kubernetes-dashboardNAME TYPE DATA AGEdefault-token-96jkm kubernetes.io/service-account-token 3 117mkubernetes-dashboard-certs Opaque 0 117mkubernetes-dashboard-csrf Opaque 1 117mkubernetes-dashboard-key-holder Opaque 2 117mkubernetes-dashboard-token-hnjnh kubernetes.io/service-account-token 3 117m
复制代码

然后获取 secrets 中的 token 信息。

kubectl describe secrets -n kubernetes-dashboard kubernetes-dashboard-tokenhnjnh | grep token | awk 'NR==3{print $2}'eyJhbGciOiJSUzI1NiIsImtpZCI6ImJseFl2QkN0dzBxZ0pfVUtBYmM3U0k2cUFQeTUzaGFqZjkwWUZYUWU1TDQifQ.eyJpc3MiOiyrvuZb7I4DeIcaNDly_JxUJHFvpDDEFBHvwTOnCQNhL8NCpjXMlWAafTEd3tHi2pjrClyOSYC0DLNttLiK9-J_gEqsrWEO_GfSCk2BXoGGRZ0_1jok8P6mg4H4drszu_uwfJm4qR8eaiTCbSNaProzXQ97RwJYqq8a0rfmOWjueG_VHhKEfrQ8GMUvMvpH_2lt7BWh5pjFZDBD24Mj7TbYIacLKhRmut8tPku6Wgb4XPevvLvjXhmWRiAK2rivx_ptcRg8pJN4wD9SgJrk9xGD3LF6-htGuSfgGZb4nSiTN5sUGk8w
复制代码

把上面打印出来的 token 复制到页面上就可以正常操作 dashboard 了。 在 dashboard 中可以通过图形 界面完成大部分以前通过命令行才能完成的事情

搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | Dashboard是什么?_测试_测吧(北京)科技有限公司_InfoQ写作社区