如何查看所有用户向Kubernetes集群发出的kubectl命令?
Kubernetes 原生实现kubectl操作命令查询方案
有原生方案,核心依赖Kubernetes自带的审计日志功能,无需安装第三方组件即可实现所有集群操作请求的记录,其中就包含所有用户通过kubectl发起的操作。
实现步骤
1. 开启kube-apiserver审计能力
你需要修改kube-apiserver的启动参数,新增以下配置项:
--audit-policy-file:指定审计策略文件的绝对路径,用来定义需要记录的请求范围--audit-log-path:指定审计日志输出的文件路径,设置为-则输出到标准输出--audit-log-maxage:审计日志最多保留的天数--audit-log-maxbackup:最多保留的审计日志文件数量--audit-log-maxsize:单个审计日志文件的最大容量,单位为MB
修改完成后重启kube-apiserver生效。
2. 配置审计策略
你可以根据需求调整审计粒度,以下是可覆盖所有kubectl操作的最小策略示例:
apiVersion: audit.k8s.io/v1 kind: Policy rules: # 记录所有已认证用户的完整请求、响应内容 - level: RequestResponse user: group: ["system:authenticated"] omitStages: - "RequestReceived"
说明:审计级别设置为
RequestResponse即可完整记录请求的操作类型、操作对象、请求参数,对应kubectl执行的apply、delete、edit等所有操作的具体内容都会被留存。
3. 检索kubectl操作记录
审计日志中user.username字段对应发起请求的用户身份,verb字段对应操作类型(get、create、delete、patch等),requestObject、requestURI字段存储了具体操作的资源、参数信息,你可以直接用命令过滤日志:
- 检索所有用户的创建操作:
grep '"verb":"create"' <你的审计日志文件路径> - 检索指定用户的所有操作:
grep '"username":"<目标用户名>"' <你的审计日志文件路径>
注意事项
- 审计日志会占用磁盘空间,建议根据集群操作频率调整日志保留规则,避免磁盘被占满
- 如果是云厂商托管的K8s集群,一般审计功能已经内置,直接在集群控制台开启即可,不需要手动修改apiserver配置
- 审计日志会记录所有调用apiserver的请求(包括集群控制器、第三方组件的请求),你可以调整审计策略过滤只保留普通用户的操作,减少日志存储量
内容的提问来源于stack exchange,提问作者humble_wolf
相关产品推荐
相关产品推荐

