Azure 映像生成器的独立映像生成

独立映像生成是 Azure VM 映像生成器 (AIB) 的一项功能。 它将 VM 映像自定义/验证的核心流程从共享平台基础结构转移到订阅中的专用 Azure 容器实例 (ACI) 资源,从而提供计算和网络隔离。

独立映像生成的优点

独立映像生成通过将生成 VM 的网络访问限制为你的订阅,实现了深度防御。 独立映像生成还允许你检查 AIB 完成的处理以自定义/验证 VM 映像,从而为你提供更高的透明度。 此外,独立映像生成还可简化实时生成日志的查看。 具体而言:

  1. 计算隔离:独立映像生成在订阅中的 ACI 资源(而不是 AIB 的共享平台资源)中执行映像生成处理的主要部分。 ACI 为每个容器组提供虚拟机监控程序隔离,以确保容器在不共享内核的情况下隔离运行。

  2. 网络隔离:独立映像生成会删除生成 VM 与 AIB 服务后端组件之间的所有直接网络 WinRM/SSH 通信

    • 如果在不使用自己子网的情况下为生成 VM 预配 AIB 模板,则在生成映像时,不再会在暂存资源组中预配公共 IP 地址资源。
    • 如果使用现有子网为生成 VM 预配 AIB 模板,则不再需要在生成 VM 与 AIB 后端平台资源之间设置基于专用链接的信道。 而是会在 ACI 与生成 VM 资源(这两者都驻留在订阅中的临时资源组中)之间设置信道。
    • 从 API 版本 2024-02-01 开始,除了用于生成 VM 的子网之外,还可以指定用于部署 ACI 的第二个子网。 如果指定,AIB 将在此子网上部署 ACI,并且 AIB 无需在 ACI 与生成 VM 之间设置基于专用链接的信道。 有关第二个子网的详细信息,请参阅此部分
  3. 透明度:AIB 是基于 HashiCorp Packer 而构建的。 独立映像生成在订阅的 ACI 中执行 Packer,这让你可以检查 ACI 资源及其容器。 同样,在订阅中拥有整个网络通信管道使你可以检查所有网络资源及其设置和限额。

  4. 更好地查看实时日志:AIB 将自定义日志写入订阅中临时资源组中的存储帐户。 独立映像生成提供了另一种直接在 Azure 门户中跟踪相同日志的方法:可以通过导航到 ACI 资源中 AIB 的容器来完成。

网络拓扑

独立映像生成将 ACI 和生成 VM 部署在订阅的暂存资源组中。 要让 AIB 自定义/验证你的映像,在 ACI 中运行的容器实例需有生成 VM 的网络路径。 根据自定义网络需求和策略,可以将 AIB 配置为使用不同的网络拓扑来实现此目的:

不使用自己的生成 VM 子网

  • 可以通过不在映像模板中指定 vnetConfig 字段,或者指定该字段但不指定 subnetIdcontainerInstanceSubnetId 子字段,来选择此拓扑。
  • 在这种情况下,AIB 将在暂存资源组中部署一个虚拟网络,同时部署两个子网和网络安全组 (NSG)。 其中一个子网用于部署 ACI,而另一个子网用于部署生成 VM。 NSG 设置为允许在两个子网之间通信。
  • 在这种情况下,AIB 不会部署公共 IP 资源或基于专用链接的通信管道。

使用自己的生成 VM 子网,但不使用自己的 ACI 子网

  • 可以通过在映像模板中指定 vnetConfig 字段以及 subnetId 子字段(但不要指定 containerInstanceSubnetId 子字段)来选择此拓扑。
  • 在这种情况下,AIB 将在暂存资源组中部署一个临时虚拟网络,同时部署两个子网和网络安全组 (NSG)。 其中一个子网用于部署 ACI,而另一个子网用于部署专用终结点资源。 生成 VM 部署在指定的子网中。 基于专用链接的通信管道(由专用终结点、专用链接服务、Azure 负载均衡器和代理虚拟机组成)也部署在暂存资源组中,以简化 ACI 子网与生成 VM 子网之间的通信。

使用自己的生成 VM 子网并使用自己的 ACI 子网

  • 可以通过在映像模板中指定 vnetConfig 字段以及 subnetIdcontainerInstanceSubnetId 子字段来选择此拓扑。 此选项(和子字段 containerInstanceSubnetId)从 API 版本 2024-02-01 开始可用。 还可以更新现有模板以使用此拓扑。
  • 在这种情况下,AIB 将生成 VM 部署到指定的生成 VM 子网,并将 ACI 部署到指定的 ACI 子网。
  • AIB 不会在暂存资源组中部署任何网络资源,包括公共 IP、虚拟网络、子网、网络安全组、专用终结点、专用链接服务、Azure 负载均衡器和代理虚拟机。 如果存在配额限制或策略不允许部署这些资源,则可以使用此拓扑。
  • ACI 子网必须满足特定的条件才能与独立映像生成配合使用。

可以在模板参考中查看有关这些字段的详细信息。 此处详细介绍了网络选项。

后向兼容性

独立映像生成是平台级别的更改,不会影响 AIB 的接口。 因此,现有的映像模板和触发器资源将继续正常运行,并且部署这些类型的新资源的方式没有变化。 如果你要使用允许自带 ACI 子网的网络拓扑,则需要创建新模板或更新现有模板。

映像生成将自动迁移到独立映像生成,你无需执行任何操作即可选择加入。 同样,自定义日志将继续在存储帐户中提供。

根据映像模板中指定的网络拓扑,你可能发现某些新资源(例如 ACI、虚拟网络、网络安全组和专用终结点)暂时出现在暂存资源组中,而其他一些资源(例如公共 IP 地址)不再出现。 如前所述,这些临时资源仅在生成期间存在,生成后 AIB 会将其删除。

重要

请确保已为 Microsoft.ContainerInstance provider 注册了你的订阅:

  • Azure CLI: az provider register -n Microsoft.ContainerInstance
  • PowerShell:Register-AzResourceProvider -ProviderNamespace Microsoft.ContainerInstance

成功注册订阅后,请确保订阅中没有 Azure 策略拒绝部署 ACI 资源。 仅允许一组受限资源类型(不包括 ACI)的策略将导致独立映像生成失败。

请确保你的订阅具有部署 ACI 资源所需的足够资源配额

重要

根据映像模板中指定的网络拓扑,AIB 可能需要在订阅的暂存资源组中部署临时网络相关的资源。 请确保没有 Azure 策略拒绝在资源组中部署此类资源(包含子网的虚拟网络、网络安全组、专用终结点)。

如果已有 Azure 策略将 DDoS 防护计划应用于任何新创建的虚拟网络,请放宽资源组的策略,或者确保模板托管标识有权加入该计划。 或者,可以使用不需要通过 AIB 部署新虚拟网络的网络拓扑。

重要

确保在使用 AIB 时遵循所有最佳做法

注意

AIB 正在向所有位置和客户推出此更改。 其中一些详细信息(尤其是关于部署新的网络相关资源的信息)可能会发生变化,因为该过程会根据服务遥测数据和反馈进行微调。 如果发生任何错误,请参阅故障排除指南

后续步骤