在虚拟网络中创建 Azure Batch 池

创建 Azure Batch 池时,可以在指定的 Azure 虚拟网络的子网中预配该池。 本文介绍了如何在虚拟网络中设置 Batch 池。

为何要使用虚拟网络?

池中的计算节点可相互通信(例如,为了运行多实例任务而通信),无需单独的虚拟网络。 但是默认情况下,池中的节点不能与池外的任何虚拟机 (VM)(例如许可证或文件服务器)进行通信。

为了使计算节点能够安全地与其他虚拟机或本地网络进行通信,可在虚拟网络的子网中预配该池。

先决条件

  • 身份验证。 若要使用 Azure 虚拟网络,Batch 客户端 API 必须使用 Microsoft Entra 身份验证。 若要了解详细信息,请参阅使用 Active Directory 对 Batch 服务解决方案进行身份验证

  • 一个 Azure 虚拟网络。 若要提前准备具有一个或多个子网的虚拟网络,可以使用 Azure 门户、Azure PowerShell、Azure CLI (CLI) 或其他方法。

    • 若要创建基于 Azure 资源管理器的虚拟网络,请参阅创建虚拟网络。 推荐将基于资源管理器的虚拟网络用于新部署,它是采用虚拟机配置的池支持的唯一选项。

    • 若要创建经典虚拟网络,请参阅创建具有多个子网的虚拟网络(经典)。 只有使用云服务配置的池支持经典虚拟网络。

      重要

      避免将 172.17.0.0/16 用于 Azure Batch 池 VNet。 它是 Docker 桥接网络的默认设置,可能与要连接到 VNet 的其他网络发生冲突。 为 Azure Batch 池创建虚拟网络需要仔细规划网络基础结构。

一般虚拟网络要求

  • 虚拟网络必须与用于创建池的 Batch 帐户位于同一订阅和区域中。

  • 为池指定的子网必须提供足够多的未分配 IP 地址来容纳面向该池的 VM 数量;也就是说,足够容纳池的 targetDedicatedNodestargetLowPriorityNodes 属性。 如果子网没有足够的未分配 IP 地址,池将分配部分计算节点,并发生调整大小错误。

  • 如果不使用简化的计算节点通信,则需要由为虚拟网络提供服务的任何自定义 DNS 服务器解析 Azure 存储终结点。 具体而言,<account>.table.core.chinacloudapi.cn<account>.queue.core.chinacloudapi.cn<account>.blob.core.chinacloudapi.cn 形式的 URL 应当是可以解析的。

  • 可在同一虚拟网络或同一子网中创建多个池(前提是它有足够的地址空间)。 单个池不能跨多个虚拟网络或子网存在。

其他虚拟网络要求会有所不同,具体取决于 Batch 池是位于 VirtualMachineConfiguration 还是 CloudServiceConfiguration 中。 建议对 Batch 池使用 VirtualMachineConfiguration,因为 CloudServiceConfiguration已弃用

重要

可采用两种节点通信模式之一来配置 Batch 池。 经典节点通信模式是 Batch 服务启动的与计算节点的通信模式。 简化节点通信模式是计算节点启动的与 Batch 服务的通信模式。

  • 将用于 Batch 池的任何虚拟网络或对等虚拟网络不应与计算节点上的软件定义网络或路由具有重叠的 IP 地址范围。 冲突的常见来源是使用容器运行时,例如 docker。 Docker 将创建一个默认网桥,其定义的子网范围为 172.17.0.0/16。 在该默认 IP 地址空间中的虚拟网络中运行的任何服务都将与计算节点上的服务发生冲突,例如通过 SSH 进行远程访问。

虚拟机配置中的池

要求:

  • 支持的虚拟网络:仅限基于 Azure 资源管理器的虚拟网络。
  • 子网 ID:使用 Batch API 指定子网时,请使用子网的资源标识符。 标识符的形式为:

/subscriptions/{subscription}/resourceGroups/{group}/providers/Microsoft.Network/virtualNetworks/{network}/subnets/{subnet}

  • 权限:检查对虚拟网络的订阅或资源组实施的安全策略或锁定是否限制了管理虚拟网络所需的用户权限。
  • 网络资源:Batch 自动在包含虚拟网络的资源组中创建更多网络资源。

重要

对于每 100 个专用或低优先级节点,Batch 会创建 1 个网络安全组 (NSG)、1 个公共 IP 地址和

