rke2 Enable audit logs of the downstream cluster
|字数总计: 1.3k|阅读时长: 5分钟|阅读量:
本文永久链接: https://www.xtplayer.cn/rke2/rke2-enable-audit-logs-of-the-downstream-cluster/
自定义 rke2 集群
以下内容以自定义 rke2 集群为例,编辑 rke2 集群的 yaml,在 machineGlobalConfig 层级下添加 audit-policy-file 配置。以下为设置好的 rke2 集群 yaml 的部分内容
spec: ...... rkeConfig: ...... machineGlobalConfig: audit-policy-file: | # 记录所有请求的元数据(如时间戳、用户、资源、动词等),但不记录请求体或响应体。 apiVersion: audit.k8s.io/v1 # 对于 k8s >= v1.16, 更老的版本可能是 v1beta1 kind: Policy # 忽略 "RequestReceived" 阶段的请求,以减少日志量。 omitStages: - "RequestReceived" rules: # 规则从上到下匹配,第一个匹配的规则生效。 # 记录所有级别的所有请求(Metadata, Request, RequestResponse) - level: Metadata # 可以在这里添加更具体的规则来排除某些请求,但为了“记录所有”,我们保留为空。 # 例如,排除健康检查: # omitStages: # - "RequestReceived" # users: [] # 空表示匹配所有用户 # verbs: [] # 空表示匹配所有动词 # resources: [] # 空表示匹配所有资源 ...... kube-apiserver-arg: - audit-log-maxage=30 - audit-log-maxbackup=30 - audit-log-maxsize=100 - audit-log-format=json kube-scheduler-arg: [] ......
|
以上配置设置好之后,audit-policy-file 中的内容会自动写入到 server 节点的 /var/lib/rancher/rke2/etc/config-files/audit-policy-file 文件中,并且这个文件会自动挂载到 apiserver pod 中。
执行 source <(crictl completion bash); 添加自动补全,方便输入 crictl 命令。(可选)
执行以下命令可以查询到 audit-log-path 的默认路径为 /var/lib/rancher/rke2/server/logs/audit.log
export CRI_CONFIG_FILE=/var/lib/rancher/rke2/agent/etc/crictl.yaml crictl inspect -o go-template --template='{{range .info.config.args}}{{.}}{{"\n"}}{{end}}' $(crictl ps --name kube-apiserver -q) | grep audit --- "args": [ "--admission-control-config-file=/etc/rancher/rke2/rke2-pss.yaml", "--audit-policy-file=/var/lib/rancher/rke2/etc/config-files/audit-policy-file", "--audit-log-maxage=30", "--audit-log-maxbackup=10", "--audit-log-maxsize=100", "--audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log", "--allow-privileged=true", "--anonymous-auth=false", "--api-audiences=https://kubernetes.default.svc.cluster.local,rke2", "--audit-log-maxage=30", "--audit-log-maxbackup=30", "--audit-log-maxsize=100", "--authorization-mode=Node,RBAC", "--bind-address=0.0.0.0", "--cert-dir=/var/lib/rancher/rke2/server/tls/temporary-certs", "--client-ca-file=/var/lib/rancher/rke2/server/tls/client-ca.crt", "--egress-selector-config-file=/var/lib/rancher/rke2/server/etc/egress-selector-config.yaml", "--enable-admission-plugins=NodeRestriction", "--enable-aggregator-routing=true",
|
如果要限制日志大小及数量,可以在配置添加 kube-apiserver-arg,然后指定相关参数,https://kubernetes.io/docs/tasks/debug/debug-cluster/audit/#log-backend
如果要自定义审计日志文件路径,需要在 kube-apiserver-arg 中添加 audit-log-path 参数指定日志输出路径。然后添加 kube-apiserver-extra-mount 参数将主机目录挂载到 apiserver pod 中以持久数据。
spec: ...... rkeConfig: ...... machineGlobalConfig: audit-policy-file: | # 记录所有请求的元数据(如时间戳、用户、资源、动词等),但不记录请求体或响应体。 apiVersion: audit.k8s.io/v1 # 对于 k8s >= v1.16, 更老的版本可能是 v1beta1 kind: Policy # 忽略 "RequestReceived" 阶段的请求,以减少日志量。 omitStages: - "RequestReceived" rules: # 规则从上到下匹配,第一个匹配的规则生效。 # 记录所有级别的所有请求(Metadata, Request, RequestResponse) - level: Metadata # 可以在这里添加更具体的规则来排除某些请求,但为了“记录所有”,我们保留为空。 # 例如,排除健康检查: # omitStages: # - "RequestReceived" # users: [] # 空表示匹配所有用户 # verbs: [] # 空表示匹配所有动词 # resources: [] # 空表示匹配所有资源 ...... kube-apiserver-arg: - audit-log-path=/var/log/kubernetes/audit/audit.json - audit-log-maxage=30 - audit-log-maxbackup=30 - audit-log-maxsize=100 - audit-log-format=json kube-scheduler-arg: [] kube-apiserver-extra-mount: - /var/log/kubernetes/audit/:/var/log/kubernetes/audit/ ......
|
非自定义 rke2 集群
如果下游 rke2 集群不是在 rancher ui 部署的自定义 rke2 集群,需要手动创建策略文件。比如可以把策略文件放在主机的 /etc/kubernetes/audit-policy.yaml 路径下。
apiVersion: audit.k8s.io/v1 kind: Policy
omitStages: - "RequestReceived" rules: - level: Metadata
|
策略文件创建好之后,编辑 rke2 的配置文件,添加如下的配置参数。
...... kube-apiserver-arg: - profiling=true - audit-policy-file=/etc/kubernetes/audit-policy.yaml - audit-log-path=/var/log/kubernetes/audit/audit.json - audit-log-maxage=30 - audit-log-maxbackup=30 - audit-log-maxsize=100 - audit-log-format=json
kube-apiserver-extra-mount: - /var/log/kubernetes/audit/:/var/log/kubernetes/audit/ - /etc/kubernetes/:/etc/kubernetes/
......
|