你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

创建没有公共 IP 地址的简化节点通信池

注意

这取代了先前预览版本的Azure Batch 池,没有公共 IP 地址。 这个新版本要求使用简化的计算节点通信

重要

Azure Batch 中对没有公共 IP 地址的池的支持目前在选定区域中提供。

创建 Azure Batch 池时,可以预配没有公共 IP 地址的虚拟机 (VM) 配置池。 本文介绍如何设置没有公共 IP 地址的 Batch 池。

为何使用不具有公共 IP 地址的池?

默认情况下,将为 Azure Batch VM 配置池中的所有计算节点分配一个公共 IP 地址。 Batch 服务使用此地址来支持对 Internet 的出站访问,以及从 Internet 访问计算节点的入站访问。

要限制对这些节点的访问并减少从 Internet 发现的这些节点的能力,可以预配无公共 IP 地址的池。

先决条件

重要

与此功能以前的预览版本相比,先决条件已更改。 确保在继续之前检查每个项目的更改。

  • 使用简化计算节点通信。 有关详细信息,请参阅使用简化计算节点通信

  • Batch 客户端 API 必须使用 Microsoft Entra 身份验证。 对 Microsoft Entra ID 的 Azure Batch 支持记录在使用 Active Directory 对 Batch 服务解决方案进行验证中。

  • Azure 虚拟网络 (VNet) 中创建池,遵循这些要求和配置。 若要提前准备具有一个或多个子网的 VNet,可以使用 Azure 门户、Azure PowerShell、Azure 命令行接口 (Azure CLI) 或其他方法。

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

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

    • 如果计划使用专用终结点,并且虚拟网络启用了专用终结点网络策略,请确保必须允许使用 TCP/443 建立的从 Batch 池的子网到托管专用终结点的子网的入站连接。

  • 为 Batch 节点管理启用出站访问。 默认情况下,没有公共 IP 地址的池不会启用 Internet 出站访问。 选择以下选项之一以允许计算节点访问 Batch 节点管理服务(请参阅使用简化的计算节点通信):

    • 将 nodeManagement 专用终结点用于批处理帐户,便于从虚拟网络对 Batch 节点管理服务进行专用访问。 此解决方案是首选方法。

    • 或者自行提供 Internet 出站访问支持(请参阅 Internet 出站访问)。

重要

专用终结点的两个子资源可用于批处理帐户。 请对没有公共 IP 地址的 Batch 池使用 nodeManagement 专用终结点。 有关更多详细信息,请查看将专用终结点与 Azure Batch 帐户配合使用

当前限制

  1. 没有公共 IP 地址的池必须使用虚拟机配置而不是云服务配置。
  2. 对于没有公共 IP 地址的池,Batch 计算节点的自定义终结点配置不起作用。
  3. 由于没有公共 IP 地址,因此不能将自己指定的公共 IP 地址用于此类型的池。
  4. 不支持 Batch 任务的任务身份验证令牌。 解决方法是将 Batch 池与托管标识配合使用

在 Azure 门户中创建没有公共 IP 地址的池

  1. 如果需要,请在虚拟网络中为批处理帐户创建 nodeManagement 专用终结点(请参阅先决条件中的出站访问要求)。
  2. 导航到 Azure 门户中的批处理帐户。
  3. 在左侧的“设置”窗口中,选择“池”。
  4. 在“池”窗口中,选择“添加”。
  5. 在“添加池”窗口中,从“映像类型”下拉列表中选择要使用的选项。
  6. 为映像选择正确的发布服务器/付费选项/SKU。
  7. 指定剩余所需设置,包括“节点大小”、“目标专用节点”和“目标现成/低优先级节点”。
  8. 对于“节点通信模式”,请在“可选设置”下选择“简化”。
  9. 选择要使用的虚拟网络和子网。 此虚拟网络必须与要创建的池位于同一位置中。
  10. 在“IP 地址预配类型”中,选择“NoPublicIPAddresses”。

以下屏幕截图显示了为启用没有公共 IP 地址的池需要修改的元素。

Screenshot of the Add pool screen with NoPublicIPAddresses selected.

使用 Batch REST API 来创建没有公共 IP 地址的池

下面的示例展示了如何使用 Batch 服务 REST API 来创建使用公共 IP 地址的池。

REST API URI

POST {batchURL}/pools?api-version=2022-10-01.16.0
client-request-id: 00000000-0000-0000-0000-000000000000

请求正文

"pool": {
     "id": "pool-npip",
     "vmSize": "standard_d2s_v3",
     "virtualMachineConfiguration": {
          "imageReference": {
               "publisher": "Canonical",
               "offer": "0001-com-ubuntu-server-jammy",
               "sku": "22_04-lts"
          },
          "nodeAgentSKUId": "batch.node.ubuntu 22.04"
     },
     "networkConfiguration": {
          "subnetId": "/subscriptions/<your_subscription_id>/resourceGroups/<your_resource_group>/providers/Microsoft.Network/virtualNetworks/<your_vnet_name>/subnets/<your_subnet_name>",
          "publicIPAddressConfiguration": {
               "provision": "NoPublicIPAddresses"
          }
     },
     "resizeTimeout": "PT15M",
     "targetDedicatedNodes": 2,
     "targetLowPriorityNodes": 0,
     "taskSlotsPerNode": 1,
     "taskSchedulingPolicy": {
          "nodeFillType": "spread"
     },
     "enableAutoScale": false,
     "enableInterNodeCommunication": false,
     "targetNodeCommunicationMode": "simplified"
}

使用 ARM 模板创建不具有公共 IP 地址的池

