给 k3s 集群用 Kubernetes Dashboard提供一个 Web UI 界面

前面文章利用 3个树莓派搭建一个k3s 集群,并且在 Mac 上用 k3sup管理 介绍了如何搭建 k3s 集群,也成功地部署了 nginx,但是每次都用命令行查看信息,显得不太直观,所以最好能有一个 Web 界面,会更方便管理 k3s。

那么部署一个Kubernetes Dashboard 就可以很好管理。本来觉得应该很简单就能部署好,但是技术发展是很快的,网上找的教程,包括 ChatGPT 给的都是很杂乱的,很难从头到尾安装完成。

其实对于技术性的资料,最好的还是要去官方找。我写文章其实更多的是总结、呈现出我遇到的问题。

Kubernetes Dashboard 是 Kubernetes 官方提供的一个 Web UI 界面,可以让用户更方便地管理和监控 Kubernetes 集群。它提供了一些常用的操作,如查看集群状态、创建和删除资源对象、查看应用程序日志等。Kubernetes Dashboard 还支持多个集群的管理,并且可以根据不同权限分配不同角色。

安装Kubernetes Dashboard

源码地址:GitHub - kubernetes/dashboard: General-purpose web UI for Kubernetes clusters
README.md中,可以看到安装的方式

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

在安装的过程中,国内会出现raw.githubusercontent.com 访问不了 的问题,可以将这个recommended.yaml(目前是v2.7.0 版本)文件打开,将里面的内容复制出来,在本地建一个kubernetes-dashboard.yaml文件,将内容拷贝到里面,然后用以下命令:

kubectl apply -f kubernetes-dashboard.yaml

这时候可以通过命令kubectl get svc -A 查看。

访问Kubernetes Dashboard

  1. 从本地访问,先建立一个安全通道,运行以下命令
kubectl proxy
  1. 现在访问以下地址:
    http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login
    image.png

需要输入 Token

  1. 创建 Service 账户
    建一个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

该YAML文件的目的是在Kubernetes集群中创建一个名为“admin-user”的服务账户,并将该账户授予超级管理员权限,以便用户可以在Kubernetes Dashboard上执行各种操作。

  • ServiceAccount即“服务账户”,通常用于授权应用程序在Kubernetes集群内运行时所需的访问范围和权限。在这里,创建了一个名为admin-userServiceAccount,并将其创建在名为kubernetes-dashboard的namespace中。
  • ClusterRoleBinding即“集群角色绑定”,其可以将一个或多个角色绑定到一个或多个主体。在这里,创建了一个名为admin-userClusterRoleBinding,并将其绑定到了一个名为cluster-adminClusterRole(即用于授予超级管理员权限的角色)。同时,该绑定规则只适用于一个kind为ServiceAccount,名称为admin-user,且位于kubernetes-dashboard命名空间中的主体。

接着用kubectl apply -f dashboard-adminuser.yam命令运行

  1. 获取 Token
    执行以下命令,可以获取到 Token
kubectl -n kubernetes-dashboard create token admin-user

获取到的内容如下:
image.png
现在将这个填入
image.png
点击登录可以看到管理界面
image.png


以下内容可以不用看,我只是想快速访问Kubernetes Dashboard,用http://<节点ip>:port的方式

将Kubernetes Dashboard修改为NodePort类型

  1. 编辑Kubernetes Dashboard的相关YAML文件,找到Kubernetes Dashboard的Service部分。通常这个文件位于kubernetes-dashboard namespace中,以kubernetes-dashboard.yaml为文件名。您可以使用以下命令进行编辑:
kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
  1. 找到Service的spec部分,然后将type由ClusterIP修改为NodePort,同时在spec部分中添加一个nodePort字段来指定访问端口。例如,将以下内容:
...
spec:
  selector:
    k8s-app: kubernetes-dashboard
  ports:
  - port: 443
    targetPort: 8443
...

修改为如下内容:

...
spec:
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort
  ports:
  - port: 443
    targetPort: 8443
    nodePort: 30000   // 添加nodePort字段
...

在这个例子中,添加的nodePort为30000,您可以自由选择一个未占用的节点端口。
3. 保存并退出编辑器。Kubernetes会自动更新Service并将其调整为NodePort类型。
4. 使用kubectl查看Kubernetes Dashboard的Service和Pod状态:

kubectl -n kubernetes-dashboard get services
kubectl -n kubernetes-dashboard get pods

如果一切正常,您应该会看到Kubernetes Dashboard的Service处于NodePort类型,并且可以通过http://<节点ip>:的方式进行访问。

注意:使用NodePort类型的Service会暴露Dashboard在所有节点上,可能存在安全风险,因此建议仅在测试环境中使用。在生产环境中,您可以使用Ingress控制器或者通过VPN等方式进行访问控制。


已发布

分类

作者:

标签

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注