获取 Kubernetes 集群管理员 Token 的方法
警告:管理员 Token 拥有集群的完全控制权限,请谨慎使用并妥善保管。不建议在生产环境中长期使用管理员 Token,而应该使用 RBAC 分配最小必要权限。
方法1:获取默认集群管理员 Token (如果有)
kubectl get secret -n kube-system $(kubectl get sa -n kube-system | grep admin | awk '{print $1}') -o jsonpath='{.data.token}' | base64 --decode
方法2:创建临时管理员 ServiceAccount 并获取 Token
# 创建管理员 ServiceAccount
kubectl -n kube-system create serviceaccount admin-user
# 创建 ClusterRoleBinding
kubectl create clusterrolebinding admin-user-binding --clusterrole=cluster-admin --serviceaccount=kube-system:admin-user
# 获取 Token
kubectl -n kube-system get secret $(kubectl -n kube-system get sa admin-user -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode
方法3:使用 Kubernetes 1.24+ 的 TokenRequest API
# 创建临时管理员 Token (默认有效期1小时)
kubectl create token admin-user --duration=8760h -n kube-system --bound-object-kind ClusterRole --bound-object-name cluster-admin
方法4:从 kubeconfig 中提取当前上下文 Token
kubectl config view --minify --raw -o jsonpath='{.users[0].user.token}'
安全建议
- 获取到的 Token 应当立即使用,不要存储在明文文件中
- 考虑设置较短的过期时间
- 使用完毕后及时撤销权限
- 在生产环境,建议使用更细粒度的 RBAC 权限而非集群管理员权限
验证 Token 有效性
TOKEN=<上面获取到的token>
curl -k -H "Authorization: Bearer $TOKEN" https://<your-api-server-address>:6443/api/v1/namespaces
请将 <your-api-server-address>
替换为你自个的 Kubernetes API 服务器地址。