Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
本文介绍 Azure 应用服务虚拟网络集成功能,并介绍如何为应用服务中的应用设置此功能。 使用 Azure 虚拟网络可将多个 Azure 资源置于无法通过 Internet 路由的网络中。 应用服务虚拟网络集成功能允许应用访问虚拟网络中的资源,或通过虚拟网络访问资源。
注意
有关网关要求的虚拟网络集成的信息已移动到新位置。
应用服务有以下两种形式:
- 专用的计算定价层,包括“基本”、“标准”、“高级”、“高级 v2。
- 应用服务环境,它直接部署到具有专用支持基础结构的虚拟网络中,并且使用的是独立 v2 定价层。
虚拟网络集成功能用于Azure 应用服务专用的计算定价层。 如果你的应用在应用服务环境中,则它已与虚拟网络集成,无需配置虚拟网络集成功能即可访问同一虚拟网络中的资源。 有关所有网络功能的详细信息,请参阅应用服务网络功能。
虚拟网络集成功能允许应用访问虚拟网络中的资源,但不允许通过虚拟网络对应用进行入站专用访问。 专用站点访问指的是仅可从专用网络(例如 Azure 虚拟网络)对应用进行访问。 虚拟网络集成仅用于从应用向虚拟网络发起出站调用。 有关入站私有访问的详细信息,请参阅专用终结点。
虚拟网络集成功能:
- 需要基本、标准、高级、高级 v2 或弹性高级应用服务定价层。
- 支持 TCP 和 UDP。
- 适用于应用服务应用、函数应用和逻辑应用。
虚拟网络集成不支持某些功能,例如:
- 装载驱动器。
- Windows Server Active Directory 域加入。
- NetBIOS。
虚拟网络集成支持在同一区域连接虚拟网络。 使用虚拟网络集成允许应用访问以下资源和服务:
- 虚拟网络中要与之集成的资源。
- 感兴趣的虚拟网络资源可以与您的应用程序集成的虚拟网络进行对等连接,包括全球对等连接。
- 跨 Azure ExpressRoute 连接的资源。
- 端点保护的服务。
- 启用专用终结点的服务。
使用虚拟网络集成时,可以使用以下 Azure 网络功能:
- 网络安全组 (NSG):可以使用集成子网上使用的 NSG 阻止出站流量。 入站规则不适用,因为无法使用虚拟网络集成提供对应用的入站访问。
- 路由表 (UDR) :可以在集成子网上放置路由表,以便将出站流量发送到所需的位置。
- NAT 网关:可以使用 NAT 网关获取专用出站 IP 并缓解 SNAT 端口耗尽。
了解如何启用虚拟网络集成。
虚拟网络集成的工作原理
应用服务中的应用托管在工作角色上。 虚拟网络集成通过将虚拟接口挂载到工作角色上,并使用委托子网中的地址来实现。 使用的虚拟接口不是客户可直接访问的资源。 由于发件地址在您的虚拟网络中,因此它可以像您虚拟网络中的虚拟机一样访问网络内部或通过网络访问的大多数资源。
启用虚拟网络集成后,应用通过虚拟网络进行出站调用。 应用属性门户中列出的出站地址是应用仍然在使用的地址。 但是,如果出站调用针对集成虚拟网络或对等虚拟网络中的虚拟机或专用终结点,则出站地址是来自集成子网的地址。 分配给实例的专用 IP 通过环境变量 WEBSITE_PRIVATE_IP 公开。
如果启用了“所有流量路由”,则会将所有出站流量发送到虚拟网络。 如果未启用所有流量路由,则只会将在集成子网上配置的专用流量(RFC1918)和服务终结点发送到虚拟网络。 发送到互联网的出站流量直接由应用程序进行路由。
虚拟网络集成功能支持每个工作节点使用两个虚拟接口。 每个工作者两个虚拟接口意味着每个应用服务计划有两个虚拟网络集成。 换句话说,应用服务计划可以与最多两个子网/虚拟网络进行虚拟网络集成。 同一应用服务计划中的应用只能将虚拟网络集成之一用于特定子网,这意味着应用在给定时间只能具有一个虚拟网络集成。
子网要求
虚拟网络集成取决于专用子网。 创建子网时,Azure 子网从一开始就会使用 5 个 IP。 每个应用服务计划实例使用集成子网中的一个地址。 如果将应用扩展到四个实例,则使用四个地址。
在实例大小扩/缩时,在缩放操作进行期间,应用服务计划所使用的 IP 地址数量会暂时增加一倍。 在取消预配现有实例之前,新实例需要完全正常运行。 对于指定的子网大小,此缩放操作会影响其实际可用的受支持实例。 平台升级需要使用免费 IP 地址,以确保可以在不中断出站流量的情况下进行升级。 最后,在纵向扩展、缩减或完成操作后,可能需要一小段时间才能释放 IP 地址。 在极少数情况下,此操作可能需要长达 12 小时。如果您快速进行横向扩展/缩减或纵向扩展/缩减,您所需的 IP 地址可能会超过最大可用量。
由于分配后不能更改子网大小,因此请使用足够大的子网来容纳应用可能会达到的任何规模。 还应保留 IP 地址以进行平台升级。 为了避免子网容量出现任何问题,我们建议分配计划最大规模两倍以上的 IP 地址。 具有 64 个地址的/26涵盖单个多租户应用服务计划的最大规模。 在 Azure 门户中创建子网以与虚拟网络集成时,需要的最小大小是/27。 如果在通过门户集成之前就已存在子网,可以使用 /28 子网。
使用多计划子网连接 (MPSJ),可以将多个应用服务计划加入到同一子网。 所有应用服务计划必须位于同一订阅中,但虚拟网络/子网可以位于不同的订阅中。 要使用 MPSJ,/26 子网必须满足至少的最小规模要求。每个应用服务计划中的每个实例都需要来自子网的 IP 地址。 如果计划加入多个方案和/或大型方案,应当规划更广泛的子网范围。
Windows 工作进程 IP 地址重叠
对于 Windows 应用,如果目标 IP 地址与托管该应用的 App Service 工作器的基础设施 IP 地址匹配,则通过虚拟网络集成的出站连接将失败。 Windows将目的地视为本地地址,而不是通过虚拟网络路由连接。 目标可以是私有端点、虚拟机网络接口,或虚拟网络中的其他资源。
在规划虚拟网络地址空间时,选择不与 App Service 工作者基础设施范围重叠的子网范围。 考虑包含应用需要访问的资源的子网,而不仅仅是专用集成子网。 工作基础设施的 IP 地址与由 WEBSITE_PRIVATE_IP 暴露的集成子网地址不同。
下表列出了截至2026年10月的 Windows 辅助角色基础设施范围。 选择目标子网范围,这些范围与你使用的或计划使用的SKU的列表中任何范围不重叠。 如果列出了多种布局,避免这两种布局。 同时避免列出的额外托管工作线程范围。
| App Service计划 SKU | 基础设施范围位于 10.0.0.0/8 |
基础设施范围在 172.16.0.0/12 |
其他托管工作线程范围 |
|---|---|---|---|
| B1,S1,P1 |
10.10.0.0/19、10.11.0.0/19 |
172.18.0.0/19、172.19.0.0/19 |
未列出 |
| B2,S2,P2 |
10.10.32.0/19、10.11.32.0/19 |
172.18.32.0/19、172.19.32.0/19 |
未列出 |
| B3、S3、P3 |
10.10.64.0/19、10.11.64.0/19 |
172.18.64.0/19、172.19.64.0/19 |
未列出 |
| P1v2 |
10.20.0.0/19、10.21.0.0/19 |
172.20.0.0/19、172.21.0.0/19 |
未列出 |
| P2v2 |
10.20.32.0/19、10.21.32.0/19 |
172.20.32.0/19、172.21.32.0/19 |
未列出 |
| P3v2 |
10.20.64.0/19、10.21.64.0/19 |
172.20.64.0/19、172.21.64.0/19 |
未列出 |
| P0v3 | 布局A: 10.70.96.0/19, 10.71.96.0/19布局B: 10.70.0.0/19, 10.71.0.0/19 |
172.22.96.0/19、172.23.96.0/19 |
未列出 |
| P1v3 | 布局A: 10.70.0.0/19, 10.71.0.0/19布局B: 10.70.32.0/19, 10.71.32.0/19 |
172.22.0.0/19、172.23.0.0/19 |
未列出 |
| P2v3 | 布局A: 10.70.32.0/19, 10.71.32.0/19布局B: 10.70.64.0/19, 10.71.64.0/19 |
172.22.32.0/19、172.23.32.0/19 |
未列出 |
| P3v3 | 布局A: 10.70.64.0/19, 10.71.64.0/19布局B: 10.70.96.0/19, 10.71.96.0/19 |
172.22.64.0/19、172.23.64.0/19 |
未列出 |
Important
这些区间描述当前基础设施分配,且可能发生变化。 “未列出”表示本表中未提供范围信息,并不保证没有使用范围。 对于未列出的 SKU 或配置,或如需确认当前分配情况,请联系 Azure 支持部门。 不要仅仅依靠规避当前工作器 IP 地址,因为应用在扩展或平台维护期间可能会切换到不同的工作器。
Windows 容器的特定限制
Windows 容器将针对每个应用和每个应用服务计划实例使用一个额外的 IP 地址,并且你需要相应地调整子网大小。 例如,如果有 10 个 Windows 容器应用服务计划实例,每个实例具有 4 个正在运行的应用,则需要 50 个 IP 地址和额外地址来支持横向缩放(缩减/扩展)。
示例计算:
对于每个应用服务计划实例,你需要:4 个 Windows 容器应用 = 4 个 IP 地址,每个应用服务计划实例 1 个 IP 地址,4 + 1 = 5 个 IP 地址
对于 10 个实例:每个应用服务计划为 5 x 10 = 50 个 IP 地址
由于你有 1 个应用服务计划,1 x 50 = 50 个 IP 地址
此外,您还受到所使用的工作层中可用核心数的限制。 每个核心增加三个网络单元。 工作者本身使用一个单元,每个虚拟网络连接使用一个单元。 其余单元可用于应用。
示例计算:
应用服务计划实例具有 4 个正在运行的应用,并使用虚拟网络集成。 这些应用连接到两个不同的子网(虚拟网络连接)。 此配置需要 7 个网络单元(1 个辅助角色 + 2 个连接 + 4 个应用)。 运行此配置的最小大小将是 I2v2(4 个核心 x 3 个单元 = 12 个单元)。
使用 I1v2,最多可以运行使用同一个 (1) 连接的 4 个应用或使用 2 个连接的 3 个应用。
权限
必须至少具有子网的以下基于角色的访问控制权限或更高级别权限,才能通过 Azure 门户、CLI 或在直接设置 virtualNetworkSubnetId 站点属性时配置虚拟网络集成:
| 操作 | 说明 |
|---|---|
| Microsoft.Network/virtualNetworks/read | 读取虚拟网络定义 |
| Microsoft.Network/virtualNetworks/subnets/read | 读取虚拟网络子网定义 |
| Microsoft.Network/virtualNetworks/subnets/join/action | 加入虚拟网络 |
如果虚拟网络与应用位于不同的订阅中,则必须确保为 Microsoft.Web 资源提供程序注册了使用虚拟网络的订阅。 可以按照此文档显式注册该提供程序,但在订阅中创建第一个 Web 应用时它也会自动注册。
路径
可以通过虚拟网络集成来控制通过的流量。 配置虚拟网络集成时,需要考虑三种类型的路由。 应用程序路由定义了从您的应用程序流出的流量以及进入虚拟网络的流量。 配置路由会影响在应用启动之前或期间发生的操作。 例如,容器映像拉取和应用的 密钥保管库 引用设置。 网络路由是处理如何将应用和配置流量从虚拟网络路由到外部的能力。
通过应用程序路由或配置路由选项,可以配置通过虚拟网络集成发送的流量。 如果流量是通过虚拟网络集成发送的,则它仅受网络路由的限制。
应用路由
应用程序路由适用于应用启动后从应用发送的流量。 请参阅启动过程中流量的配置路由。 配置应用程序路由时,可将所有流量或仅将专用流量(也称为 RFC1918 流量)路由到虚拟网络。 可以通过出站 Internet 流量设置来配置此行为。 如果禁用出站 Internet 流量路由,则你的应用只会将专用流量路由到虚拟网络。 如果要将所有出站应用流量路由到虚拟网络,请确保启用出站互联网流量。
- 只有应用程序或配置路由中配置的流量受应用于集成子网的 NSG 和 UDR 的限制。
- 启用出站 Internet 流量路由后,应用的出站流量的源地址仍然是应用属性中列出的 IP 地址之一。 如果通过防火墙或 NAT 网关路由流量,则源 IP 地址源自此服务。
了解如何配置应用程序路由。
注意
当通过虚拟网络集成路由 SMTP 流量时,应用服务支持出站 SMTP 连接(端口 25)。 支持能力取决于虚拟网络部署所在订阅中的设置。 对于之前创建的虚拟网络/子网, 2022年8月,您需要对虚拟网络/子网启动临时配置更改,以便从订阅同步该设置。 例如,可以添加临时子网、暂时关联/取消关联 NSG 或临时配置服务终结点。 有关详细信息,请参阅排查 Azure 中的出站 SMTP 连接问题。
配置路由
使用虚拟网络集成时,可以配置如何管理部分配置流量。 默认情况下,配置流量直接走公共路由,但对于提到的单个组件,可以主动将其配置为通过虚拟网络集成进行路由。
内容共享
默认情况下,在高级计划中缩放函数应用时,Azure Functions 使用内容共享作为部署源。 必须配置额外的设置,以确保流量通过虚拟网络集成路由到此内容共享。 有关详细信息,请参阅如何配置内容共享路由。
除了配置路由之外,还必须确保在子网流量上配置的任何防火墙或网络安全组都允许流量流向端口 443 和 445。
容器映像拉取
使用自定义容器时,可以通过虚拟网络集成拉取容器。 若要通过虚拟网络集成功能来路由容器拉取流量,你必须确保路由设置已正确配置。 了解如何配置映像拉取路由。
备份/还原
应用服务具有内置的备份/还原功能,但如果你想备份到自己的存储帐户,则可使用自定义备份/还原功能。 如果要通过虚拟网络集成将流量路由到存储帐户,则必须配置路由设置。 不支持通过虚拟网络集成进行数据库备份。
托管标识
默认情况下,托管标识令牌获取流量通过公共路由。 可以通过虚拟网络集成路由此流量,以便通过虚拟网络发送对 Microsoft Entra ID 的令牌请求。 了解如何配置托管标识路由。
使用 密钥保管库 引用的应用设置
使用密钥保管库引用的应用设置会尝试通过公共路由获取机密。 如果密钥保管库阻止公共流量,且应用正在使用虚拟网络集成,则会尝试通过虚拟网络集成获取机密。
注意
- 当前不支持从专用保管库配置 SSL/TLS 证书。
路由应用设置
应用服务具有用于配置应用程序和配置路由的现有应用设置。 如果两者都存在,站点属性将替代应用设置。 站点属性的优势是可以使用 Azure Policy 进行审核并在配置时进行验证。 建议使用站点属性。
你仍然可以使用现有的 WEBSITE_VNET_ROUTE_ALL 应用设置来配置应用程序路由。
应用设置也适用于某些配置路由选项。 这些应用设置名为 WEBSITE_CONTENTOVERVNET 和 WEBSITE_PULL_IMAGE_OVER_VNET。
网络路由
可以使用路由表从应用中不受限制地路由出站流量。 常见目标可以包括防火墙设备或网关。 还可以使用网络安全组 (NSG) 来阻止流往虚拟网络或 Internet 中资源的出站流量。 无论应用到集成子网的路由表如何,只要应用到集成子网上的 NSG 都会生效。
路由表和网络安全组仅适用于通过虚拟网络集成路由的流量。 有关详细信息,请参阅应用程序路由和配置路由。 路由不适用于来自入站应用请求的回复,且 NSG 中的入站规则不适用于应用。 虚拟网络集成只会影响应用的出站流量。 若要控制应用的入站流量,请使用访问限制功能或专用终结点。
配置应用于出站流量的网络安全组或路由表时,必须确保考虑应用程序依赖项。 应用程序依赖项包括应用在运行时所需的终结点。 除了应用程序正在调用的 API 和服务之外,这些终结点还可以是衍生终结点,例如证书吊销列表(CRL)检查终结点和标识/身份验证终结点(例如 Microsoft Entra ID)。 如果使用的是应用服务中的持续部署,则可能还需要根据类型和语言允许终结点。
Linux 持续部署
特别是对于 Linux 持续部署,需要允许 oryx-cdn.microsoft.io:443。 对于 Python,还需要允许 files.pythonhosted.org、pypi.org。
健康检查
Azure 使用 UDP 端口 30,000 执行网络运行状况检查。 如果阻止此流量,它不会直接影响你的应用,但 Azure 支持更难检测和排查与网络相关的问题。
专用端口
应用服务私有端口功能在集成网络中使用 TCP 和 UDP 的 20,000 至 30,000 端口,在实例之间进行流量路由。 上述端口范围需要开放入站和出站。
本地流量
如果要在本地路由出站流量,可以使用路由表将出站流量发送到 Azure ExpressRoute 网关。 如果要将流量路由到网关,请将外部网络中的路由设置为发送回任何回复。 边界网关协议 (BGP) 路由也会影响你的应用流量。 如果具有来自 ExpressRoute 网关等位置的 BGP 路由,应用出站流量会受到影响。 与用户定义的路由相似,BGP 路由对流量的影响取决于路由范围设置。
服务终结点
通过虚拟网络集成能够访问通过服务终结点保护的 Azure 服务。 若要访问服务终结点保护的服务,请执行以下步骤:
- 配置 Web 应用的虚拟网络集成,以连接到用于集成的特定子网。
- 转到目标服务并针对集成子网配置服务终结点。
专用端点
如果要调用专用终结点,请确保 DNS 查找解析到专用终结点。 可以使用以下方式之一强制执行此行为:
- 与 Azure DNS 专用区域集成。 如果虚拟网络没有自定义 DNS 服务器,则会在区域链接到虚拟网络时自动执行集成。
- 管理 DNS 服务器中由你的应用使用的专用终结点。 若要管理配置,必须知道专用终结点 IP 地址。 然后,使用 A 记录将尝试访问的终结点指向该地址。
- 将你自己的 DNS 服务器配置为转发到 Azure DNS 专用区域。
Azure DNS 专用区域
应用与虚拟网络集成后,它将使用配置虚拟网络时所用的同一 DNS 服务器。 如果未指定任何自定义 DNS,它将使用 Azure 默认 DNS 以及链接到虚拟网络的任何专用区域。
限制
使用虚拟网络集成存在一些限制:
- 该功能需要一个未使用的子网,该子网是 Azure 资源管理器虚拟网络中的 IPv4
/28块或更大的块。 MPSJ 需要/26或更大的块。 - 应用和虚拟网络必须位于同一区域。
- Windows 应用无法连接到与 App Service 辅助角色基础设施 IP 地址匹配的目标 IP 地址。 为目标资源选择互不重叠的子网范围。 更多信息请参见 Windows 工作节点 IP 地址重叠。
- 集成子网无法启用服务终结点策略。
- 不能删除具有集成应用的虚拟网络。 删除虚拟网络之前,请删除该集成。
- 每个应用服务计划不能有两个以上的虚拟网络集成。 同一个应用服务计划中的多个应用可以使用同一个虚拟网络集成。
- 在存在使用虚拟网络集成的应用的情况下,无法更改应用或计划的订阅。
- 目前不支持将应用服务日志存储到专用存储帐户。 建议对存储帐户使用诊断日志记录并允许使用受信任的服务。
- 当虚拟网络“全部路由”处于启用状态且应用不使用服务终结点、专用终结点或用户定义的路由 (UDR) 时,VNet 集成应用与全局 Azure 存储帐户的连接可能会失败。 流量应通过默认路由(Internet)进行路由。 当存储帐户位于不同于虚拟网络的区域时,这种情况很常见。
- 若要还原或确保连接,请为存储帐户启用服务终结点、配置专用终结点或将存储帐户移动到虚拟网络所在的同一区域。
访问本地资源
虚拟网络集成功能无需额外的配置即可通过虚拟网络连接到本地资源。 只需使用 ExpressRoute 或站点到站点 VPN 将虚拟网络连接到本地资源。
对等互连
如果将对等连接用于虚拟网络集成,则无需进行额外配置。
管理虚拟网络集成
与虚拟网络连接和断开连接都在应用级别进行。 可能影响多个应用的虚拟网络集成的操作在应用服务计划级别执行。 从应用 >“网络”“VNet 集成”门户,可以获取有关虚拟网络的详细信息。 在应用服务计划的>和VNet 集成门户中,您可以看到类似的信息。
在虚拟网络集成实例的应用视图中,可以断开应用与虚拟网络的连接并配置应用程序路由。 若要断开应用与虚拟网络的连接,请选择“断开连接”。 断开与虚拟网络的连接后,应用会重启。 断开连接操作不会更改虚拟网络。 子网未被移除。 如果那时想删除虚拟网络,请先断开应用与虚拟网络的连接。
分配给实例的专用 IP 通过环境变量 WEBSITE_PRIVATE_IP 公开。 Kudu 控制台 UI 还显示了可用于 Web 应用的环境变量列表。 此 IP 是从集成子网的地址范围中分配的。 Web 应用会使用此 IP 通过 Azure 虚拟网络连接到资源。
注意
WEBSITE_PRIVATE_IP 的值必然会变化。 但是,它是集成子网地址范围内的 IP,因此需要允许从整个地址范围进行访问。
定价详细信息
除了应用服务计划定价层收费以外,虚拟网络集成功能没有额外的使用费。
故障排除
虽然此功能易于设置,但这并不意味着体验中不会遇到任何问题。 如果在访问所需终结点时遇到问题,可以根据观察到的情况采取不同的步骤。 有关详细信息,请参阅虚拟网络集成故障排除指南。
注意
- 应用服务中的 Docker Compose 方案不支持虚拟网络集成。
- 访问限制不适用于通过专用终结点传入的流量。
清理孤立的服务关联链接 (SAL)
当应用服务与虚拟网络集成时,会创建一个服务关联链接 (SAL)。 如果在未正确断开虚拟网络的情况下删除应用服务,则 SAL 可能会保持孤立状态,从而阻止子网删除或更新。
方法 1:清除孤立的服务关联链接 (SAL)
首先,尝试使用以下 Azure CLI 命令删除孤立的 SAL。 替换占位符 SUBSCRIPTION-ID、LOCATION 和 SUBNET-RESOURCE-ID。 URI 中的位置必须与虚拟网络/子网的位置匹配。 必须至少具有与子网上的网络参与者角色关联的权限才能执行此命令。
az rest --method POST \
--uri "/subscriptions/<SUBSCRIPTION-ID>/providers/Microsoft.Web/locations/<LOCATION>/purgeUnusedVirtualNetworkIntegration?api-version=2024-04-01" \
--body "{'subnetResourceId': '<SUBNET-RESOURCE-ID>'}"
成功执行此命令后,将出现以下响应:
{
"message": "Purged unused virtual network integration.",
"swiftVirtualNetwork": null
}
方法 2:重新创建并断开集成(如果方法 1 失败)
如果清除命令无法解决问题,并且仍然无法对虚拟网络或子网执行更新/删除操作,则子网委派“Microsoft.Web/serverFarms”可能仍会分配给你的子网。 在这种情况下,需要重新创建虚拟网络集成,然后断开其连接:
- 重新创建应用服务计划和应用(必须使用与之前完全相同的 Web 应用名称)。
- 进入 Azure 门户的“应用程序”中的“网络”部分,并配置虚拟网络集成。
- 配置虚拟网络集成后,选择“断开连接”按钮。
- 删除应用服务计划或应用。
- 更新/删除子网或虚拟网络。
如果按照这些步骤操作后仍遇到虚拟网络集成问题,请联系 Microsoft 支持部门。