你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
客户现在可以将专用链接服务连接到任何可专用路由的目标 IP 地址。
Azure 专用链接服务允许服务提供商通过将应用程序置于标准负载均衡器后面,以私密且安全地向客户提供其应用程序。 专用链接服务 Direct Connect 扩展了此功能,并允许客户将专用链接服务直接连接到任何可专用路由的目标 IP 地址。 此配置特别适用于为需要基于 IP 的直接路由的应用程序提供专用连接的方案,例如数据库连接或自定义应用程序。
本文介绍专用链接服务 Direct Connect 以及如何使用 Azure PowerShell、Azure CLI 或 Terraform 创建它。
注释
此功能以公共预览版提供,可在选定区域中使用。 在为订阅启用之前,请查看所有注意事项。
注释
可以通过在门户中激活功能的预览链接获取门户支持:(aka.ms/PortalPLSDirectConnect)。 不使用预览链接访问功能的完整门户支持尚待实现。
先决条件
- 拥有有效订阅的 Azure 帐户。
- 在本地安装 Azure PowerShell 或使用 Azure Cloud Shell。 有关详细信息,请参阅安装 Azure PowerShell。
- 在本地安装 Azure CLI 或使用 Azure Cloud Shell。 有关详细信息,请参阅安装 Azure CLI。
- 对于 Terraform:安装和配置 Terraform。
- 在订阅中启用功能标志Microsoft.Network/AllowPrivateLinkserviceUDR。 按照说明通过 Azure CLI 或 PowerShell 注册: 启用 Azure 预览功能。
- 包含子网的虚拟网络。
- 要设置为目标 IP 地址的可路由 IP 地址。
什么是专用链接服务 Direct Connect?
专用链接服务 (PLS) Direct Connect 允许:
- 将流量直接路由 到虚拟网络中的特定专用可路由目标 IP 地址。
- 绕过需要直接 IP 连接的方案的负载均衡器要求。
- 支持需要精确控制流量目标的自定义路由方案。
- 配置扩展方案 ,例如安全访问本地资源、第三方 SaaS 和虚拟设备。
常见用例
- 直接连接到需要静态 IP 连接的应用程序的数据库
- 支持无法通过负载均衡器转发的自定义应用场景
- 启用需要基于 IP 的直接路由的旧应用程序
- 需要具有专用链接的用户定义路由(UDR)的方案
- 提供本地连接
关键要求
- 提供至少 2 个 IP 配置:对于此功能,高可用性需要至少 2 个 IP 配置,并且配置数必须是 2 的倍数。
- 指定静态目标 IP 地址:必须在虚拟网络中访问目标 IP。
- 禁用子网上的 privateLinkServiceNetworkPolicies 属性:此功能不需要此属性。
局限性
使用专用链接服务 Direct Connect 时请注意以下限制:
- 不支持专用终结点作为目标:目标 IP 地址不能是专用终结点。
- 至少需要 2 个 IP 配置:部署 PLS Direct Connect 至少需要 2 个 IP 配置或 2 个(限制 为 8 个最大值)的倍数。
- 每个订阅最多 10 个 PLS:存在硬件限制,即每个订阅的每个区域最多可拥有 10 个 PLS。
- 带宽限制:每个 PLS 直接连接可以支持高达 10 Gbps 的带宽。
- 静态 IP 要求:目标目标 IP 地址必须静态分配,不支持动态分配的目标 IP 地址。
- 跨区域限制:源专用终结点、专用链接服务和客户端 VM 必须位于同一区域。 此功能正式发布时,将删除此限制。
- 区域可用性:此功能适用于受限区域(美国中北部、美国东部 2、美国中部、美国中南部、美国西部 2、美国西部 2、美国西部 3、亚洲东南部、澳大利亚东部、西班牙中部)。
注意事项
- 无迁移支持:部署此功能需要新的专用链接服务。 不支持迁移现有的专用链接服务。
- 可用的客户端支持:使用 PowerShell、CLI 或 Terraform 部署此新的专用链接服务。 可以通过在门户中激活功能的预览链接获取门户支持:(aka.ms/PortalPLSDirectConnect)。 不使用预览链接配置功能的完整门户支持尚待实现。
- 启用 IP 转发:如果订阅上有禁用 IP 转发的策略,则必须禁用该策略以允许正确配置。
创建专用链接服务 Direct Connect
使用此脚本通过 Azure PowerShell 创建专用链接服务 Direct Connect:
# Define variables
$resourceGroupName = "rg-pls-directconnect"
$location = "westus"
$vnetName = "pls-vnet"
$subnetName = "pls-subnet"
$plsName = "pls-directconnect"
$destinationIP = "10.0.1.100"
# Create resource group
New-AzResourceGroup -Name $resourceGroupName -Location $location
# Create virtual network (corrected parameter name)
$subnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix "10.0.1.0/24" -privateLinkServiceNetworkPoliciesFlag "Disabled"
$vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $resourceGroupName -Location $location -AddressPrefix "10.0.0.0/16" -Subnet $subnet
# Get subnet reference
$subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name $subnetName
# Create IP configurations for Private Link service (minimum 2 or in multiples of 2 required)
$ipConfig1 = @{
Name = "ipconfig1"
PrivateIpAllocationMethod = "Dynamic"
Subnet = $subnet
Primary = $true
}
$ipConfig2 = @{
Name = "ipconfig2"
PrivateIpAllocationMethod = "Dynamic"
Subnet = $subnet
Primary = $false
}
# Create Private Link service Direct Connect
$pls = New-AzPrivateLinkservice `
-Name $plsName `
-ResourceGroupName $resourceGroupName `
-Location $location `
-IpConfiguration @($ipConfig1, $ipConfig2) `
-DestinationIPAddress $destinationIP
Write-Output "Private Link service created successfully!"
Write-Output "Private Link service ID: $($pls.Id)"
Write-Output "Destination IP Address: $destinationIP"
创建专用终结点以测试连接性
创建专用链接服务 Direct Connect 后,创建专用终结点以测试连接:
# Variables for Private Endpoint
$peResourceGroupName = "rg-pe-test"
$peVnetName = "pe-vnet"
$peSubnetName = "pe-subnet"
$privateEndpointName = "pe-to-pls"
$privateLinkserviceId = "/subscriptions/your-subscription-id/resourceGroups/rg-pls-destinationip/providers/Microsoft.Network/privateLinkservices/pls-directconnect"
# Create resource group for PE
New-AzResourceGroup -Name $peResourceGroupName -Location $location
# Create VNet for Private Endpoint
$peSubnet = New-AzVirtualNetworkSubnetConfig -Name $peSubnetName -AddressPrefix "10.1.1.0/24" -PrivateEndpointNetworkPoliciesFlag "Disabled"
$peVnet = New-AzVirtualNetwork -Name $peVnetName -ResourceGroupName $peResourceGroupName -Location $location -AddressPrefix "10.1.0.0/16" -Subnet $peSubnet
# Get subnet reference for Private Endpoint
$peSubnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $peVnet -Name $peSubnetName
# Create Private Endpoint
$privateLinkserviceConnection = @{
Name = "connection-to-pls"
PrivateLinkserviceId = $privateLinkserviceId
}
$privateEndpoint = New-AzPrivateEndpoint -Name $privateEndpointName -ResourceGroupName $peResourceGroupName -Location $location -Subnet $peSubnet -PrivateLinkserviceConnection $privateLinkserviceConnection
Write-Output "Private Endpoint created: $($privateEndpoint.Name)"
验证配置
创建专用链接服务和专用终结点后,请验证配置:
检查专用链接服务状态
# Get Private Link service details
$pls = Get-AzPrivateLinkservice -Name $plsName -ResourceGroupName $resourceGroupName
Write-Output "Private Link service: $($pls.Name)"
Write-Output "Provisioning State: $($pls.ProvisioningState)"
Write-Output "Destination IP: $($pls.DestinationIPAddress)"
Write-Output "IP Configurations: $($pls.IpConfigurations.Count)"
# Check Private Endpoint connections
$connections = $pls.PrivateEndpointConnections
foreach ($connection in $connections) {
Write-Output "PE Connection: $($connection.Name) - Status: $($connection.PrivateLinkserviceConnectionState.Status)"
}
Troubleshooting
常见问题和解决方案
问题:“你必须包含至少 2 个 IP 配置,且数量需为 2 的倍数”
解决方案:确保在配置 PLS Direct Connect 时至少配置 2 个 IP 配置。
问题:“无法访问目标 IP 地址”
解决方案:验证:
- 可在虚拟网络中访问目标 IP
- PLS 和目标 IP 之间没有 IP 转发或 NAT
- 网络安全组允许所需的流量
清理资源
测试后,请清理资源以避免持续产生收费:
# Remove resource groups (this deletes all resources within them)
Remove-AzResourceGroup -Name $resourceGroupName -Force
Remove-AzResourceGroup -Name $peResourceGroupName -Force
FAQs
功能标志在门户上不可见。 如何注册该功能?
- 通过 Azure CLI 或 PowerShell 注册功能标志 Microsoft.Network/AllowPrivateLinkserviceUDR,请参阅以下作指南: 在 Azure 订阅中设置预览功能 - Azure 资源管理器 |Microsoft Learn。
privateLinkServiceNetworkPolicies 是否是否需要设置为 True,例如由 GA 设置?
- 此功能不需要属性 privateLinkServiceNetworkPolicies,因此将其设置为 false。