真题解析
题目

在 cluster 中启用审计日志。为此,请启用日志后端,并确保:
日志存储在 /var/log/kubernetes/kubernetes-logs.txt
日志文件能保留 30 天
最多保留 10 个旧审计日志文件
/etc/kubernetes/logpolicy/sample-policy.yaml 提供了基本策略。它仅指定不记录的内容。
基本策略位于 cluster 的 master 节点上。
编辑和扩展基本策略以记录:
RequestResponse 级别的 cronjobs 更改
namespace front-apps 中 persistentvolumes 更改的请求体
Metadata 级别的所有 namespace 中的 ConfigMap 和 Secret 的更改
此外,添加一个全方位的规则以在 Metadata 级别记录所有的其它请求。
解析
审计(Auditing)官方文档:
https://kubernetes.io/zh-cn/docs/tasks/debug/debug-cluster/audit/
创建 policy yaml
# vim /etc/kubernetes/logpolicy/sample-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
# 不要在 RequestReceived 阶段为任何请求生成审计事件。
omitStages:
- "RequestReceived"
rules:
- level: RequestResponse
resources:
- group: "batch"
resources: ["cronjobs"]
- level: Request
resources:
- group: ""
resources: ["persistentvolumes"]
namespaces: ["front-apps"]
- level: Metadata
resources:
- group: ""
resources: ["configmaps", "secrets"]
- level: Metadata
omitStages: # 看实际环境中的文件开头是否有 omitStages 项,有则添加此项
- "RequestReceived"编辑 kube-apiserver.yaml 修改配置
# vim /etc/kubernetes/manifests/kube-apiserver.yaml
- --audit-policy-file=/etc/kubernetes/logpolicy/sample-policy.yaml
- --audit-log-path=/var/log/kubernetes/kubernetes-logs.txt
- --audit-log-maxage=30
- --audit-log-maxbackup=10# 如果是 Pod 形式启动的 kube-apiserver,需确认是否挂载审计日志
# 配置 hostPath
volumes:
- name: audit
hostPath:
path: /etc/kubernetes/logpolicy/sample-policy.yaml
type: File
- name: audit-log
hostPath:
path: /var/log/kubernetes/
type: DirectoryOrCreate
# 挂载数据卷
volumeMounts:
- mountPath: /etc/kubernetes/logpolicy/sample-policy.yaml
name: audit
readOnly: true
- mountPath: /var/log/kubernetes/
name: audit-log
readOnly: false# 若 kube-apiserver 是 Pod 形式启动,则会自动重启
# 需查看状态是否正常
watch kubectl get po -n kube-system检查日志
# 有日志输出则代表正常
tail -100f /var/log/kubernetes/kubernetes-logs.txtLast updated