为什么请求正文没有出现在 Kubernetes API 服务器审核日志中?

Why isn't the request body showing up in the Kubernetes API server audit log?

我已将以下命令行参数添加到 kube-apiserver 以启用审核日志记录:

- --audit-log-path=/tmp/k8s-audit.log
- --audit-policy-file=/etc/kubernetes/audit.yaml
- --audit-log-maxage=1
- --audit-log-maxsize=100
- --audit-log-maxbackup=1

/etc/kubernetes/audit.yaml的内容是:

apiVersion: audit.k8s.io/v1
kind: Policy
omitStages:
  - "ResponseStarted"
  - "ResponseComplete"
rules:
  - level: RequestResponse

我有 运行 一个带有详细日志记录的命令,这样我就可以看到请求正文:

$ kubectl --v=10 uncordon cluster-worker2

并且 kubectl 命令记录请求正文如下:

I0328 09:00:07.591869   47228 request.go:942] Request Body: {"spec":{"unschedulable":null}}

但是我在 kubernetes 服务器上的审计日志文件中的任何地方都没有看到这个请求体。我的配置有什么问题?

请求居然只在ResponseComplete阶段记录,有点出乎意料。尽管 Kubernetes 可以 理论上在收到请求后立即记录请求,但它不会。

因此需要从策略配置文件 (audit.yaml) 的 omitstages 中删除 ResponseComplete 行。