2

我一直在阅读有关如何在 kubernetes 中设置审计的信息它基本上说为了启用审计,我必须在启动 kube-apiserver 时使用 flag 指定一个 yaml 策略文件--audit-policy-file

现在,关于如何实现这一点,我有两件事不明白:

  1. 添加/更新运行 kube-apiserver 的命令的启动参数的正确方法是什么?我无法更新 pod,所以我需要以某种方式克隆 pod 吗?或者我应该kops edit cluster按照这里的建议使用:https ://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 启动命令时在文件系统中可用?

谢谢!

4

2 回答 2

1

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

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

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

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

大致相同的答案:通过 ssh 或任何机器上的配置管理工具。这个唯一的星号是,因为 apisever 的清单文件是一个正常的Pod声明,所以人们希望像对待任何其他集群内一样注意volume:s 和s 。如果您住在 或之下,那可能没问题,因为该目录已经卷安装到 Pod 中(同样:大部分时间)。它正在写出很可能需要更改的审核日志文件,因为与配置的其余部分不同,日志文件路径不能,因此至少需要第二个没有,并且可能需要第二个才能使日志目录可见进入 Pod。volumeMount:Podaudit-policy.yaml/etc/kubernetesreadOnly: truevolumeMountreadOnly: truevolume: hostPath:

实际上,我没有尝试将 aConfigMap用于 apiserver 本身,因为那是非常元的。但是,在多主机设置中,我也不知道这是不可能的。请小心,因为在这样的自引用设置中,很容易让所有配置错误的 master 崩溃,因为它们无法与自己通信以读取更新的配置。

于 2018-04-08T06:00:45.043 回答
0

Kubelet 持续监控/etc/kubernetes/manifests. 没有与 kube-apiserver 配置关联的部署,也没有直接修改 pod 定义。

  1. 包括审计策略文件参数,--audit-policy-file=/some/path/my-audit-file.yaml最好是审计日志--audit-log-path=/var/log/apiserver-audit.log/etc/kubernetes/manifests/kube-apiserver.yaml
  2. 包括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?

于 2021-10-22T05:15:04.627 回答