如何将审核策略设置为kube-apiserver?

时间:2018-04-06 18:41:37

标签: kubernetes kops kubernetes-security

我一直在阅读如何在kubernetes here中设置审计,这基本上说为了启用审计,我必须在启动时通过使用标志为kube-apiserver指定yaml策略文件--audit-policy-file

现在,有两件事我不明白如何实现这个目标:

  1. 添加/更新运行kube-apiserver的命令的启动参数的正确方法是什么?我无法更新pod,所以我需要以某种方式克隆pod吗?或者我应该按照此处的建议使用kops edit clusterhttps://github.com/kubernetes/kops/blob/master/docs/cluster_spec.md#kubeapiserver。令人惊讶的是,如果我自己创建它,kubernetes不会为此创建部署吗?
  2. 特别是要设置审核,我必须将yaml文件作为启动参数传递。如何上传/提供此yaml文件以生成--audit-policy-file=/some/path/my-audit-file.yaml。我用它和/或卷创建一个configMap吗?之后如何引用此文件,以便在kube-apiserver启动命令运行时它在文件系统中可用?
  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

  

添加/更新运行kube-apiserver的命令的启动参数的正确方法是什么?

在我看到kubernetes集群部署的99%的方式中,节点上的kubelet二进制文件读取主机文件系统上/etc/kubernetes/manifests中的kubernetes描述符,并运行其中描述的Pod。因此,第一个问题的答案是编辑 - 或导致您使用的配置管理工具更新 - 文件/etc/kubernetes/manifests/kube-apiserver.yaml(或者希望是一个非常类似命名的文件)。如果您有多个主节点,则需要为所有主节点重复该过程。在大多数情况下,kubelet二进制文件将看到对清单文件的更改,并将自动重新启动apiserver的Pod,但在最坏的情况下,可能需要重新启动kubelet。< / p>

请务必观察新启动的apiserver的docker容器的输出以检查错误,并在确认其正常工作后,将该更改滚动到其他apiserver清单文件。

  

如何在之后引用此文件,因此当kube-apiserver启动命令运行时,它在文件系统中可用?

大致相同的答案:通过ssh或任何机上配置管理工具。这个唯一的星号是,由于apisever的清单文件是一个普通的Pod声明,人们希望注意volume:volumeMount: s就像你想要的那样其他群集内Pod。如果您的audit-policy.yaml位于/etc/kubernetes之内或之下,那么这可能会很好,因为该目录已经被卷装入Pod(再次:大部分时间)。它写出了很可能需要更改的审核日志文件,因为与配置的其余部分不同,日志文件路径不能是readOnly: true,因此至少需要第二个volumeMount而不需要{{1}可能需要第二个readOnly: true才能使日志目录显示在Pod中。

我实际上还没有尝试使用volume: hostPath:作为apiserver本身,因为这是非常元的。但是,在多主设置中,我不知道它是不可能。请小心谨慎,因为在这种自我引用的设置中,很容易使所有主机都配置错误,因为他们无法与自己通信以阅读更新的配置。