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

配置对 Azure Batch 池中计算节点的远程访问

如果已配置,则可以允许具有网络连接的节点用户以外部方式连接到 Batch 池中的计算节点。 例如,用户可以在端口 3389 上通过远程桌面 (RDP) 连接到 Windows 池中的计算节点。 同样,在默认情况下,用户可以在端口 22 上通过安全外壳 (SSH) 连接到 Linux 池中的计算节点。

注意

从 API 版本 2024-07-01 以及 2025 年 11 月 30 日之后创建的所有池(无论 API 版本如何)开始,Batch 不再自动映射 SSH 和 RDP 的常用远程访问端口。 如果希望允许通过使用 API 版本 2024-07-01 或更高版本(以及 2025 年 11 月 30 日之后)创建的池远程访问 Batch 计算节点,则必须手动配置池终结点配置以启用此类访问。

在你的环境中,你可能需要启用、限制或禁用外部访问设置或 Batch 池上的任何其他端口。 使用 Batch API 设置 PoolEndpointConfiguration 属性,可以修改这些设置。

Batch 池终结点配置

终结点配置由一个或多个前端端口的网络地址转换 (NAT) 池构成。 请勿将 NAT 池与计算节点的 Batch 池混淆。 将每个 NAT 池设置为覆盖此池的计算节点上的默认连接设置。

每个 NAT 池配置包括一个或多个网络安全组 (NSG) 规则。 每个 NSG 规则允许或拒绝特定的网络流量流向终结点。 可以选择允许或拒绝所有流量、由服务标记(例如“Internet”)标识的流量,或者来自特定 IP 地址或子网的流量。

注意事项

  • 池终结点配置是池的网络配置的一部分。 网络配置可以选择性地包含用于将池加入 Azure 虚拟网络的设置。 如果在虚拟网络中设置池,可以创建使用虚拟网络中的地址设置的 NSG 规则。
  • 配置 NAT 池时,可以配置多个 NSG 规则。 将按优先顺序检查规则。 一旦应用某个规则,不再检查其他规则的匹配情况。

示例:允许来自特定 IP 地址的 RDP 流量

以下 C# 代码片段演示了如何在 Windows 池中的计算节点上配置 RDP 终结点,以便仅允许来自 IP 地址 198.168.100.7 的 RDP 访问。 第二条 NSG 规则则是拒绝与该 IP 地址不匹配的流量。

using Microsoft.Azure.Batch;
using Microsoft.Azure.Batch.Common;

namespace AzureBatch
{
    public void SetPortsPool()
    {
        pool.NetworkConfiguration = new NetworkConfiguration
        {
            EndpointConfiguration = new PoolEndpointConfiguration(new InboundNatPool[]
            {
                new InboundNatPool("RDP", InboundEndpointProtocol.Tcp, 3389, 7500, 8000, new NetworkSecurityGroupRule[]
                {
                    new NetworkSecurityGroupRule(179, NetworkSecurityGroupRuleAccess.Allow, "198.168.100.7"),
                    new NetworkSecurityGroupRule(180, NetworkSecurityGroupRuleAccess.Deny, "*")
                })
            })
        };
    }
}

示例:允许来自特定子网的 SSH 流量

以下 Python 代码片段演示如何在 Linux 池中的计算节点上配置 SSH 终结点,以便仅允许来自子网 192.168.1.0/24 的访问。 第二条 NSG 规则则是拒绝与该子网不匹配的流量。

from azure.batch import models as batchmodels

class AzureBatch(object):
    def set_ports_pool(self, **kwargs):
        pool.network_configuration = batchmodels.NetworkConfiguration(
            endpoint_configuration=batchmodels.PoolEndpointConfiguration(
                inbound_nat_pools=[batchmodels.InboundNATPool(
                    name='SSH',
                    protocol='tcp',
                    backend_port=22,
                    frontend_port_range_start=4000,
                    frontend_port_range_end=4100,
                    network_security_group_rules=[
                        batchmodels.NetworkSecurityGroupRule(
                            priority=170,
                            access='allow',
                            source_address_prefix='192.168.1.0/24'
                        ),
                        batchmodels.NetworkSecurityGroupRule(
                            priority=175,
                            access='deny',
                            source_address_prefix='*'
                        )
                    ]
                )
                ]
            )
        )

示例:拒绝所有 RDP 流量

以下 C# 代码片段演示如何在 Windows 池中的计算节点上配置 RDP 终结点,用于拒绝所有网络流量。 该终结点使用 60000 - 60099 范围内的端口的前端池。

注意

从 Batch API 版本 2024-07-01 开始,默认不再映射通常与 RDP 关联的端口 3389。 如果使用此 API 版本或更高版本创建的 Batch 池不需要支持来自 Internet 的访问,则不再需要创建显式拒绝规则。 你仍可能需要指定显式拒绝规则来限制来自其他源的访问。

using Microsoft.Azure.Batch;
using Microsoft.Azure.Batch.Common;

namespace AzureBatch
{
    public void SetPortsPool()
    {
        pool.NetworkConfiguration = new NetworkConfiguration
        {
            EndpointConfiguration = new PoolEndpointConfiguration(new InboundNatPool[]
            {
              new InboundNatPool("RDP", InboundEndpointProtocol.Tcp, 3389, 60000, 60099, new NetworkSecurityGroupRule[]
                {
                    new NetworkSecurityGroupRule(162, NetworkSecurityGroupRuleAccess.Deny, "*"),
                })
            })
        };
    }
}

示例:拒绝来自 Internet 的所有 SSH 流量

以下 Python 代码片段演示如何在 Linux 池中的计算节点上配置 SSH 终结点,用于拒绝所有 Internet 流量。 该终结点使用 4000 - 4100 范围内的端口的前端池。

注意

从 Batch API 版本 2024-07-01 开始,默认不再映射通常与 SSH 关联的端口 22。 如果使用此 API 版本或更高版本创建的 Batch 池不需要支持来自 Internet 的访问,则不再需要创建显式拒绝规则。 你仍可能需要指定显式拒绝规则来限制来自其他源的访问。

from azure.batch import models as batchmodels

class AzureBatch(object):
    def set_ports_pool(self, **kwargs):
        pool.network_configuration = batchmodels.NetworkConfiguration(
            endpoint_configuration=batchmodels.PoolEndpointConfiguration(
                inbound_nat_pools=[batchmodels.InboundNATPool(
                    name='SSH',
                    protocol='tcp',
                    backend_port=22,
                    frontend_port_range_start=4000,
                    frontend_port_range_end=4100,
                    network_security_group_rules=[
                        batchmodels.NetworkSecurityGroupRule(
                            priority=170,
                            access=batchmodels.NetworkSecurityGroupRuleAccess.deny,
                            source_address_prefix='Internet'
                        )
                    ]
                )
                ]
            )
        )

后续步骤