Skip to content

k8s 创建 api token

Kubernetes 新版(v1.22+ 版本之后)因安全原因未自动创建 token,需要手动进行创建
此篇记录新版创建 token 方法(旧版同样适用)

1. 创建 ServiceAccount

yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: apiadmin
  namespace: kube-system
  • apiadmin 为账号名称

2. 创建 ClusterRoleBinding

yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: apiadmin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: apiadmin
    namespace: kube-system
  • apiadmin 为账号名称

3. 创建 Secret

yaml
apiVersion: v1
kind: Secret
metadata:
  name: apiadmin-secret
  namespace: kube-system
  annotations:
    kubernetes.io/service-account.name: apiadmin
type: kubernetes.io/service-account-token
  • apiadmin 为账号名称

重要

  • Kubernetes 在 v1.22 版本之前在创建 ServiceAccountClusterRoleBinding 之后会自动创建 token;就不需要手动创建 Secret 了(不需要此步骤3)
  • 在 v1.22+ 版本之后必须手动创建 Secret,网上大多还是只有前2步骤文档,需要注意

4. 获取 token

bash
kubectl -n kube-system describe secrets/apiadmin-secret
# 或者
kubectl -n kube-system describe secret apiadmin-secret
bash
# 其实本质上一样,因为是自动创建的 token,所以需要先获取 token 的准确名称
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep apiadmin | awk '{print $1}')
  • 在输出内容中复制出 token 值即可
  • apiadmin-secret 为第3步中指定的 Secret 名称

参考