第一步:创建 ServiceAccount

首先,我们创建一个名为 k3s-api-admin 的服务账号。

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: k3s-api-admin
  namespace: kube-system
EOF

第二步:绑定角色 (ClusterRoleBinding)

给这个账号赋予 cluster-admin(管理员)/view(只读用户) 权限,这样它就可以访问集群内的所有资源。

cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: k3s-api-admin-binding
subjects:
- kind: ServiceAccount
  name: k3s-api-admin
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: view
  apiGroup: rbac.authorization.k8s.io
EOF

第三步:手动创建 Token Secret

这是关键一步。我们需要创建一个类型为 kubernetes.io/service-account-token 的 Secret,并将其注解(annotation)指向上面创建的账号。

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: k3s-api-admin-token
  namespace: kube-system
  annotations:
    kubernetes.io/service-account.name: k3s-api-admin
type: kubernetes.io/service-account-token
EOF

第四步:提取 Token 字符串

创建成功后,你可以通过以下命令直接提取出用于 HTTP Header 的 Token 字符串:

kubectl -n kube-system get secret k3s-api-admin-token -o jsonpath='{.data.token}' | base64 --decode

如何使用这个 Token 对接 API?

拿到那一串长长的字符串后,你可以通过 curl 进行测试:

# 设置变量
TOKEN="你的Token字符串"
APISERVER="https://<K3S服务器IP>:6443"

# 访问 Pods 列表示例
curl -k -H "Authorization: Bearer $TOKEN" $APISERVER/api/v1/namespaces/default/pods

标签: k3s, API

添加新评论