前面文章利用 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
- 从本地访问,先建立一个安全通道,运行以下命令
kubectl proxy
- 现在访问以下地址:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login
需要输入 Token
- 创建 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-user
的ServiceAccount
,并将其创建在名为kubernetes-dashboard
的namespace中。 - ClusterRoleBinding即“集群角色绑定”,其可以将一个或多个角色绑定到一个或多个主体。在这里,创建了一个名为
admin-user
的ClusterRoleBinding
,并将其绑定到了一个名为cluster-admin
的ClusterRole(即用于授予超级管理员权限的角色)
。同时,该绑定规则只适用于一个kind为ServiceAccount
,名称为admin-user
,且位于kubernetes-dashboard
命名空间中的主体。
接着用kubectl apply -f dashboard-adminuser.yam
命令运行
- 获取 Token
执行以下命令,可以获取到 Token
kubectl -n kubernetes-dashboard create token admin-user
获取到的内容如下:
现在将这个填入
点击登录
可以看到管理界面
以下内容可以不用看,我只是想快速访问Kubernetes Dashboard,用http://<节点ip>:port
的方式
将Kubernetes Dashboard修改为NodePort类型
- 编辑Kubernetes Dashboard的相关YAML文件,找到Kubernetes Dashboard的Service部分。通常这个文件位于
kubernetes-dashboard namespac
e中,以kubernetes-dashboard.yaml
为文件名。您可以使用以下命令进行编辑:
kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
- 找到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等方式进行访问控制。
发表回复