1 个负载均衡器。 这些资源受订阅的资源配额限制。 对于大型池,可能需要为一个或多个此类资源请求增加配额。

虚拟机配置池的网络安全组:Batch 默认值

Batch 会在 Batch 池中每个虚拟机规模集部署的网络接口级创建一个网络安全组 (NSG)。 对于在 simplified 计算节点通信下没有公共 IP 地址的池,不创建 NSG。

为了在计算节点和 Batch 服务之间提供必要的通信,配置这些 NSG 使得:

  • 端口 29876 和 29877 上来自 Batch 服务 IP 地址(对应于 BatchNodeManagement.region 服务标记)的入站 TCP 流量。 此规则仅在 classic 池通信模式下创建。
  • 端口 22(Linux 节点)或端口 3389(Windows 节点)上的入站 TCP 流量,分别在默认端口上允许 SSH 或 RDP 远程访问。 对于 Linux 上某些类型的多实例任务(例如 MPI),可能需要为包含 Batch 计算节点的子网中的 IP 允许 SSH 流量。 某些 MPI 运行时可能需要通过 SSH 启动,这通常在专用 IP 地址空间上进行路由。 根据子网级 NSG 规则,此流量可能会被阻止。
  • 将端口 443 上的任何流量出站到与 BatchNodeManagement.region 服务标记对应的 Batch 服务 IP 地址。
  • 任何端口上通往虚拟网络的出站流量。 此规则可能会根据子网级 NSG 规则进行修改。
  • 任何端口上通往 Internet 的出站流量。 此规则可能会根据子网级 NSG 规则进行修改。

重要

在 Batch 配置的 NSG 中修改或添加入站或出站规则时,请务必小心。 如果 NSG 拒绝与指定子网中的计算节点通信,则 Batch 服务会将计算节点的状态设置为“不可用”。 此外,不得将资源锁应用于 Batch 创建的任何资源,因为这可能会由于用户发起的操作(例如删除池)而导致资源清理被阻止。

虚拟机配置池的网络安全组:指定子网级规则

如果你的一个 NSG 与 Batch 计算节点的子网关联,则必须为此 NSG 至少配置入站和出站安全规则,如下表所示。

警告

Batch 服务 IP 地址随时可能会更改。 因此,应该对下表中所示的 NSG 规则使用 BatchNodeManagement.region 服务标记。 避免用特定 Batch 服务 IP 地址填充 NSG 规则。

入站安全规则

源服务标记或 IP 地址 目标端口 协议 池通信模式 必须
BatchNodeManagement.region服务标记 29876-29877 TCP 经典
用于远程访问计算节点的源 IP 地址 3389 (Windows)、22 (Linux) TCP 经典或简化

在端口 3389 (Windows) 或 22 (Linux) 上配置入站流量的前提是,你需要分别允许在默认 RDP 或 SSH 端口上对外部源中的计算节点进行远程访问。 如果需要在包含 Batch 计算节点的子网中支持具有某些消息传递接口 (MPI) 运行时的多实例任务,则可能需要允许 Linux 上的 SSH 流量,因为每个子网级别的 NSG 规则可能会阻止流量。 MPI 流量通常通过专用 IP 地址空间传输,但 MPI 运行时和运行时配置之间可能会有所不同。 使池计算节点可用不一定需要允许这些端口上的流量。 你也可以通过配置池终结点在这些端口上禁用默认远程访问。

入站安全规则

目标服务标记 目标端口 协议 池通信模式 必须
BatchNodeManagement.region服务标记 443 * 简化
Storage.region服务标记 443 TCP 经典

如果使用作业管理器任务,或者你的任务必须回传给 Batch 服务,则在 classic 池通信模式下需要出站到 BatchNodeManagement.region 服务标记。 对于在 simplified 池通信模式下出站到 BatchNodeManagement.region,Batch 服务目前仅使用 TCP 协议,但可能需要 UDP 才能实现将来的兼容性。 对于使用 simplified 通信模式且具有节点管理专用终结点的无公共 IP 地址的池,不需要 NSG。 有关 BatchNodeManagement.region 服务标记的出站安全规则的详细信息,请参阅使用简化计算节点通信

云服务配置中的池

警告

云服务配置池已被弃用。 请改用虚拟机配置池。

