5.9. 遵守 pod 安全准入


Pod 安全准入Kubernetes pod 安全标准的实现Pod 安全准入 限制 pod 的行为。不遵循全局或命名空间级别定义的 pod 安全准入的 Pod 不会被接受到集群且无法运行。

如果 Operator 项目不需要升级的权限才能运行,您可以确保您的工作负载在将命名空间设置为 restricted pod 安全级别。如果 Operator 项目需要升级的权限才能运行,您必须设置以下安全上下文配置:

  • Operator 命名空间允许的 pod 安全准入级别
  • 工作负载服务帐户允许的安全性上下文约束 (SCC)

如需更多信息,请参阅了解和管理 pod 安全准入

5.9.1. 安全性上下文约束与 pod 安全标准同步

OpenShift Container Platform 包括 Kubernetes pod 安全准入。在全局范围内,会强制 privileged 配置集,restricted 配置集用于警告和审核。

除了全局 pod 安全准入控制配置外,还存在一个控制器,它会根据给定命名空间中的服务帐户的 SCC 权限将 pod 安全准入控制 warnaudit 标签应用到命名空间。

重要

定义为集群有效负载一部分的命名空间会永久禁用 pod 安全准入同步。您可以根据需要,在其他命名空间中启用 pod 安全准入同步。如果 Operator 安装在用户创建的 openshift-* 命名空间中,则在命名空间中创建集群服务版本(CSV)后,默认会开启同步。

控制器检查 ServiceAccount 对象权限,以便在每个命名空间中使用安全性上下文约束。安全性上下文约束 (SCC) 根据其字段值映射到 Pod 安全配置集,控制器使用这些翻译配置集。Pod 安全准入 warnaudit 标签被设置为命名空间中找到的最特权 pod 安全配置集,以防止在创建 pod 时出现警告和审计日志记录。

命名空间标签基于对命名空间本地服务帐户权限的考虑。

直接应用 pod 可能会使用运行 Pod 的用户的 SCC 特权。但是,在自动标记过程中不会考虑用户权限。

5.9.2. 确保 Operator 工作负载在命名空间中运行,设置为受限 pod 安全级别

为确保 Operator 项目可以在各种部署和环境中运行,请将 Operator 的工作负载配置为在命名空间中运行,设置为 restricted pod 安全级别。

警告

您必须将 runAsUser 字段留空。如果您的镜像需要特定用户,则无法在受限安全性上下文约束 (SCC) 和受限 Pod 安全强制下运行。

流程

  • 要将 Operator 工作负载配置为在设置为 restricted pod 安全级别的命名空间中运行,请编辑类似以下示例的 Operator 命名空间定义:

    重要

    建议您在 Operator 的命名空间定义中设置 seccomp 配置集。但是,OpenShift Container Platform 4.10 不支持设置 seccomp 配置集。

    • 对于必须只在 OpenShift Container Platform 4.11 及之后的版本中运行的 Operator 项目,请编辑类似以下示例的 Operator 命名空间定义:

      config/manager/manager.yaml 文件示例

      ...
      spec:
       securityContext:
         seccompProfile:
           type: RuntimeDefault 1
         runAsNonRoot: true
       containers:
         - name: <operator_workload_container>
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
               drop:
                 - ALL
      ...

      1
      通过将 seccomp 配置集类型设置为 RuntimeDefault,SCC 默认为命名空间的 pod 安全配置集。
    • 对于必须在 OpenShift Container Platform 4.10 中运行的 Operator 项目,编辑 Operator 的命名空间定义类似以下示例:

      config/manager/manager.yaml 文件示例

      ...
      spec:
       securityContext: 1
         runAsNonRoot: true
       containers:
         - name: <operator_workload_container>
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
               drop:
                 - ALL
      ...

      1
      不设置 seccomp 配置集类型可确保您的 Operator 项目可以在 OpenShift Container Platform 4.10 中运行。

5.9.3. 为需要升级权限的 Operator 工作负载管理 pod 安全准入

如果 Operator 项目需要升级的权限才能运行,您必须编辑 Operator 的集群服务版本 (CSV)。

流程

  1. 将安全上下文配置设置为 Operator CSV 中所需的权限级别,如下例所示:

    具有网络管理员特权的 <operator_name>.clusterserviceversion.yaml 文件示例

    ...
    containers:
       - name: my-container
         securityContext:
           allowPrivilegeEscalation: false
           capabilities:
             add:
               - "NET_ADMIN"
    ...

  2. 设置服务帐户权限,允许 Operator 工作负载使用所需的安全性上下文约束 (SCC),如下例所示:

    <operator_name>.clusterserviceversion.yaml 文件示例

    ...
      install:
        spec:
          clusterPermissions:
          - rules:
            - apiGroups:
              - security.openshift.io
              resourceNames:
              - privileged
              resources:
              - securitycontextconstraints
              verbs:
              - use
            serviceAccountName: default
    ...

  3. 编辑 Operator 的 CSV 描述,以说明 Operator 项目需要升级的权限,如下例所示:

    <operator_name>.clusterserviceversion.yaml 文件示例

    ...
    spec:
      apiservicedefinitions:{}
      ...
    description: The <operator_name> requires a privileged pod security admission label set on the Operator's namespace. The Operator's agents require escalated permissions to restart the node if the node needs remediation.

5.9.4. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.