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

Helm: install

Helm: releases

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,并赋予相应权限;② 创建登录令牌。

官方文档:

Dashboard: access-control

Dashboard: creating-sample-user

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/