我一直在阅读有关如何在 kubernetes 中设置审计的信息,这基本上是说为了启用审计,我必须在启动时使用 kube-apiserver 指定一个 yaml 策略文件,通过使用标志--audit-policy-file
。
现在,关于如何实现这一目标,有两件事我不明白:
- 添加/更新运行 kube-apiserver 的命令的启动参数的正确方法是什么?我无法更新容器,因此是否需要以某种方式克隆容器?或者我应该按照这里的建议使用
kops edit cluster
:https://github.com/kubernetes/kops/blob/master/docs/cluster_spec.md#kubeapiserver。令人惊讶的是,kubernetes 没有为此创建部署,我应该自己创建吗? - 特别是要设置审核,我必须传递一个yaml文件作为启动参数。如何上传/提供此yaml文件以进行
--audit-policy-file=/some/path/my-audit-file.yaml
。我是否使用它和/或卷创建配置映射?之后我该如何引用这个文件,以便在 kube-apiserver 启动命令运行时它在文件系统中可用?
谢谢!
添加/更新运行 kube-apiserver 的命令的启动参数的正确方法是什么?
在我看到的 99% 的 kubernetes 集群部署方式中,节点上的kubelet
二进制文件读取主机文件系统上/etc/kubernetes/manifests
的 kubernetes 描述符,并运行其中描述的 Pod。因此,第一个问题的答案是编辑 - 或导致您正在使用的配置管理工具更新 - 文件/etc/kubernetes/manifests/kube-apiserver.yaml
(或者希望是一个非常相似的名称文件)。如果您有多个主节点,则需要对所有主节点重复该过程。在大多数情况下,kubelet
二进制文件将看到对清单文件的更改,并将自动重新启动 apiserver 的 Pod,但在最坏的情况下,可能需要重新启动kubelet
。
请务必观察新启动的 apiserver 的 docker 容器的输出以检查错误,并且仅在确认其正常工作后才将该更改汇总到其他 apiserver 清单文件。
之后我该如何引用这个文件,以便在 kube-apiserver 启动命令运行时它在文件系统中可用?
大致相同的答案:通过 ssh 或任何机上配置管理工具。唯一的星号是,由于apisever的清单文件是正常的Pod
声明,因此需要注意volume:
和volumeMount:
,就像处理任何其他集群内Pod
一样。如果您的audit-policy.yaml
位于/etc/kubernetes
中或下方,这可能没问题,因为该目录已经卷挂载到 Pod 中(再次:大多数时候)。它写出很可能需要更改的审计日志文件,因为与配置的其余部分不同,日志文件路径无法readOnly: true
,因此至少需要没有readOnly: true
的第二个volumeMount
,并且可能需要第二个volume: hostPath:
才能使日志目录在 Pod 中可见。
我实际上还没有尝试对 apiserver 本身使用ConfigMap
,因为这是非常元的。但是,在多主设置中,我也不知道这是不可能的。只是要小心,因为在这样的自我引用设置中,很容易关闭所有配置错误的主节点,因为它们无法与自己通信以读取更新的配置。
Kubelet 持续监控/etc/kubernetes/manifests
中静态 pod 定义的更改。没有与 kube-apiserver 配置关联的部署,也不直接修改 pod 定义。
- 包括审核策略文件
--audit-policy-file=/some/path/my-audit-file.yaml
参数,最好是审核日志--audit-log-path=/var/log/apiserver-audit.log
/etc/kubernetes/manifests/kube-apiserver.yaml
。 - 包括用于
audit-log-path
和audit-policy-file
的卷装载。 例如:
volumeMounts:
- mountPath: /some/path/my-audit-file.yaml
name: audit
readOnly: true
- mountPath: /var/log/apiserver-audit.log
name: audit-log
readOnly: false
...
volumes:
- hostPath:
path: /some/path/my-audit-file.yaml
type: File
name: audit
- hostPath:
path: /var/log/apiserver-audit.log
type: FileOrCreate
name: audit-log
...
不挂载卷可能会导致错误 - 当您尝试运行任何 kubectl 命令时 -The connection to the server xxxx:yyyy was refused - did you specify the right host or port?