如何查询Kubernetes中被删除的资源、操作人及对应日志的查看与收集方法
Kubernetes 已删除资源及操作人查询方案
查询核心依据:kube-apiserver 审计日志
Kubernetes 所有资源的操作请求都会经过 kube-apiserver 处理,只要集群开启了审计日志,所有删除操作的全链路信息都会被留存,是查询删除操作的唯一可靠来源。
前置检查:确认集群审计日志开启状态
执行以下命令检查 kube-apiserver 是否配置了审计策略:kubectl get pods -n kube-system -l component=kube-apiserver -o yaml | grep audit-policy-file
如果有返回配置路径说明审计功能已开启,无返回则需要先配置审计策略后才能查询历史删除操作。
审计日志查询示例
以查询 default 命名空间下名为 demo 的 Deployment 删除记录为例:
如果审计日志默认落盘在节点的 /var/log/kube-apiserver/audit.log 路径,可直接用以下命令过滤:grep '"verb":"delete"' /var/log/kube-apiserver/audit.log | grep '"name":"demo"' | grep '"namespace":"default"' | grep '"resource":"deployments"'
返回结果中你可以直接获取以下核心信息:
user.username:执行删除操作的用户身份sourceIPs:操作请求的来源IPrequestReceivedTimestamp:删除操作的执行时间
如果使用的是云厂商托管K8s集群,审计日志默认会上报到对应厂商的日志服务,直接在日志控制台按删除动作、资源类型、资源名称、命名空间过滤即可。
审计日志收集持久化方案
常用的审计日志长期留存方案有三类:
- 本地落盘轮转:在 kube-apiserver 启动参数中配置
--audit-log-path指定本地存储路径,同时搭配--audit-log-maxage、--audit-log-maxbackup、--audit-log-maxsize参数控制日志轮转规则,适合小型自用集群使用 - 集群日志组件采集:通过 DaemonSet 部署 Filebeat、Fluentd 等日志采集工具,将节点上的审计日志统一采集到 Elasticsearch、Loki 等存储组件,支持长期存储和多维度检索,适合中大规模集群使用
- 托管集群自动上报:云厂商托管K8s集群大多支持一键开启审计日志自动上报功能,无需自行部署采集组件,运维成本最低
最小可用审计策略示例
如果集群还未开启审计,可以使用以下配置捕获所有核心资源的删除操作:
apiVersion: audit.k8s.io/v1 kind: Policy rules: - level: RequestResponse verbs: ["delete", "deletecollection"] resources: - group: apps resources: ["deployments", "statefulsets", "daemonsets"] - group: "" resources: ["pods", "services", "configmaps", "secrets"]
内容的提问来源于stack exchange,提问作者j_shoon24
相关产品推荐
相关产品推荐

