3.7. 使用 seLinuxChangePolicy 减少 pod 超时


SELinux (Security-Enhanced Linux)是一种安全机制,可为系统上的所有对象(文件、进程、网络端口等)分配安全标签(上下文)。这些标签决定了进程可以访问的内容。在 AWS 经典架构上的 Red Hat OpenShift Service 中,SELinux 有助于防止容器转义和访问主机系统或其他容器。

当 pod 启动时,容器运行时会递归重新标记卷中的所有文件,以匹配 pod 的 SELinux 上下文。对于具有多个文件的卷,这可能会显著增加 pod 启动时间。

挂载选项通过尝试使用 -o context 挂载选项直接挂载卷来指定避免对所有文件进行递归重新标记,这有助于避免 pod 超时问题。

RWOP 和 SELinux 挂载选项

ReadWriteOncePod (RWOP)持久性卷默认使用 SELinux 挂载功能。

挂载选项功能取决于驱动程序,在 AWS EBS 和 Red Hat OpenShift Data Foundation 中默认启用。如需第三方驱动程序,请联系您的存储厂商。

RWO 和 RWX 和 SELinux 挂载选项

ReadWriteOnce (RWO)和 ReadWriteMany (RWX)卷默认使用递归重新标记。

重要

在以后的 Red Hat OpenShift Service on AWS 经典架构版本中,RWO 和 RWX 卷 默认使用 挂载选项

为了帮助您进入挂载选项默认值,Red Hat OpenShift Service on AWS 经典架构 4.20 会在创建 pod 时报告与 SELinux 相关的冲突,以便您了解潜在的冲突,并帮助您解决它们。有关此报告的更多信息,请参阅此 Kowledge Base 文章

如果您无法解决与 SELinux 相关的冲突,您可以主动选择不使用所选 pod 或命名空间的挂载选项。要选择不使用,请参阅 不使用 SELinux 挂载选项默认

3.7.1. 测试 RWO 和 RWX 和 SELinux 挂载选项功能

在 Red Hat OpenShift Service on AWS 经典架构 4.20 中,您可以评估 RWO 和 RWX 卷的挂载选项功能作为技术预览功能。

重要

RWO/RWX SELinux 挂载只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

评估挂载选项功能:

  • 启用功能门。有关启用功能门的详情,请参考 使用功能门启用功能

    RWO 和 RWX 卷现在具有挂载选项作为默认行为。

仔细测试您的应用程序,并观察它们如何使用存储。请参考本 知识库文章,如果遇到问题,请考虑不使用挂载选项。请参阅 SELinux 挂载选项部分默认

3.7.2. 选择不使用 SELinux 挂载选项默认

如果要选择不使用挂载选项作为默认选项,您可以在单独的 pod 或命名空间级别将 seLinuxChangePolicy 参数设置为 Recursive

3.7.2.1. 在命名空间级别更改 seLinuxChangePolicy

在命名空间级别上为 seLinuxChangePolicy 应用所需的设置后,该命名空间中的所有 pod 都继承该设置。但是,如果需要,您可以覆盖单个 pod 的继承 seLinuxChangePolicy 设置。在 pod 级别设置 seLinuxChangePolicy 将覆盖该 pod 的命名空间级别设置继承。

先决条件

  • 使用管理员特权登录到正在运行的 Red Hat OpenShift Service on AWS 经典架构集群。
  • 访问 Red Hat OpenShift Service on AWS 经典架构控制台。

流程

为每个命名空间设置 SELinuxChangePolicy

  1. 选择所需的命名空间:

    1. Administration > Namespaces
    2. Namespaces 页面中,点所需的命名空间。此时会出现 Namespace 详情页面
  2. seLinuxChangePolicy 标签添加到命名空间:

    1. Namespace 详情页面的 Labels 旁边,点 Edit
    2. Edit labels 对话框中,添加标签 storage.openshift.io/selinux-change-policy=Recursive

      这指定了将 pod 卷中的所有文件递归重新标记到适当的 SELinux 上下文。

    3. 点击 Save

验证

在之前编辑的命名空间中启动一个 pod,并观察参数 spec.securityContext.seLinuxChangePolicy 设置为 Recursive

显示 seLinuxChangePolicy 设置的 pod YAML 文件示例

securityContext:
    seLinuxOptions:
      level: 's0:c27,c19'
    runAsNonRoot: true
    fsGroup: 1000740000
    seccompProfile:
      type: RuntimeDefault
    seLinuxChangePolicy: Recursive 
1

  ...
Copy to Clipboard Toggle word wrap

1
这个值继承自命名空间。

3.7.2.2. 在 pod 级别上更改 seLinuxChangePolicy

您可以在新的或现有 Deployment 中设置 seLinuxChangePolicy 参数,然后它管理的 pod 将具有此参数值。您可以为 StatefulSet 执行此操作。您不能编辑现有的 pod 来设置 seLinuxChangePolicy ;但是,您可以在创建新 pod 时设置此参数。

这个步骤描述了如何在现有部署中设置 seLinuxChangePolicy 参数。

先决条件

  • 访问 Red Hat OpenShift Service on AWS 经典架构控制台。

流程

在现有部署中设置 seLinuxChangePolicy 参数:

  1. Workloads > Deployments
  2. Deployment 页面上,单击所需的部署。
  3. Deployment 详情页面上,点 YAML 选项卡。
  4. 按照以下示例文件编辑 spec.template.spec.securityContext 下部署的 YAML 文件:

    部署 YAML 文件设置 seLinuxChangePolicy示例

      ...
    securityContext:
      seLinuxChangePolicy: Recursive 
    1
    
      ...
    Copy to Clipboard Toggle word wrap

    1
    指定将所有 pod 卷中的所有文件递归重新标记到适当的 SELinux 上下文。
  5. 点击 Save
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat