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

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

先决条件

虚拟网络集成功能需要:

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

如果虚拟网络与应用位于不同的订阅中,请确保为 Microsoft.Web 资源提供程序注册使用虚拟网络的订阅。 在订阅中创建第一个 Web 应用时会注册提供程序。 若要显式注册提供程序,请参阅注册资源提供程序

在 Azure 门户中配置

  1. 在 Azure 门户中转到你的应用。 选择“设置”>“网络”。 在“出站流量配置”下的“虚拟网络集成”旁边,选择“未配置”链接

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

    屏幕截图显示如何选择虚拟网络集成。

  3. 选择订阅和虚拟网络。

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

    显示选择虚拟网络的屏幕截图。

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

使用 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 进行配置

  1. 准备参数。

    $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" 命令设置当前订阅上下文。 将当前订阅上下文设置为在其中部署了虚拟网络的订阅。

  2. 检查子网是否委托给 Microsoft.Web/serverFarms。

    $vnet = Get-AzVirtualNetwork -Name $vNetName -ResourceGroupName $vNetResourceGroupName
    $subnet = Get-AzVirtualNetworkSubnetConfig -Name $integrationSubnetName -VirtualNetwork $vnet
    Get-AzDelegation -Subnet $subnet
    
  3. 如果子网未委托给 Microsoft.Web/serverFarms,请使用这些命令添加委托。

    $subnet = Add-AzDelegation -Name "myDelegation" -ServiceName "Microsoft.Web/serverFarms" -Subnet $subnet
    Set-AzVirtualNetwork -VirtualNetwork $vnet
    
  4. 配置虚拟网络集成。

    $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
    

    注意

    如果 webapp 位于虚拟网络之外的另一个订阅中,则可使用 Set-AzContext -Subscription "xxxx-xxxx-xxxx-xxxx" 命令设置当前订阅上下文。 将当前订阅上下文设置为在其中部署了 Web 应用的订阅。