在 Azure 应用服务中启用虚拟网络集成

通过从 Azure 应用服务应用与 Azure 虚拟网络进行集成,你可以从虚拟网络中的应用访问专用资源。

先决条件

虚拟网络集成功能需要:

子网必须委派给 Microsoft.Web/serverFarms。 如果未在集成之前完成委派,预配过程将会配置此委派。 必须为子网分配一个 IPv4 /28 块(16 个地址)。 建议至少分配 64 个地址(IPv4 /26 块)以实现最大程度的横向缩放。

如果虚拟网络与应用位于不同的订阅中,则必须确保为 Microsoft.Web 资源提供程序注册了使用虚拟网络的订阅。 你可以按照此文档中的说明显式注册该提供程序,但在订阅中创建第一个 Web 应用时也会自动注册该提供程序。

在 Azure 门户中配置

  1. 转到应用服务门户中的“网络”。 在“出站流量配置”下,选择“虚拟网络集成”。

  2. 选择“添加虚拟网络集成”。

    Screenshot that shows selecting Virtual network integration.

  3. 下拉列表包含同一区域订阅内的所有虚拟网络。 选择预先存在的空子网,或创建新的子网。

    Screenshot that shows selecting the virtual network.

在集成期间,应用会重启。 完成集成后,系统将显示你所集成的虚拟网络的详细信息。

使用 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

后续步骤