MXC 包含选项和平台支持

MXC 有助于管理使用容器的复杂性:使用 MXC 描述策略并管理容器的生命周期,但所选的包含后端会执行实际强制执行操作。 每个后端都基于不同的操作系统机制构建。 因此,后端在隔离工作负荷的方式以及处理文件、网络、UI 和生命周期的方式方面有所不同。

从工作负荷需要的内容开始,然后确认后端可以在目标主机上满足该需求。 操作系统的名称或版本不会告诉你后端是否受支持。

了解主机和工作负荷环境

在请求中,可以请求一种称为“包含意图”的环境,也可以指定具体的后端。 process 意图映射到当前运行所在主机上的本机进程隔离后端。 由于后端因操作系统而异,因此同一意图在 Windows、Linux 和 macOS 上可能具有不同的能力。

主机 默认流程后端 其他环境
Windows ProcessContainer 独立的 Windows 会话、Windows VM,或在受支持的情况下通过 WSLc 运行的 Linux 工作负荷
Linux 气泡膜 LXC 和专用虚拟化后端(在受支持的情况下)
macOS 安全带 检查您安装的发行版本以获取其他受支持的选项

工作负载不必与主机使用相同的操作系统。 例如,WSLc 在 Windows 主机上运行 Linux 工作负荷。 它具有自己的先决条件,它与主机共享资源的方式与Windows进程沙盒不同。

检查发布状态和 SDK 覆盖范围

后端支持会因版本而异,因此请检查所安装的软件包版本的支持信息。

在 MXC v1.0.0 中,V1 SDK 可以使用以下后端创建容器:

  • Windows:ProcessContainer、IsolationSession 和 WSLc
  • Linux: Bubblewrap 和 LXC
  • macOS: Seatbelt

Windows沙盒、MicroVM 和 Hyperlight 是实验性的。 它们需要显式的实验性授权,并且无法通过 V1 SDK API 进行创建。 如果你正在考虑其中一个或另一个专用环境,请先检查你所用版本的发行说明。

主机上可用的后端可能仍不支持你计划调用的 SDK 操作。 在 V1 SDK 中:

  • 生命周期 API 仅适用于 IsolationSession 和 WSLc。
  • 一次性 PTY 执行适用于 IsolationSession、Bubblewrap、LXC 和 Seatbelt。
  • 现有容器中的 PTY 执行仅适用于 IsolationSession。

有关详细信息,请参阅 SDK 参考:

如果使用 Rust,后端支持也取决于启用的 crate 功能。 若要使用 IsolationSession 或 WSLc,请启用 mxc-sdk crate 的 isolation_session 或 wslc 功能。 有关详细信息,请参阅 Rust SDK 指南。

从运行时发现开始

每个 SDK 都可以在启动任何内容之前告知当前主机支持的内容。 首先运行这些检查,但也要继续处理启动错误,因为主机的配置可以在检查和启动之间更改。

利用平台支持查明是否完全能够启动容器,通过可用后端全面了解主机,并在 Windows 上实际运行特定请求前借助探测进行测试。

SDK Discovery API 需要检查的事项
.NET MxcPlatform.GetPlatformSupport() IsSupported、 Reason和 AvailableMethods,其中列出了 SDK 可以启动的后端
.NET MxcPlatform.GetAvailableBackends() 主机可用性、可选功能和警告。 某些执行 API 不能使用此处列出的每个后端。
.NET MxcContainer.Probe() 在 Windows 中,可在不创建容器的情况下,获取该请求将匹配的 ProcessContainer 隔离层级以及针对该请求的兼容性诊断信息
TypeScript getPlatformSupport() isSupported、 reason、 availableMethods和任何特定于主机的警告和功能字段
TypeScript getAvailableBackends() 主机可用性、可选功能和警告。 某些执行 API 不能使用此处列出的每个后端。
TypeScript probe() 在 Windows 中,可在不创建容器的情况下,获取该请求将匹配的 ProcessContainer 隔离层级以及针对该请求的兼容性诊断信息
Rust v1::platform_support() is_supported、 reason、 available_methods和 Linux 上的 Bubblewrap 网络功能
Rust v1::available_backends() 主机可用性、可选功能和警告。 某些执行 API 不能使用此处列出的每个后端。
Rust v1::probe() 在 Windows 中,可在不创建容器的情况下,获取该请求将匹配的 ProcessContainer 隔离层级以及针对该请求的兼容性诊断信息

不适用或无法检测到的字段可能在结果中缺失。 发现机制是一项有用的初步检查,但它并不能验证完整策略。 为确保无误,请创建计划运行的请求,并确认所选后端可以强制实施它所需的每个控制。

部分主机需要额外组件或管理员设置,后端才能正常工作。 发现结果和启动错误可以告诉你缺少的内容,但这不会授予应用或编码代理更改主机的权限。 让管理主机的人员按照后端文档中记录的设置步骤进行操作。

对于 Windows,请参阅 OS 版本策略支持。 某个 Windows 版本即使受 MXC 支持,也可能依然缺少特定的策略功能,因此这两项都需要检查。

检查工作负载所需的限制

两个后端可以接受相同的策略语法,但执行该策略的方式仍可能不同。 在选定后端之前,请考虑以下方面:

Area 应考虑的问题
文件存储 后端是否可以表达所需的读取、写入和拒绝授权,包括重叠的授权? 它是否与主机共享文件、装载文件或复制文件?
Network 它能否强制执行网络模型(无论是直连还是通过代理),包括专用网络和主机环回规则?
UI 它是否可以对窗口、剪贴板和输入施加所需的限制?
Lifecycle 它是否独立运行每个命令,或者是否可以在命令之间保留环境? 停止后保留什么?
学习模式 主机是否支持 ProcessContainer 拒绝捕获? 如果没有,后端提供哪些诊断工作流?

GitHub上的 MXC 指南列出了每个后端支持的功能、OS 版本和要求。

根据需求选择后端

在选取后端之前,请记下:

  • 应用支持的主机操作系统和处理器体系结构。
  • 工作负荷所需的来宾或工具环境。
  • 工作负荷所需的文件、网络、UI、设备和主机工具访问权限。
  • 每个命令是自行运行还是需要先前命令的状态。
  • 您在启动时间、资源、部署和用户交互方面的限制。
  • 工作负荷及其数据所需的隔离边界有多强。
  • 后端是否可以强制实施所需的每个策略控制。

然后测试支持的每个主机配置,同时进行正向测试和负向测试。 成功启动仅显示 MXC 已接受配置。 负面测试(例如尝试在授予的路径外写入)显示这些限制是否确实有效。