file

Task

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

  • 日志存储在 /var/log/kubernetes/audit-logs.txt
  • 日志文件能保留 10
  • 最多保留 2 个旧审计日志文件

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

注意:基本策略位于 cluster 的 master 节点上。


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

  • RequestResponse 级别的 persistentvolumes 更改
  • namespace front-appsconfigmaps 更改的请求体
  • Metadata 级别的所有 namespace 中的 ConfigMap 和 Secret 的更改

此外,添加一个全方位的规则以在 Metadata 级别记录所有其他请求。

注意:不要忘记应用修改后的策略。


参考

https://kubernetes.io/zh/docs/tasks/debug/debug-cluster/audit/


解答:

日志审计这一题需要自己调整的内容还是挺多的,因此要非常仔细,建议修改前备份一下原始的环境,要不然修改错了就会导致集群崩溃。

切换集群

kubectl config use-context KSCH00601
切换到Master的root下
ssh master01
sudo -i
配置审计策略

先备份配置文件

cp /etc/kubernetes/logpolicy/sample-policy.yaml bak/
vim /etc/kubernetes/logpolicy/sample-policy.yaml

不要删除原有规则, 可以在下面继续追加题目要求的规则

  - level: RequestResponse
    resources:
    - group: ""
      resources: ["persistentvolumes"] #根据题目要求修改,比如题目要求的是namespaces。

  - level: Request
    resources:
    - group: ""
      resources: ["configmaps"] #根据题目要求修改,比如题目要求的是persistentvolumes或者pods。
    namespaces: ["front-apps"]

  - level: Metadata
    resources:
    - group: ""
      resources: ["secrets", "configmaps"]

  - level: Metadata
    omitStages:
      - "RequestReceived"
配置 master 节点的kube-apiserver.yaml
cp /etc/kubernetes/manifests/kube-apiserver.yaml bakyaml/
vi /etc/kubernetes/manifests/kube-apiserver.yaml

添加以下参数:注意空格要对齐,不建议放到最后,建议按照下图的位置放这四条信息。

定义审计策略yaml文件位置,通过hostpath挂载

- --audit-policy-file=/etc/kubernetes/logpolicy/sample-policy.yaml #主意检查,如果考试中已经存在了,则不要重复添加。
#定义审计日志位置,通过hostpath挂载
- --audit-log-path=/var/log/kubernetes/audit-logs.txt #主意检查,如果考试中已经存在了,则不要重复添加。
#定义保留旧审计日志文件的最大天数为10天
- --audit-log-maxage=10 #主意检查,如果考试中已经存在了,则不要重复添加。
#定义要保留的审计日志文件的最大数量为2个
- --audit-log-maxbackup=2 #主意检查,如果考试中已经存在了,则不要重复添加。
volumeMounts: #找到这个字段,添加下面内容
- mountPath: /etc/kubernetes/logpolicy/sample-policy.yaml #这里也可以写到目录/etc/kubernetes/logpolicy/
  name: audit #注意,在1.25考试中,蓝色的内容已经默认有了,你只需要添加绿色字体的内容。可以通过红色字,在文件中定位。但模拟环境没有加,需要你全部手动添加。这样是为了练习,万一考试中没有,你也会加。但是如果考试中已添加,你再添加一遍,则会报错,导致api-server启不起来。
  readOnly: true #这个为true
- mountPath: /var/log/kubernetes/
  name: audit-log #注意,在1.25考试中,蓝色的内容已经有了,你只需要添加绿色字体的内容。可以通过红色字,在文件中定位。但模拟环境没有加,需要你全部手动添加。这样是为了练习,万一考试中没有,你也会加。
  readOnly: false #这个为false
volumes: #找到这个字段,添加下面内容 #注意,在1.25考试中,蓝色的内容已经有了,volumes这段无需修改,但是为了以防万一,模拟环境中没有加,需要你手动添加。这样是为了练习,万一考试中没有,你也会加。
- name: audit
  hostPath:
  path: /etc/kubernetes/logpolicy/sample-policy.yaml #这里如果写到目录/etc/kubernetes/logpolicy/,则下面的type:应为type: DirectoryOrCreate
  type: File
- name: audit-log
  hostPath:
  path: /var/log/kubernetes/
  type: DirectoryOrCreate

重启kubelet服务, 等待2分钟后,再检查

systemctl restart kubelet
kubectl get pod -A
tail /var/log/kubernetes/audit-logs.txt

file