要求:

  • 支持的虚拟网络:仅限经典虚拟网络。

  • 子网 ID:使用 Batch API 指定子网时,请使用子网的资源标识符。 标识符的形式为:

    /subscriptions/{subscription}/resourceGroups/{group}/providers/Microsoft.ClassicNetwork/virtualNetworks/{network}/subnets/{subnet}

  • 权限:Azure Batch 服务主体必须为指定的虚拟网络提供 Classic Virtual Machine Contributor 这一 Azure 角色。

云服务配置池的网络安全组

子网必须允许来自 Batch 服务的入站通信,才能在计算节点上计划任务,并且它必须允许出站通信,才能与 Azure 存储或其他资源通信。

不需指定 NSG,因为 Batch 将入站通信配置为只能从 Batch IP 地址到池节点。 但是,如果指定的子网具有关联的 NSG 和/或防火墙,则配置入站和出站安全规则,如以下各表中所示。 如果 NSG 拒绝与指定子网中的计算节点通信,则 Batch 服务会将计算节点的状态设置为“不可用”。

如果需要允许对池节点进行 RDP 访问,请在端口 3389 上为 Windows 配置入站流量。 无需此规则即可使用池节点。

入站安全规则

源 IP 地址 源端口 目标 目标端口 协议 操作
任意

虽然此规则实际上要求“全部允许”,但 Batch 服务会在每个节点级别应用 ACL 规则,以筛选掉所有非 Batch 服务 IP 地址。
* 任意 10100、20100、30100 TCP 允许
可选,用于允许对计算节点进行 RDP 访问。 * Any 3389 TCP 允许

出站安全规则

源端口 目标 目标端口 协议 操作
任意 * 任意 443 任意 Allow

在 Azure 门户中创建具有虚拟网络的池

创建虚拟网络并为其分配子网后,可以创建具有该虚拟网络的 Batch 池。 请按照下列步骤在 Azure 门户中创建池:

  1. 在 Azure 门户顶部的搜索栏中,搜索“Batch 帐户”并将其选中。 选择你的 Azure Batch 帐户。 此帐户必须与要使用的虚拟网络所在的资源组位于同一订阅和区域中。

  2. 从左侧导航窗格中选择“池”。

  3. 在“池”窗口中,选择“添加”。

    Screenshot of the Pools page in a Batch account that highlights the Pools option in the left side navigation and add button on the Pools page.

  4. 在“添加池”页上,选择选项并输入池的信息。 若要详细了解如何为 Batch 帐户创建池,请参阅创建计算节点池。 节点大小、目标专用节点和现成/低优先级节点,以及任何所需的可选设置。

  1. 在“虚拟网络”中,选择要使用的虚拟网络和子网。
  2. 选择“确定”创建池。

重要

如果你尝试删除池正在使用的子网,则会收到错误消息。 必须先删除所有使用子网的池,然后才能删除该子网。

用户定义的用于强制隧道的路由

你的组织可能会要求将 Internet 绑定的流量从子网重定向(强制)回本地位置以进行检查和日志记录。 此外,你可能已针对虚拟网络中的子网启用了强制隧道。

为了确保池中的节点在启用了强制隧道的虚拟网络中工作,必须为该子网添加以下用户定义的路由 (UDR)。

对于经典通信模式池:

  • Batch 服务需要与节点进行通信来计划任务。 若要启用此通信,请在你的 Batch 帐户所在的区域中添加一个与 BatchNodeManagement.region 服务标记对应的 UDR。 将下一个跃点类型设置为 Internet。

  • 确保你的本地网络不会阻止发送到目标端口 443 上的 Azure 存储(具体而言,是采用 *.table.core.chinacloudapi.cn*.queue.core.chinacloudapi.cn*.blob.core.chinacloudapi.cn 格式的 URL)的出站 TCP 流量。

对于不使用节点管理专用终结点的简化通信模式池:

  • 确保你的本地网络不会阻止指向目标端口 443 上的 Azure Batch BatchNodeManagement.region 服务标记的出站 TCP/UDP 流量。 目前,仅使用 TCP 协议,但可能需要 UDP 才能实现将来的兼容性。

对于所有池:

  • 如果使用虚拟文件装载,请查看网络要求,并确保未阻止所需的流量。

警告

Batch 服务 IP 地址随时可能会更改。 若要防止由于 Batch 服务 IP 地址更改而出现服务中断,请不要直接指定 IP 地址。 请改用 BatchNodeManagement.region服务标记

后续步骤