容器和虚拟机都提供了一种方法,可以将主机上运行的应用程序与操作系统本身隔离开来。了解 OpenShift Container Platform 使用的操作系统 RHCOS,将有助于您了解主机系统如何保护容器和主机彼此不受影响。
容器简化了将许多应用程序部署到同一主机上以运行的过程,它使用相同的内核和容器运行时启动每个容器。应用程序可以由许多用户拥有,并且由于它们保持独立,因此可以同时运行不同甚至不兼容的应用程序版本,而不会出现问题。
在 Linux 中,容器只是特殊类型的进程,因此保护容器在许多方面类似于保护任何其他正在运行的进程。运行容器的环境始于可以保护主机内核免受容器和其他在主机上运行的进程影响的操作系统,以及保护容器彼此不受影响的操作系统。
由于 OpenShift Container Platform 4.17 在 RHCOS 主机上运行,并可以选择使用 Red Hat Enterprise Linux (RHEL) 作为工作节点,因此以下概念默认适用于任何已部署的 OpenShift Container Platform 集群。这些 RHEL 安全功能是使 OpenShift Container Platform 中运行容器更安全的基础。
Linux 命名空间能够创建特定全局系统资源的抽象,使其对命名空间中的进程显示为单独的实例。因此,多个容器可以同时使用相同的计算资源,而不会产生冲突。默认情况下与主机分开的容器命名空间包括挂载表、进程表、网络接口、用户、控制组、UTS 和 IPC 命名空间。需要直接访问主机命名空间的容器需要具有提升的权限才能请求该访问权限。有关命名空间类型的详细信息,请参阅 RHEL 9 容器文档中的构建、运行和管理容器。
SELinux 提供额外的安全层,以保持容器彼此隔离以及与主机隔离。SELinux 允许管理员对每个用户、应用程序、进程和文件强制执行强制访问控制 (MAC)。
不支持在 RHCOS 上禁用 SELinux。 |
CGroups(控制组)限制、计算和隔离进程集合的资源使用情况(CPU、内存、磁盘 I/O、网络等)。CGroups 用于确保同一主机上的容器不会相互影响。
可以将安全计算模式 (seccomp) 配置文件与容器关联,以限制可用的系统调用。有关 seccomp 的详细信息,请参阅Red Hat OpenShift 安全指南的第 94 页。
使用RHCOS部署容器通过最小化主机环境并对其进行容器调整来减少攻击面。CRI-O 容器引擎通过仅实现 Kubernetes 和 OpenShift Container Platform 运行和管理容器所需的那些功能来进一步减少攻击面,这与实现面向桌面的独立功能的其他容器引擎相反。
RHCOS 是 Red Hat Enterprise Linux (RHEL) 的一个版本,它经过特殊配置,可以在 OpenShift Container Platform 集群中充当控制平面(主节点)和工作节点。因此,RHCOS 已针对高效运行容器工作负载以及 Kubernetes 和 OpenShift Container Platform 服务进行了调整。
为了进一步保护 OpenShift Container Platform 集群中的 RHCOS 系统,除了管理或监控主机系统本身的容器外,大多数容器都应以非 root 用户身份运行。降低权限级别或创建具有尽可能少权限的容器是保护您自己的 OpenShift Container Platform 集群的推荐最佳实践。
传统虚拟化提供了另一种在同一物理主机上保持应用程序环境隔离的方法。但是,虚拟机的运行方式与容器不同。虚拟化依赖于管理程序启动客户虚拟机 (VM),每个虚拟机都有自己的操作系统 (OS),由正在运行的内核表示,以及正在运行的应用程序及其依赖项。
使用虚拟机,管理程序将客户机彼此隔离,并与主机内核隔离。接触管理程序的个人和流程较少,从而减少了物理服务器上的攻击面。也就是说,仍然必须监控安全性:一个客户机虚拟机可能能够利用管理程序漏洞来访问另一个虚拟机或主机内核。而且,当需要修补操作系统时,必须使用该操作系统在所有客户机虚拟机上进行修补。
容器可以在客户机虚拟机内运行,并且可能存在需要这种情况的用例。例如,您可能正在容器中部署传统应用程序,也许是为了将应用程序迁移到云中。
但是,在单个主机上进行容器隔离提供了一种更轻量级、更灵活且更易于扩展的部署解决方案。这种部署模型特别适用于云原生应用程序。容器通常比虚拟机小得多,并且消耗更少的内存和 CPU。
请参阅 RHEL 7 容器文档中的Linux 容器与 KVM 虚拟化的比较,了解容器和虚拟机之间的区别。
部署 OpenShift Container Platform 时,您可以选择安装程序提供的基础架构(有多个平台可用)或您自己提供的基础架构。某些低级别与安全相关的配置,例如启用 FIPS 模式或添加第一次启动时所需的内核模块,可能会受益于用户提供的基础架构。同样,用户提供的基础架构也适用于断开连接的 OpenShift Container Platform 部署。
请记住,在对 OpenShift Container Platform 进行安全增强和其他配置更改时,目标应包括
使底层节点尽可能通用。您希望能够轻松快速地以规范的方式丢弃并启动类似的节点。
尽可能通过 OpenShift Container Platform 管理对节点的修改,而不是对节点进行直接的一次性更改。
为了实现这些目标,大多数节点更改应在安装过程中通过 Ignition 完成,或者稍后使用 MachineConfig 操作符应用于节点集的 MachineConfig 完成。您可以通过这种方式进行的安全相关配置更改示例包括
添加内核参数
添加内核模块
启用对 FIPS 加密的支持
配置磁盘加密
配置 chrony 时间服务
除了 MachineConfig 操作符之外,还有其他几个可用于配置 OpenShift Container Platform 基础架构的操作符,这些操作符由集群版本操作符 (CVO) 管理。CVO 能够自动化 OpenShift Container Platform 集群更新的许多方面。