使用 kubeadm 时如何在 kubeapi-server 上设置审计相关标志?
How do I set audit related flags on kubeapi-server when using kubeadm?
我正在尝试启用 'auditing'。 https://kubernetes.io/docs/tasks/debug-application-cluster/audit/ 提及:
You can pass a file with the policy to kube-apiserver using the
--audit-policy-file flag. If the flag is omitted, no events are logged.
我已经使用 kubeadm 配置集群(运行 总共 3 个虚拟机)。
但是使用 kubeadm 时这个设置在哪里?我没有看到它在哪里与 kube-apiserver 交互。
Kubelet 和 kube-apiserver 是 Kubernetes 堆栈中完全不同的组件。
apiserver is part of the Kubernetes Controlplane。 Kubelet 本身实际上 连接 到 API 服务器。您感到困惑的是,通常 API 服务器 运行 作为 docker 容器,而这个 docker 容器可以由 kubelet 管理。
kubelet 可以通过两种方式 运行 容器:
- 由控制平面决定(调度器发送的请求)
- 作为yaml形式的静态清单或JSON目录下(默认
/etc/kubernetes/manifests
如果您使用的是 kubeadm,请查看此目录下的内容。您将看到一个包含 API 服务器清单的 yaml 文件。您可以将 apiserver 标志添加到此清单,它将使用新标志重新启动 API 服务器。
但是,如评论中所述,您正在使用 kubeadm
。有一种正确的方法可以在升级后持续存在。如果您查看 kubeadm init
的文档页面,您会看到有一个选项 "Using kubeadm init with a configuration file"
所以你会为 kubeadm
编写一个 yaml 配置文件,它看起来有点像 config.yaml
:
apiVersion: kubeadm.k8s.io/v1alpha2
auditPolicy:
logDir: /var/log/kubernetes/audit
logMaxAge: 2
path: ""
然后运行kubeadm init --config config.yaml
apiVersion: kubeadm.k8s.io/v1alpha2
api:
advertiseAddress: 192.168.0.33
bindPort: 6443
networking:
podSubnet: "10.244.0.0/16"
featureGates:
Auditing: true
auditPolicy:
logDir: "/var/log/kubernetes/"
logMaxAge: 20
path: "/etc/kubernetes/audit.yaml"
和
cat /etc/kubernetes/audit.yaml
:
# Log all requests at the Metadata level.
apiVersion: audit.k8s.io/v1beta1
kind: Policy
rules:
- level: Metadata
在这里找到答案:https://evalle.xyz/posts/how-to-enable-kubernetes-auditing-with-kubeadm/。
对于最新版本的 Kubernetes,将其添加到 kind: ClusterConfiguration
部分:
apiServer:
extraArgs:
audit-log-path: /tmp/k8s-audit.log
audit-policy-file: /etc/kubernetes/audit.yaml
audit-log-maxage: "1"
audit-log-maxsize: "100"
audit-log-maxbackup: "1"
extraVolumes:
- name: audit
hostPath: /host/audit.yaml
mountPath: /etc/kubernetes/audit.yaml
readOnly: true
pathType: File
记录所有请求和响应正文的示例 /host/audit.yaml
文件:
apiVersion: audit.k8s.io/v1
kind: Policy
omitStages:
- "ResponseStarted"
rules:
- level: RequestResponse
我正在尝试启用 'auditing'。 https://kubernetes.io/docs/tasks/debug-application-cluster/audit/ 提及:
You can pass a file with the policy to kube-apiserver using the --audit-policy-file flag. If the flag is omitted, no events are logged.
我已经使用 kubeadm 配置集群(运行 总共 3 个虚拟机)。
但是使用 kubeadm 时这个设置在哪里?我没有看到它在哪里与 kube-apiserver 交互。
Kubelet 和 kube-apiserver 是 Kubernetes 堆栈中完全不同的组件。
apiserver is part of the Kubernetes Controlplane。 Kubelet 本身实际上 连接 到 API 服务器。您感到困惑的是,通常 API 服务器 运行 作为 docker 容器,而这个 docker 容器可以由 kubelet 管理。
kubelet 可以通过两种方式 运行 容器:
- 由控制平面决定(调度器发送的请求)
- 作为yaml形式的静态清单或JSON目录下(默认
/etc/kubernetes/manifests
如果您使用的是 kubeadm,请查看此目录下的内容。您将看到一个包含 API 服务器清单的 yaml 文件。您可以将 apiserver 标志添加到此清单,它将使用新标志重新启动 API 服务器。
但是,如评论中所述,您正在使用 kubeadm
。有一种正确的方法可以在升级后持续存在。如果您查看 kubeadm init
的文档页面,您会看到有一个选项 "Using kubeadm init with a configuration file"
所以你会为 kubeadm
编写一个 yaml 配置文件,它看起来有点像 config.yaml
:
apiVersion: kubeadm.k8s.io/v1alpha2
auditPolicy:
logDir: /var/log/kubernetes/audit
logMaxAge: 2
path: ""
然后运行kubeadm init --config config.yaml
apiVersion: kubeadm.k8s.io/v1alpha2
api:
advertiseAddress: 192.168.0.33
bindPort: 6443
networking:
podSubnet: "10.244.0.0/16"
featureGates:
Auditing: true
auditPolicy:
logDir: "/var/log/kubernetes/"
logMaxAge: 20
path: "/etc/kubernetes/audit.yaml"
和
cat /etc/kubernetes/audit.yaml
:
# Log all requests at the Metadata level.
apiVersion: audit.k8s.io/v1beta1
kind: Policy
rules:
- level: Metadata
在这里找到答案:https://evalle.xyz/posts/how-to-enable-kubernetes-auditing-with-kubeadm/。
对于最新版本的 Kubernetes,将其添加到 kind: ClusterConfiguration
部分:
apiServer:
extraArgs:
audit-log-path: /tmp/k8s-audit.log
audit-policy-file: /etc/kubernetes/audit.yaml
audit-log-maxage: "1"
audit-log-maxsize: "100"
audit-log-maxbackup: "1"
extraVolumes:
- name: audit
hostPath: /host/audit.yaml
mountPath: /etc/kubernetes/audit.yaml
readOnly: true
pathType: File
记录所有请求和响应正文的示例 /host/audit.yaml
文件:
apiVersion: audit.k8s.io/v1
kind: Policy
omitStages:
- "ResponseStarted"
rules:
- level: RequestResponse