Kubernetes Authentication 模型表示特定用户或服务帐户如何在 k8s 集群中获得授权,但是 Authorization 方法确定是否来自集群访问者的初始请求,旨在对集群资源/对象执行一些操作,有足够的权限使之成为可能。
由于您在整个集群中为每个 Pod 使用了特定的服务帐户并授予它们特定的 RBAC 规则,因此可以使用 SelfSubjectAccessReview API 来检查对 k8s REST API 的请求和确定客户端的 Pod 服务帐户是否具有对目标的 Pod 命名空间执行任何操作的适当权限。
这可以通过使用kubectl auth can-i subcommand 提交用于模拟用户的基本信息来实现。
我假设您还可以在 HTTP 请求模式中查询 k8s 授权 API 组,然后解析 JSON/YAML 格式的结构化数据,如下例所示:
常规的kubectl auth can-i 命令检查default SA 是否可以检索default 命名空间中的Pod 数据:
kubectl auth can-i get pod --as system:serviceaccount:default:default
在 Bearer Token 身份验证中使用 JSON 类型的内容通过 HTTP 调用 k8s REST API 的等效方法:
curl -k \
-X POST \
-d @- \
-H "Authorization: Bearer $MY_TOKEN" \
-H 'Accept: application/json' \
-H "Impersonate-User: system:serviceaccount:default:default" \
-H 'Content-Type: application/json' \
https://<API-Server>/apis/authorization.k8s.io/v1/selfsubjectaccessreviews <<'EOF'
{
"kind": "SelfSubjectAccessReview",
"apiVersion": "authorization.k8s.io/v1",
"spec":{"resourceAttributes":{"namespace":"default","verb":"get","resource":"pods"}}
}
EOF
输出:
....“状态”:{
“允许”:是的,
"reason": "RBAC: RoleBinding 允许 ....