Kubernetes Dashboard 是 Kubernetes 提供的一个基于网页的用户界面,用于简化和监控 Kubernetes 集群的管理。它提供了一种直观的方式来部署、管理和排错容器化应用,以及查看和分析集群资源状态和报错信息。
在部署完K8s后, 为了后续的集群维护工作,一般都会安装Dashboard,

- 登录Dashboard
有两种方式,使用服务账户的token或者通过kubeconfig登录。第一种方式灵活性更高,实际生产中都采用Token的登录方式。
默认Dashboard在安装后,会创建一个服务账号“ dashboard-read-user”,该服务账号绑定集群角色“dashboard-read-clusterrole”,该角色可以只读访问整个集群。使用下面命令获取用户“dashboard-read-user”的token,
kubectl -n kube-system create token dashboard-read-user
默认生成的token有效时长较短,可以通过选项“--duration”来指定,比如生成一个有效期2小时的token,
kubectl -n kube-system create token dashboard-read-user --duration 120m
将上面命令输出的Token输入到Dashboard的登录页面,就可以完成登录,
服务账号“dashboard-read-user” 的权限不足,不能完成日常的维护任务,比如重启pod,增加pod的副本数等,
我们需要人为生成权限合适的服务账户。
- 自定义Token
为了满足日常的配置工作,需要自定义服务账号,并绑定自建角色。Token和服务账号绑定,创建正确权限的服务账号,然后生成该账号的Token就可以满足我们的日常工作需求。
比如有一个命名空间为“rocket”,创建一个服务账号“manage-rocket”,该账号对“rocket”命名空间的pod资源有管理权限,对集群的其他资源有只读权限,
# 创建服务账号manage-rocket
kubectl create serviceaccount manage-rocket -n rocket
执行下面yaml文件,创建角色“pod-reader-writer”,该角色可以管理命名空间“rocket”的pod资源,
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: rocket
name: pod-reader-writer
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
创建两个“角色绑定”,将服务账户“manage-rocket”与上面创建的角色“pod-reader-writer”和已有的集群角色“dashboard-read-clusterrole”绑定。执行下面yaml文件,
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: manage-rocket-rw
namespace: rocket
subjects:
- kind: ServiceAccount
name: manage-rocket
namespace: rocket
roleRef:
kind: Role
name: pod-reader-writer
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: manage-rocket-cluster-read
namespace: rocket
subjects:
- kind: ServiceAccount
name: manage-rocket
namespace: rocket
roleRef:
kind: ClusterRole
name: dashboard-read-clusterrole
apiGroup: rbac.authorization.k8s.io
完成上面的操作后,服务账号“mange-rocket”便可以操作rocket命名空间的pod,并可以只读访问整个集群的资源。使用下面命令生成token,
kubectl -n rocket create token manage-rocket
生成的Token便可以用来操作命名空间rocket中的pod。
上面提到token有时效性,如果要生成长久的凭据,可以使用Secret资源。
运行下面yaml文件,
apiVersion: v1
kind: Secret
metadata:
name: manage-rocket-token
namespace: rocket
annotations:
kubernetes.io/service-account.name: manage-rocket
type: kubernetes.io/service-account-token
生成长久token,
kubectl get secret manage-rocket-token -n rocket -o jsonpath='{.data.token}' | base64 --decode