在虚拟网络中创建 Azure Batch 池

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

为何使用 VNet?

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

若要允许计算节点安全地与其他虚拟机或本地网络进行通信,可以在 Azure VNet 的子网中预配该池。

先决条件

  • 身份验证。 若要使用 Azure VNet,Batch 客户端 API 必须使用 Azure Active Directory (AD) 身份验证。 有关 Azure AD 的 Azure Batch 支持,请参阅使用 Active Directory 对 Batch 服务解决方案进行身份验证

  • 一个 Azure VNet。 参阅以下部分,了解 VNet 要求和配置。 若要提前准备具有一个或多个子网的 VNet,可以使用 Azure 门户、Azure PowerShell、Azure 命令行接口 (CLI) 或其他方法。

    • 若要创建基于 Azure 资源管理器的 VNet,请参阅创建虚拟网络。 推荐将基于资源管理器的 VNet 用于新部署,它是采用虚拟机配置的池支持的唯一选项。
    • 若要创建经典 VNet,请参阅 Create a virtual network (classic) with multiple subnets(创建具有多个子网的虚拟网络(经典))。 仅使用云服务配置的池支持经典 VNet。

VNet 要求

一般要求

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

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

  • 需要通过为 VNet 提供服务的自定义 DNS 服务器解析 Azure 存储终结点。 具体而言,<account>.table.core.chinacloudapi.cn<account>.queue.core.chinacloudapi.cn<account>.blob.core.chinacloudapi.cn 形式的 URL 应当是可以解析的。

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

其他 VNet 要求会有所不同,具体取决于 Batch 池是使用“虚拟机”配置还是使用“云服务”配置。 若要进行新的池部署(部署到 VNet 中),建议使用“虚拟机”配置。

“虚拟机”配置中的池

支持的 VNet - 仅限基于 Azure 资源管理器的 VNet

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

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

权限 - 检查在 VNet 的订阅或资源组上实施的安全策略或锁定是否限制用户管理 VNet 所需的权限。

其他网络资源 - Batch 自动在包含 VNet 的资源组中创建其他网络资源。

重要

对于每 100 个专用或低优先级节点,Batch 会创建:1 个网络安全组 (NSG)、1 个公共 IP 地址、1 个负载均衡器。 这些资源受订阅的资源配额限制。 对于大型池,可能需要为一个或多个此类资源请求增加配额。

网络安全组:Batch 默认值

子网必须允许来自 Batch 服务的入站通信,才能在计算节点上计划任务,必须允许出站通信,才能根据工作负荷需求与 Azure 存储或其他资源通信。 对于“虚拟机”配置中的池,Batch 在附加到计算节点的网络接口 (NIC) 级别添加 NSG。 这些 NSG 配置了以下附加规则:

  • 端口 29876 和 29877 上来自 Batch 服务 IP 地址(对应于 BatchNodeManagement 服务标记)的入站 TCP 流量。
  • 端口 22(Linux 节点)或端口 3389(Windows 节点)上允许远程访问的入站 TCP 流量。 对于 Linux 上某些类型的多实例任务(如 MPI),还需要为包含 Batch 计算节点的子网中的 IP 允许 SSH 端口 22 流量。 这可能会根据子网级 NSG 规则进行阻止(请参阅下文)。
  • 任何端口上通往虚拟网络的出站流量。 这可能会根据子网级 NSG 规则进行修改(请参阅下文)。
  • 任何端口上通往 Internet 的出站流量。 这可能会根据子网级 NSG 规则进行修改(请参阅下文)。

重要

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

网络安全组:指定子网级规则

无需在子网级别指定 NSG,因为 Batch 会配置其自己的 NSG(请参阅上文)。 如果你的一个 NSG 与部署了 Batch 计算节点的子网关联,或者你要应用自定义 NSG 规则来替代应用的默认值,则必须为此 NSG 至少配置入站和出站安全规则,如下表所示。

在端口 3389 (Windows) 或 22 (Linux) 上配置入站流量的前提是,你需要允许对外部源中的计算节点进行远程访问。 如果需要支持使用某些 MPI 运行时的多实例任务,则可能需要在 Linux 上启用端口 22 规则。 使池计算节点可用不一定需要允许这些端口上的流量。

警告

Batch 服务 IP 地址随时可能会更改。 因此,我们强烈建议你对下表中所示的 NSG 规则使用 BatchNodeManagement 服务标记(或区域变体)。 避免用特定 Batch 服务 IP 地址填充 NSG 规则。

入站安全规则

源 IP 地址 源服务标记 源端口 目标 目标端口 协议 操作
空值 BatchNodeManagement 服务标记(如果使用区域变体,则在与 Batch 帐户相同的区域中) * Any 29876-29877 TCP 允许
用户源 IP,用于远程访问 Linux 多实例任务的计算节点和/或计算节点子网(如果需要)。 空值 * Any 3389 (Windows)、22 (Linux) TCP 允许

出站安全规则

源端口 目标 目标服务标记 目标端口 协议 操作
Any * 服务标记 Storage(如果使用区域变体,则在与 Batch 帐户相同的区域中) 443 TCP 允许
Any * 服务标记 BatchNodeManagement(如果使用区域变体,则在与 Batch 帐户相同的区域中) 443 TCP 允许

若要从计算节点联系 Batch 服务(例如,对于作业管理器任务),必须出站到 BatchNodeManagement

“云服务”配置中的池

警告

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

支持的 VNet - 仅限经典 VNet

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

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

权限 - Azure Batch 服务主体必须为指定的 VNet 提供 Classic Virtual Machine Contributor Azure 角色。

网络安全组

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

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

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

入站安全规则

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

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

出站安全规则

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

在 Azure 门户中创建具有 VNet 的池

在创建 VNet 并将一个子网分配给它后,可以使用该 VNet 创建 Batch 池。 请按照下列步骤在 Azure 门户中创建池:

  1. 导航到 Azure 门户中的批处理帐户。 此帐户必须与要使用的 VNet 所在的资源组位于同一订阅和区域中。

  2. 在左侧的“设置”窗口中,选择“池”菜单项。

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

  4. 在“添加池”窗口中,从“映像类型”下拉列表中选择要使用的选项。

  5. 为自定义映像选择正确的“发布服务器/产品/SKU”。

  6. 指定剩余所需设置,包括“节点大小”和“目标专用节点”,以及任何所需的可选设置 。

  7. 在“虚拟网络”中,选择要使用的虚拟网络和子网。

    使用虚拟网络添加池

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

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

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

  • Batch 服务需要与节点进行通信来计划任务。 若要启用此通信,请在你的 Batch 帐户所在的区域中为 Batch 服务使用的每个 IP 地址添加一个 UDR。 Batch 服务的 IP 地址位于 BatchNodeManagement.<region> 服务标记中。 若要获取 Batch 服务的 IP 地址列表,请参阅本地服务标记

  • 确保目标端口 443 上的 Azure Batch 服务的出站 TCP 流量未遭到本地网络阻止。 这些 Azure Batch 服务目标 IP 地址与上述路由所用的 BatchNodeManagement.<region> 服务标记相同。

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

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

添加 UDR 时,请为每个相关 Batch IP 地址前缀定义路由,并将“下一个跃点类型”设置为“Internet” 。

用户定义的路由

警告

Batch 服务 IP 地址随时可能会更改。 为了防止由于 IP 地址更改而造成服务中断的情况出现,请创建一个进程以自动刷新 Batch 服务 IP 地址,并使这些地址在路由表中保持最新状态。

后续步骤