本文介绍如何将Azure Virtual Network与 Azure App Service 集成。 通过集成,可以从Azure virtual network内的App Service应用访问专用资源。 提供了适用于 Azure 门户、Azure CLI 和 Azure PowerShell 的操作步骤。
先决条件
在一个支持虚拟网络集成的指定 Azure 应用服务计算定价层中创建的现有应用。
- 如果计划允许通过子网上的专用终结点进行入站访问,则必须为应用程序禁用公共访问。
为集成指定的Azure virtual network和子网必须位于同一区域。
必须为子网分配一个 IPv4 /28 块(16 个地址)。 建议的最小大小为 64 个地址(IPv4 /26 块),可满足未来的增长和缩放需求。
子网必须为空,这意味着没有网络接口卡(NIC)、虚拟机、专用终结点等。
必须将子网委派给 Microsoft.Web/serverFarms。 如果未在集成之前完成委派,预配过程将会配置此委派。
如果指定的虚拟网络与应用所在的订阅不同,请确认虚拟网络的订阅已在Microsoft.Web资源提供程序中注册。
在订阅中创建第一个 Web 应用时,会注册资源提供程序。 若要显式注册提供程序,请参阅Azure资源提供程序和类型>注册资源提供程序。
选择用于完成virtual network集成的首选配置方法。
在 Azure 门户中为应用配置虚拟网络集成:
登录到 Azure portal,然后转到App Service应用的 Overview 页面。
在左侧菜单中,选择 “设置>网络”。 此时会打开 “网络 ”页。
向下滚动至出站流量配置部分,找到虚拟网络集成选项,然后选择未配置链接。
此时会打开 Virtual Network Integration 页面。
选择 添加虚拟网络集成。
添加虚拟网络集成页面随即打开。
选择要用于集成的 App Service Plan 连接。
在集成期间,应用将重启。 集成完成后,Virtual Network 集成页面将刷新以显示有关virtual network与应用之间的连接的详细信息。
使用 Azure CLI 为应用配置虚拟网络集成。 以下命令假定应用和virtual network位于同一订阅中。
运行以下命令,配置虚拟网络集成。
将<app-name>、<app-resource-group>、<virtual-network>和<subnet>的值替换为您的资源信息。
az webapp vnet-integration add \
--resource-group "<app-resource-group>" \
--name "<app-name>" \
--vnet "<virtual-network>" \
--subnet "<subnet>"
集成完成后,可以更新应用配置以通过虚拟网络集成路由所有出站流量。
将 <app-resource-group> 和 <app-name> 值替换为您的资源信息。
az resource update \
--resource-group "<app-resource-group>" \
--name "<app-name>" \
--resource-type "Microsoft.Web/sites" \
--set properties.outboundVnetRouting.allTraffic=true
查看以下注意事项:
如果virtual network与应用位于不同的订阅中,则可以使用全局 --subscription "<subscription-ID>" 参数设置当前订阅上下文。 将当前订阅上下文设置为部署虚拟网络的订阅。
该命令检查子网是否已委托给 Microsoft.Web/serverFarms。 如果子网没有此配置,该命令将应用必要的委派。
如果子网已配置但你没有权限检查它,或者虚拟网络与应用位于不同的订阅中,则可以使用 --skip-delegation-check 参数绕过验证。
有关详细信息,请参阅 az webapp vnet-integration add 参考文档。
使用 Azure PowerShell 为应用配置虚拟网络集成。
准备过程命令的参数。
将 <subscription-GUID>、<app-name>、<app-resource-group>、<network-resource-group>和<virtual-network><subnet>值替换为资源信息。
# Set parameters for the procedure
$siteName = '<app-name>'
$vNetResourceGroupName = '<network-resource-group>'
$webAppResourceGroupName = '<app-resource-group>'
$vNetName = '<virtual-network>'
$integrationSubnetName = '<subnet>'
$vNetSubscriptionId = '<subscription-GUID>'
注释
如果virtual network与 Web 应用位于不同的订阅中,则可以使用 Set-AzContext -Subscription "<subscription-ID>" 命令设置当前订阅上下文。 将当前订阅上下文设置为<0>虚拟网络部署所在的订阅。
检查子网是否已委托给 Microsoft.Web/serverFarms:
# Set the virtual network for the subnet to check
$vnet = Get-AzVirtualNetwork -Name $vNetName -ResourceGroupName $vNetResourceGroupName
# Get the subnet
$subnet = Get-AzVirtualNetworkSubnetConfig -Name $integrationSubnetName -VirtualNetwork $vnet
# Check the delegation
Get-AzDelegation -Subnet $subnet
如果子网未委托给 Microsoft.Web/serverFarms,请添加委托:
# Get the subnet
$subnet = Add-AzDelegation -Name "myDelegation" -ServiceName "Microsoft.Web/serverFarms" -Subnet $subnet
# Set the delegation
Set-AzVirtualNetwork -VirtualNetwork $vnet
配置虚拟网络集成,并通过该连接路由所有流量。
# Set the subnet resource ID
$subnetResourceId = "/subscriptions/$vNetSubscriptionId/resourceGroups/$vNetResourceGroupName/providers/Microsoft.Network/virtualNetworks/$vNetName/subnets/$integrationSubnetName"
# Get the web app configuration
$webApp = Get-AzResource -ResourceType "Microsoft.Web/sites" -ResourceGroupName $webAppResourceGroupName -ResourceName $siteName
# Set the subnet ID
$webApp.Properties | Add-Member -NotePropertyName "virtualNetworkSubnetId" -NotePropertyValue $subnetResourceId -Force
# Set routing to all traffic
$webApp.Properties | Add-Member -NotePropertyName "vnetRouteAllEnabled" -NotePropertyValue $true -Force
# Complete the integration
$webApp | Set-AzResource -Force
注释
如果virtual network与 Web 应用位于不同的订阅中,则可以使用 Set-AzContext -Subscription "<subscription-ID>" 命令设置当前订阅上下文。 将当前订阅上下文设置为部署 Web 应用的 订阅。
相关内容