可以通过此 Azure 快速入门模板使用 Azure 资源管理器 (ARM) 模板创建不具有公共 IP 地址的池。

模板将部署以下资源:

  • 配置为阻止对 Batch 节点管理终结点进行公共网络访问的具有 IP 防火墙的 Azure Batch 帐户
  • 配置为阻止 Internet 出站访问的具有网络安全组的虚拟网络
  • 用于访问帐户的 Batch 节点管理终结点的专用终结点
  • 使用链接到虚拟网络的专用 DNS 区域实现专用终结点的 DNS 集成
  • 部署在虚拟网络中且没有公共 IP 地址的 Batch 池

如果你熟悉如何使用 ARM 模板,请选择“部署到 Azure”按钮。 Azure 门户中会打开模板。

Button to deploy the Resource Manager template to Azure.

注意

如果专用终结点部署由于 groupId“nodeManagement”无效而失败,请检查该区域是否位于简化计算节点通信的受支持的列表中。 选择正确的区域,然后重试部署。

对 Internet 的出站访问

在没有公共 IP 地址的池中,你的虚拟机将无法访问公共 Internet,除非你适当地配置了网络设置,例如使用虚拟网络 NAT。 NAT 仅允许从虚拟网络中的虚拟机对 Internet 进行出站访问。 Batch 创建的计算节点将无法被公开访问,因为这些计算节点没有关联的公共 IP 地址。

提供出站连接的另一种方法是使用用户定义的路由 (UDR)。 此方法使你可以将流量路由到具有公共 Internet 访问权限的代理计算机,例如 Azure 防火墙

重要

没有为没有公共 IP 地址的简化节点通信池创建额外的网络资源(负载均衡器、网络安全组)。 由于池中的计算节点未绑定到任何负载均衡器,Azure 可能会提供默认出站访问权限。 但是,默认出站访问不适用于生产工作负载,将于 2025 年 9 月 30 日停用(请参阅官方公告)。 因此,如果工作负载确实需要 Internet 出站访问,或者池不使用专用终结点访问 Batch 节点管理终结点,则必须提供自己的解决方案来启用 Internet 出站访问。

疑难解答

Batch 池中不可用的计算节点

在没有公共 IP 地址的 Batch 池中,如果计算节点进入不可用状态,则首要检查需验证对 Batch 节点管理服务的出站访问。 必须正确配置它,计算节点才能从虚拟网络连接到服务。

使用 nodeManagement 专用终结点

如果在虚拟网络中创建了用于 Batch 帐户的节点管理专用终结点:

  • 检查专用终结点是否在正确的虚拟网络下创建,它的预配状态是否为“成功”,以及它是否处于“已批准”状态。
  • 检查是否已为 Batch 帐户的节点管理终结点正确设置了 DNS 配置:
    • 如果专用终结点使用自动专用 DNS 区域集成创建,请检查 DNS A 记录是否已在专用 DNS 区域 privatelink.batch.azure.com 中正确配置,并且该区域是否已链接到虚拟网络。
    • 如果使用自己的 DNS 解决方案,请确保 Batch 节点管理终结点的 DNS 记录配置正确,并指向专用终结点 IP 地址。
  • 检查帐户的 Batch 节点管理终结点的 DNS 解析。 可以通过从虚拟网络运行 nslookup <nodeManagementEndpoint> 来确认,DNS 名称应解析为专用终结点 IP 地址。
  • 如果虚拟网络启用了专用终结点网络策略,请检查 NSG 和 UDR 中是否有 Batch 池和专用终结点的子网。 必须允许使用 TCP/443 建立的从 Batch 池的子网到托管专用终结点的子网的入站连接。
  • 在 Batch 池的子网中,使用默认 HTTPS 端口 (443) 对节点管理终结点运行 TCP ping。 此探测可以判断专用链接连接是否按预期工作。
# Windows
Test-TcpConnection -ComputeName <nodeManagementEndpoint> -Port 443
# Linux
nc -v <nodeManagementEndpoint> 443

如果 TCP ping 失败(例如超时),则通常是专用链接连接出现问题,可以针对此专用终结点资源提交 Azure 支持票证。 否则,可能会像一般 Batch 池一样对节点不可用问题进行故障排除,以及针对批处理帐户提交支持票证。

使用自己的 Internet 出站解决方案

如果使用的是自己的 Internet 出站解决方案而不是专用终结点,请对节点管理终结点运行 TCP ping。 如果不起作用,请遵循简化计算节点通信的详细要求来检查出站访问是否已正确配置。

连接到计算节点

在没有公共 IP 地址的 Batch 池中,无法对计算节点进行 Internet 入站访问。 若要访问计算节点进行调试,需要从虚拟网络进行连接:

  • 使用虚拟网络中的 jumpbox 计算机,然后从该处连接到计算节点。
  • 或者,请尝试使用其他远程连接解决方案,例如 Azure Bastion
    • 在启用了基于 IP 的连接的虚拟网络中创建 Bastion。
    • 使用 Bastion 通过其 IP 地址连接到计算节点。

可以遵循指南连接到计算节点,获取 Batch 池中目标计算节点的用户凭据和 IP 地址。

从以前预览版的“无公共 IP 池”迁移

对于使用先前预览版 Azure Batch 无公共 IP 池的现有池,只能迁移在虚拟网络中创建的池。

  1. 在虚拟网络中创建用于 Batch 节点管理的专用终结点
  2. 将池的节点通信模式更新为简化模式。
  3. 将池纵向缩减为零个节点。
  4. 再次横向扩展池。 然后,池会自动迁移到新版本。

后续步骤