定义 Windows Server 和 Hyper-V 容器和隔离模式

已完成

Contoso Windows Server 管理员需要了解容器在 Windows Server 中的运行方式,以及如何实现运行时环境的隔离(主要是进程隔离和 Hyper-V 隔离模式)。 管理员还需要了解如何运行不同的隔离模式,以及在什么情况下适合或需要不同的隔离模式。

隔离模式

Windows Server 可以采用两种不同的隔离模式之一运行容器。 这两种模式都支持创建、管理和运行容器的相同进程。 但是,为容器提供的隔离程度有所不同,相应地,该容器、其他容器和主机 OS 之间的安全性也有所不同。

Windows Server 支持以下容器隔离模式:

  • 进程隔离。 在进程隔离模式下运行的容器可称为“Windows Server 容器”。

  • Hyper-V 隔离。 在 Hyper-V 隔离模式下运行的容器可称为“Hyper-V 容器”。

Windows Server 容器的进程隔离模式

作为 Windows Server 容器的传统隔离模式,进程隔离模式允许多个容器实例在主机上同时运行。 在此模式下运行时,容器与容器之间以及容器与主机 OS 之间会共享同一个内核。 每个预配的容器都具有自己的用户模式,允许 Windows 和应用进程独立于其他容器运行。 将 Windows 容器配置为使用进程隔离模式时,容器可以在同一台计算机上以隔离状态运行多个应用,但它们不提供安全性增强的隔离。

注意

Docker 是开源工具、解决方案和基于云的服务的集合,它们提供了一种通用模型,用于将应用代码打包(也称为容器化)为软件开发的标准化单元。 你将在下一个单元中了解有关 Docker 和容器运行时的详细信息。

启动新容器时,Docker(或默认容器运行时)会与计算服务进行通信,以基于映像创建新容器。 对于每个容器,Docker 都会创建一个 Windows 容器。 每个 Windows 容器都需要一组系统进程,这些进程在每个容器中始终相同。 然后,可以使用自己的应用程序进程来区分每个容器。 为此,可以使用应用程序框架(如 .NET)、Windows Server 组件(如 Internet Information Services (IIS))或容器中运行的第三方框架或进程。

Hyper-V 容器的 Hyper-V 隔离模式

当容器共享内核和内存时,如果攻击者发现漏洞,应用程序可能会摆脱其沙盒环境,并意外执行恶意操作。 为避免出现这种情况,Windows 提供了另一种更安全的运行容器的方法,称为 Hyper-V 隔离模式,有时也称为 Hyper-V 容器。

在 Hyper-V 隔离模式下,每个容器都在高度优化的 VM 中运行。 Hyper-V 隔离模式的优点是,每个容器实际上都有自己的内核,这提供了增强级别的稳定性和安全性。 VM 在每个容器和主机之间提供附加的硬件级隔离层。 部署时,使用 Hyper-V 隔离模式的容器会在数秒内启动,这比使用完整 Windows OS 的 VM 要快得多。

注意

在 Windows Server 上运行的基于 Windows 的容器默认使用进程隔离模式。 在 Windows 10 专业版和企业版上运行的基于 Windows 的容器默认使用 Hyper-V 隔离模式。

下图对 Windows Server 和 Hyper-V 容器的体系结构及其两种隔离模式进行了比较。 此图说明主机 Windows 内核由主机用户模式和 Windows Server 共享。 在该共享内核上运行的是一个虚拟机,该虚拟机中有一个 Hyper-V 容器。 Hyper-V 容器具有自己的 Windows 内核,该内核不共享。

Screenshot of the architecture for Windows Server and Hyper-V containers and their two isolation modes.

注意

Windows 10 中的进程隔离模式仅用于开发和测试。 从 Windows 10 2018 年 10 月更新开始,运行 Windows 10 专业版或企业版主机的用户可以在进程隔离模式下运行 Windows 容器。 用户必须使用 --isolation=process 参数来直接请求进程隔离模式。 你的主机必须运行 Windows 10 内部版本 17763+,并且你必须有包含引擎 18.09 或更高版本的 Docker 版本。

重要

由于 Windows Server 容器和主机操作系统共享内核,因此必须确保主机与容器映像版本标记匹配,否则容器可能无法启动或显示未定义的行为。 Hyper-V 容器可用作在较新主机上运行旧容器映像的替代方法,例如:Windows Server 2022 主机上的 Windows Server 2019 映像仅适用于 Hyper-V 隔离。

如何使用 Docker 命令指定隔离模式

我们将在下一个单元中详细讨论 Docker 和容器运行时,但在此上下文中,我们只需了解 Docker 提供一组可用于创建容器的命令。 使用 Docker 创建容器时,可以使用 --isolation 参数来指定隔离模式(进程隔离模式或 Hyper-V 隔离模式均可):

  • 使用此命令通过进程隔离模式创建容器:
docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd
  • 使用此命令通过 Hyper-V 隔离模式创建容器:
docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 cmd`

何时使用 Hyper-V 容器而非 Windows Server 容器

选择使用 Hyper-V 容器还是 Windows Server 容器时,要考虑的因素是信任、安全性和隔离。 在以下情况下,请考虑使用 Hyper-V 容器:

  • 应用程序需要专用 Windows 内核。

  • 出于以下原因,需要应用程序信任:

    • 主机 OS 可能不完全信任在其上运行的应用程序。

    • 在同一主机上并行运行的应用程序可能不相互信任。

  • 需要更高的安全性。

  • 需要更大程度的隔离。

可能驱动某些决策的一些情况包括:

  • 云服务提供商。 共享和使用硬件资源时,前面提到的所有因素都可能适用于不同客户运行的工作负载。

  • 合规性策略。 你可能需要遵循安全性、数据或其他策略,这些策略要求工作负载和运行中的应用程序中进行隔离和提供增强的安全性。

  • 运行时环境(也称为开发环境、测试环境或生产环境)。 在开发或测试环境中,可能不需要进行额外的隔离,但在生产环境中可能需要。 你可能还有微服务模型中的分散式应用程序。 微服务应用程序体系结构中的不同容器工作负载可能具有不同的隔离需求,你可能需要考虑这些需求。

注意

并非所有业务流程服务(如 Kubernetes)都支持 Hyper-V 容器。 如果 Hyper-V 容器不受支持,但需要更大程度的隔离,则可能需要重复使用完整的 VM 来运行一组可以并行运行的容器。