如何给Kubernetes的Dashboard创建合适的Token?

发布于:2025-06-29 ⋅ 阅读:(15) ⋅ 点赞:(0)

Kubernetes Dashboard 是 Kubernetes 提供的一个基于网页的用户界面,用于简化和监控 Kubernetes 集群的管理。它提供了一种直观的方式来部署、管理和排错容器化应用,以及查看和分析集群资源状态和报错信息。

在部署完K8s后, 为了后续的集群维护工作,一般都会安装Dashboard,

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


网站公告

今日签到

点亮在社区的每一天
去签到