在 Azure 应用服务中启用虚拟网络集成
通过从 Azure 应用服务应用与 Azure 虚拟网络进行集成,你可以从虚拟网络中的应用访问专用资源。
先决条件
虚拟网络集成功能需要:
- 支持虚拟网络集成的应用服务定价层。
- 同一区域中包含空子网的虚拟网络。
子网必须委派给 Microsoft.Web/serverFarms。 如果未在集成之前完成委派,预配过程将会配置此委派。 必须为子网分配一个 IPv4 /28
块(16 个地址)。 建议至少分配 64 个地址(IPv4 /26
块)以实现最大程度的横向缩放。
如果虚拟网络与应用位于不同的订阅中,则必须确保为 Microsoft.Web
资源提供程序注册了使用虚拟网络的订阅。 你可以按照此文档中的说明显式注册该提供程序,但在订阅中创建第一个 Web 应用时也会自动注册该提供程序。
在 Azure 门户中配置
转到应用服务门户中的“网络”。 在“出站流量配置”下,选择“虚拟网络集成”。
选择“添加虚拟网络集成”。
下拉列表包含同一区域订阅内的所有虚拟网络。 选择预先存在的空子网,或创建新的子网。
在集成期间,应用会重启。 完成集成后,系统将显示你所集成的虚拟网络的详细信息。
使用 Azure CLI 配置
你还可以使用 Azure CLI 配置虚拟网络集成:
az webapp vnet-integration add --resource-group <group-name> --name <app-name> --vnet <vnet-name> --subnet <subnet-name>
注意
此命令会检查子网是否已委派给 Microsoft.Web/serverFarms,如果子网未配置,则会应用必要的委派。 如果已配置子网,而你没有权限检查此项配置,或者虚拟网络位于其他订阅中,则可以使用 --skip-delegation-check
参数跳过验证过程。
使用 Azure PowerShell 进行配置
准备参数。
$siteName = '<app-name>'
$vNetResourceGroupName = '<group-name>'
$webAppResourceGroupName = '<group-name>'
$vNetName = '<vnet-name>'
$integrationSubnetName = '<subnet-name>'
$vNetSubscriptionId = '<subscription-guid>'
注意
如果虚拟网络位于 webapp 之外的另一个订阅中,则可使用 Set-AzContext -Subscription "xxxx-xxxx-xxxx-xxxx" 命令设置当前订阅上下文。 将当前订阅上下文设置为在其中部署了虚拟网络的订阅。
检查子网是否委托给 Microsoft.Web/serverFarms。
$vnet = Get-AzVirtualNetwork -Name $vNetName -ResourceGroupName $vNetResourceGroupName
$subnet = Get-AzVirtualNetworkSubnetConfig -Name $integrationSubnetName -VirtualNetwork $vnet
Get-AzDelegation -Subnet $subnet
如果子网未委托给 Microsoft.Web/serverFarms,请使用以下命令添加委托。
$subnet = Add-AzDelegation -Name "myDelegation" -ServiceName "Microsoft.Web/serverFarms" -Subnet $subnet
Set-AzVirtualNetwork -VirtualNetwork $vnet
配置虚拟网络集成。
注意
如果 webapp 位于虚拟网络之外的另一个订阅中,则可使用 Set-AzContext -Subscription "xxxx-xxxx-xxxx-xxxx" 命令设置当前订阅上下文。 将当前订阅上下文设置为在其中部署了 Web 应用的订阅。
$subnetResourceId = "/subscriptions/$vNetSubscriptionId/resourceGroups/$vNetResourceGroupName/providers/Microsoft.Network/virtualNetworks/$vNetName/subnets/$integrationSubnetName"
$webApp = Get-AzResource -ResourceType Microsoft.Web/sites -ResourceGroupName $webAppResourceGroupName -ResourceName $siteName
$webApp.Properties.virtualNetworkSubnetId = $subnetResourceId
$webApp.Properties.vnetRouteAllEnabled = 'true'
$webApp | Set-AzResource -Force