【问题标题】:How to setup an audit policy into kube-apiserver?如何在 kube-apiserver 中设置审计策略?
【发布时间】:2018-09-16 20:37:16
【问题描述】:

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

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

  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 启动命令运行时在文件系统中可用?

谢谢!

【问题讨论】:

    标签: kubernetes kops kubernetes-security


    【解决方案1】:

    添加/更新运行 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 声明,人们希望像对待任何其他集群内 @987654329 一样注意 volume:s 和 volumeMount:s @。如果您的 audit-policy.yaml 位于 /etc/kubernetes 中或之下,那可能没问题,因为该目录已经卷安装到 Pod 中(同样:大部分时间)。它正在写出很可能需要更改的审核日志文件,因为与配置的其余部分不同,日志文件路径不能是readOnly: true,因此至少需要第二个volumeMount,而没有readOnly: true,并且可能会需要第二个volume: hostPath: 才能使日志目录在 Pod 中可见。

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

    【讨论】:

    • 99% of the ways - 其余的设置方案是什么?
    • 现代版本的 kubernetes 将 kubelet 配置作为托管资源,就像 Pods 一样,但这不是我当时的意思。一些被误导的人试图将这些东西烘焙到 systemd 描述符或 init.d 脚本中,或者更糟。使用您选择的标志启动 kubelet 的方法几乎是无限的,包括(甚至 更多 被误导!)尝试在 rkt 下运行 kubelet
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-22
      • 2018-01-03
      • 2016-04-03
      • 2010-10-11
      • 2020-06-16
      • 1970-01-01
      • 2020-12-31
      • 2019-01-10
      相关资源
      最近更新 更多