k3s HTTP API view role
第一步:创建 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