如何获取Kubernetes中提交Job任务的操作用户名
Kubernetes查询Job提交者用户名的可行方案
Kubernetes API默认不会将资源提交者的身份信息持久化存储到Job等资源对象的元数据中,所以直接使用kubectl get/kubectl describe查询Job本身是拿不到提交用户信息的,你可以通过以下几种方式实现查询:
1. 从审计日志查询
如果集群开启了API Server审计日志,直接过滤对应Job创建事件即可获取提交者信息:
- 审计日志中
objectRef.resource为jobs、verb为create的事件,user.username字段就是提交Job的用户名 - 如果你的审计日志输出到文件,可使用如下命令过滤(替换对应参数):
grep '"objectRef":{"resource":"jobs","name":"你的Job名称","namespace":"你的命名空间"}' 审计日志路径 | grep '"verb":"create"' | jq '.user.username'
2. 通过Event事件查询(仅适用于创建时间较短的Job)
Kubernetes事件默认保留时间较短(通常为1小时),如果Job是近期创建的,可以通过事件过滤:
kubectl get events -n 你的命名空间 --field-selector involvedObject.kind=Job,involvedObject.name=你的Job名称,reason=Created
如果事件输出中Source字段包含用户名,或者Message字段有提交者相关信息即可获取,否则还是需要依赖审计日志。
3. 前置拦截注入元数据(后续提交的Job可直接查询)
如果需要后续所有Job都可直接查询提交者,可以配置MutatingAdmissionWebhook,在Job创建时自动将提交者用户名注入到Job的annotations中,后续就可以直接通过如下命令查询:
kubectl get job 你的Job名称 -o jsonpath='{.metadata.annotations.k8s\.io\/created-by}'
内容的提问来源于stack exchange,提问作者David Parks
相关产品推荐
相关产品推荐

