Kubernetes Dashboard 是官方开发的仪表盘,可以方便地查看集群信息和管理集群资源。
对于初学者来说,还是很好的学习途径,可以直观地感受 Kubernetes 的各种概念,很多管理操作也都会直接给出相应命令。
这篇文章将介绍如何安装 Dashboard,与及如何创建相关的 ServiceAccount 和登录令牌。
1. 安装 Helm
Kubernetes Dashboard 官方仅提供了 Helm 安装方式,因此需先安装 Helm。
Helm 的安装非常简单:直接将执行文件 helm 移动到 /usr/local/bin/ 目录即可。
# 下载安装包
wget https://get.helm.sh/helm-v3.19.0-linux-amd64.tar.gz
# 解压
tar -zxvf helm-v3.19.0-linux-amd64.tar.gz
# 移动执行文件到 bin 目录
sudo mv linux-amd64/helm /usr/local/bin/helm
2. 安装 Dashboard
1.1. 准备镜像(可选)
为了避免网络影响,我们可以预先拉取(导入)镜像到主节点。
所需镜像及版本:Dashboard: releases
#!/bin/bash
#
# 拉取 kubernetes-dashboard-7.13.0 所需镜像
set -euxo pipefail
# 镜像列表
images=(
docker.io/kubernetesui/dashboard-api:1.12.0
docker.io/kubernetesui/dashboard-auth:1.3.0
docker.io/kubernetesui/dashboard-metrics-scraper:1.2.2
docker.io/kubernetesui/dashboard-web:1.7.0
docker.io/library/kong:3.8
)
# 拉取镜像
for imageName in ${images[@]} ; do
sudo crictl pull $imageName
done
# 创建导出目录
mkdir -p docker.io/kubernetesui/
mkdir -p docker.io/library/
# 导出镜像
for imageName in ${images[@]} ; do
sudo ctr -n=k8s.io images export ${imageName}.tar $imageName
done
# 导入镜像
for imageName in ${images[@]} ; do
sudo ctr -n=k8s.io images import ${imageName}.tar
done
1.2. 在线安装
# 添加仓库
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
# 创建命名空间,安装 dashboard-7.13.0 版本
helm install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --version 7.13.0 --create-namespace --namespace kubernetes-dashboard
# 或:创建命名空间,升级(或安装)最新版本 dashboard
# 注意:安装最新版本,预导入镜像的版本需与最新版本相匹配
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard
1.3. 离线安装
我们也可以先将 chart 下载到本地,然后执行离线安装。
# 下载 chart
wget https://github.com/kubernetes/dashboard/releases/download/kubernetes-dashboard-7.13.0/kubernetes-dashboard-7.13.0.tgz
# 创建命名空间,安装指定版本的 dashboard
helm install kubernetes-dashboard kubernetes-dashboard-7.13.0.tgz --version 7.13.0 --create-namespace --namespace kubernetes-dashboard
1.4. 安装日志
如果安装成功,将会出现类似日志:
# 省略 ......
Congratulations! You have just installed Kubernetes Dashboard in your cluster.
To access Dashboard run:
kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard-kong-proxy 8443:443
# 省略 ......
Dashboard will be available at:
https://localhost:8443
2. 访问 Dashboard
Dashboard 的服务默认为 ClusterIP 类型,如果想要访问还需额外配置。
这里列举两种方式:①NodePort;②端口转发。
官方文档:accessing-dashboard
2.1. NodePort
kubectl edit svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard
通过上述命令打开服务配置,将 type: ClusterIP 改为 type: NodePort。
修改之后,具体访问IP和端口根据环境而定,譬如我这里可用 https://192.168.50.130:31887 访问。
⚠ 警告:此方式可通过公网 IP 直接访问,由于 Dashboard 的权限管理较弱,并不建议在正式环境使用。
2.2. 端口转发
kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard-kong-proxy 8443:443
通过上述命令配置端口转发,可通过 https://localhost:8443 访问。
由于 localhost 地址只能在服务器内部访问,而服务器通常不会安装有浏览器。
因此,我们还需通过 SSH 来建立本地到远程服务器之间的隧道来转发请求。
# 隧道转发请求
ssh -L 8443:localhost:8443 patrick@192.168.50.130
隧道建立后,我们就可以通过本地浏览器来访问 Dashboard 了。
这种方式相比 ①NodePort 更安全。
3. 访问控制
通过上面步骤,我们已经可以通过浏览器访问 Dashboard 登录界面,但还无法登录和操作。
我们还需:① 创建 ServiceAccount,并赋予相应权限;② 创建登录令牌。
官方文档:
3.1. 创建 ServiceAccount
创建配置文件:
vim dashboard-user.yaml
配置内容如下:
# 创建 ServiceAccount
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
应用配置:
kubectl apply -f dashboard-user.yaml
3.2. 创建登录令牌
登录令牌有两种类型,一是临时 Token,默认时效为 1 小时;二是长效 Token。
3.2.1. 临时 Token
kubectl -n kubernetes-dashboard create token admin-user
# 输出内容
eyJhbGciOiJSUzI1NiIsImtpZCI6IkFEUl # 省略……
3.2.2. 长效 Token
创建配置:
vim dashboard-user-secret.yaml
配置内容:
apiVersion: v1
kind: Secret
metadata:
name: admin-user
namespace: kubernetes-dashboard
annotations:
kubernetes.io/service-account.name: "admin-user"
type: kubernetes.io/service-account-token
应用配置:
kubectl apply -f dashboard-user-secret.yaml
获取长期 Token:
kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath="{.data.token}" | base64 -d
3.3. 小结
这一节我们创建了 ServiceAccount,并且介绍了如何创建登录令牌。
现在,我们只需将控制台输出的 Token 粘贴到登录界面,即可愉快地使用 Dashboard 了。
注意:⚠ 示例创建的
admin-user有极大权限,正式环境请根据不同用户角色授予适当权限。
4. 结语
Kubernetes-Dashboard 的安装并不复杂,只是有些繁琐。
如果要在生产环境使用,需更多考虑的是通信安全和权限设置。
5. 参考文档
https://kubernetes.io/docs/reference/access-authn-authz/authentication/
https://github.com/kubernetes/dashboard/blob/master/docs/README.md
https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/