真题解析

题目

在 cluster 中启用审计日志。为此,请启用日志后端,并确保:

  • 日志存储在 /var/log/kubernetes/kubernetes-logs.txt

  • 日志文件能保留 30

  • 最多保留 10 个旧审计日志文件

/etc/kubernetes/logpolicy/sample-policy.yaml 提供了基本策略。它仅指定不记录的内容。

编辑和扩展基本策略以记录:

  • 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.txt

Last updated