基于CoreOS 1688.5.3配置Kubernetes(v1.9.5)审计的问题及日志排查咨询
Kubernetes审计配置问题解答(CoreOS 1688.5.3 + Kubespray v2.5.0 + K8s v1.9.5)
针对你在这个特定环境下遇到的审计配置问题,我结合实际部署经验给你梳理下:
一、该环境下配置Kubernetes审计的特殊要求
因为你用的是Kubernetes v1.9.5(审计功能处于beta阶段,对应audit.k8s.io/v1beta1版本),加上Kubespray部署的静态Pod模式,有几个关键点要注意:
- 审计策略的API版本必须匹配:你已经用了
apiVersion: audit.k8s.io/v1beta1,这是对的,v1.9.x只支持这个beta版本的审计策略,不能用v1版本。 - 避免Kubespray覆盖手动配置:Kubespray部署的K8s集群,kube-apiserver是作为静态Pod运行的,配置文件在
/etc/kubernetes/manifests/kube-apiserver.yaml。如果你手动修改其他地方的配置文件,后续Kubespray执行更新操作时会被覆盖。建议把审计相关参数加到Kubespray的自定义变量里(比如inventory/group_vars/k8s-cluster/k8s-cluster.yml中的kube_apiserver_extra_args),这样配置会持久化。 - CoreOS文件权限适配:CoreOS的根文件系统是只读的,但
/etc/kubernetes和/var/log是可写分区。要确保kube-apiserver运行用户(通常是kube)对审计策略文件有读取权限,对审计日志路径有写入权限。
二、审计日志未生成的排查建议
按以下步骤逐一排查:
- 确认kube-apiserver是否加载了审计参数:
执行ps aux | grep kube-apiserver,查看进程参数中是否包含--audit-policy-file、--audit-log-path、--audit-log-format这三个参数。如果没有,说明你修改的配置文件不对——Kubespray部署的是静态Pod,必须修改/etc/kubernetes/manifests/kube-apiserver.yaml中的command字段,添加这些参数,修改后kubelet会自动重启apiserver。 - 检查审计日志路径的正确性:
你配置的--audit-log-path=/var/log/kube-audit如果是目录的话,kube-apiserver无法写入日志(它需要指定具体的文件名)。改成/var/log/kube-audit.log再测试。 - 验证审计策略文件的权限和存在性:
执行ls -l /etc/kubernetes/audit-policy.yaml,确认文件存在,且权限至少为644(确保kube用户能读取)。如果权限不足,执行chmod 644 /etc/kubernetes/audit-policy.yaml。 - 查看kube-apiserver的启动日志:
静态Pod由kubelet管理,执行journalctl -u kubelet -f查看实时日志,搜索audit关键词,看是否有类似failed to open audit log file、invalid audit policy的错误信息,这些错误会直接告诉你问题原因。 - 检查静态Pod的挂载配置:
打开/etc/kubernetes/manifests/kube-apiserver.yaml,确认volumes和volumeMounts中已经挂载了主机的/etc/kubernetes(对应容器内的/etc/kubernetes)和/var/log(对应容器内的/var/log),否则容器内找不到审计策略文件,也无法将日志写入主机目录。 - 临时调整审计策略测试:
把审计策略的level改成RequestResponse(会记录更详细的请求响应内容),重启apiserver后测试是否生成日志,排除策略规则过严导致无日志的情况。
内容的提问来源于stack exchange,提问作者brant4test
相关产品推荐
相关产品推荐

