12.2. 配置自定义 seccomp 配置集

您可以配置自定义 seccomp 配置集,允许您根据应用要求更新过滤器。这使得集群管理员能够更好地控制在 OpenShift Container Platform 中运行的工作负载的安全性。

seccomp 安全配置集列出了进程可以进行的系统调用(系统调用)。权限比 SELinux 更广泛,可限制操作,如全系统范围内的 write

12.2.1. 创建 seccomp 配置集

您可以使用 MachineConfig 对象来创建配置集。

seccomp 可以限制容器内的系统调用(系统调用),限制应用的访问权限。

先决条件

  • 有集群管理员权限。
  • 您已创建了自定义安全上下文约束 (SCC)。如需更多信息,请参阅附加资源

流程

  • 创建 MachineConfig 对象:

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker
      name: custom-seccomp
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          files:
          - contents:
              source: data:text/plain;charset=utf-8;base64,<hash>
            filesystem: root
            mode: 0644
            path: /var/lib/kubelet/seccomp/seccomp-nostat.json

12.2.2. 设置自定义 seccomp 配置集

前提条件

  • 有集群管理员权限。
  • 您已创建了自定义安全上下文约束 (SCC)。如需更多信息,请参阅"附加资源"。
  • 您已创建了自定义 seccomp 配置集。

流程

  1. 使用 Machine Config 将自定义 seccomp 配置集上传到 /var/lib/kubelet/seccomp/<custom-name>.json。有关详细信息,请参阅"附加资源"。
  2. 通过引用创建的自定义 seccomp 配置集来更新自定义 SCC:

    seccompProfiles:
    - localhost/<custom-name>.json 1
    1
    提供自定义 seccomp 配置集的名称。

12.2.3. 将自定义 seccomp 配置集应用到工作负载

前提条件

  • 集群管理员已设置了自定义 seccomp 配置集。如需了解更多详细信息,请参阅 "设置自定义 seccomp 配置集"。

流程

  • 通过设置 securityContext.seccompProfile.type 字段,将 seccomp 配置集应用到工作负载,如下所示:

    示例

    spec:
      securityContext:
        seccompProfile:
          type: Localhost
          localhostProfile: <custom-name>.json 1

    1
    提供自定义 seccomp 配置集的名称。

    另外,您可以使用 pod 注解 seccomp.security.alpha.kubernetes.io/pod: localhost/<custom-name>.json。但是,此方法在 OpenShift Container Platform 4.12 中已弃用。

在部署过程中,准入控制器会验证以下内容:

  • 用户角色允许的当前 SCC 的注解。
  • Pod 允许包含 seccomp 配置集的 SCC。

如果 pod 允许 SCC,kubelet 会使用指定的 seccomp 配置集运行 pod。

重要

确保 seccomp 配置集已部署到所有 worker 节点。

注意

自定义 SCC 必须具有自动分配给 pod 的适当优先级,或满足 Pod 所需的其他条件,如允许 CAP_NET_ADMIN。