你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Functions 网络选项

本文介绍适用于 Azure Functions 的托管选项的网络功能。 以下网络选项可归类为入站和出站网络功能。 入站功能允许限制对应用的访问,而出站功能允许将应用连接到受虚拟网络保护的资源,并控制出站流量的路由方式。

托管模型提供不同级别的网络隔离。 选择正确模型有助于满足网络隔离要求。

功能 Flex 消耗计划 消耗计划 高级计划 专用计划/ASE 容器应用1
入站 IP 限制
入站专用终结点
虚拟网络集成 2 3
出站 IP 限制
  1. 有关详细信息,请参阅 Azure 容器应用环境中的网络
  2. 使用虚拟网络触发器时,有一些特殊注意事项需要注意。
  3. 只有专用/ASE 计划支持网关所需的虚拟网络集成。

快速入门资源

使用以下资源快速开始使用 Azure Functions 网络方案。 本文参考了这些资源。

入站网络功能

以下功能可用于筛选对函数应用的入站请求。

入站访问限制

可以使用访问限制来定义被允许或拒绝访问应用的 IP 地址的优先级排序列表。 此列表可以包含 IPv4 和 IPv6 地址,或使用服务终结点的特定虚拟网络子网。 如果存在一个或多个条目,则列表末尾会存在一个隐式的“拒绝所有”。 IP 限制适用于所有函数托管选项。

灵活消耗计划弹性高级消耗应用服务中提供了访问限制。

注意

如果进行了网络限制,则只能从虚拟网络内部进行部署,或者在已将用于访问 Azure 门户的计算机的 IP 地址加入安全收件人列表之后进行部署。 不过,你仍然可以使用门户管理该函数。

若要了解详细信息,请参阅 Azure 应用服务静态访问限制

专用终结点

Azure 专用终结点是一种网络接口,你可通过该接口私密安全地连接到由 Azure 专用链接提供支持的服务。 专用终结点使用虚拟网络中的专用 IP 地址,从而将该服务有效地引入虚拟网络。

你可以为托管在弹性消耗计划弹性高级计划专用(应用服务)计划中的函数使用专用终结点。

如果要调用专用终结点,则必须确保 DNS 查找解析到专用终结点。 可以使用以下方式之一强制执行此行为:

  • 与 Azure DNS 专用区域集成。 如果虚拟网络没有自定义 DNS 服务器,则会自动执行此操作。
  • 管理 DNS 服务器中由你的应用使用的专用终结点。 若要管理专用终结点,必须知道终结点地址,并使用 A 记录来引用尝试访问的终结点。
  • 将你自己的 DNS 服务器配置为转发到 Azure DNS 专用区域

若要了解详细信息,请参阅为 Web 应用使用专用终结点

若要调用具有专用终结点连接的其他服务(如存储或服务总线),请确保将应用配置为对专用终结点进行出站调用。 有关对函数应用结合使用专用终结点和存储帐户的更多详细信息,请访问将存储帐户限制到虚拟网络

服务终结点

使用服务终结点可将许多 Azure 服务限制到选定的虚拟网络子网,以提供更高级别的安全性。 函数应用可以通过区域虚拟网络集成访问通过服务终结点保护的 Azure 服务。 支持虚拟网络集成的所有计划都支持此配置。 按照以下步骤访问受保护的服务终结点:

  1. 配置函数应用的区域虚拟网络集成,以连接到特定的子网。
  2. 转到目标服务并针对集成子网配置服务终结点。

若要了解详细信息,请参阅虚拟网络服务终结点

使用服务终结点

若要限制对特定子网的访问,请使用“虚拟网络”类型创建限制规则。 然后,可以选择要允许或拒绝访问的订阅、虚拟网络和子网。

如果尚未使用 Microsoft.Web 为所选子网启用服务终结点,则除非选中“忽略缺少的 Microsoft.Web 服务终结点”复选框,否则将自动启用这些服务终结点。 在应用上而不是子网上启用服务终结点的方案主要取决于你是否有权在子网上启用它们。

如果需要其他人在子网上启用服务终结点,请选择“忽略缺少的 Microsoft.Web 服务终结点”复选框。 你的应用已配置使用服务终结点,你稍后可在子网上启用这些服务终结点。

“添加 IP 限制”窗格的屏幕截图,其中选择了虚拟网络类型。

不能使用服务终结点来限制对在应用服务环境中运行的应用程序的访问。 当应用处于应用服务环境中时,可以应用 IP 访问规则来控制对它的访问。

若要了解如何设置服务终结点,请参阅建立 Azure Functions 专用站点访问

出站网络功能

你可以使用本部分中的功能来管理应用建立的出站连接。

虚拟网络集成

本部分详细介绍了 Functions 支持的用于控制应用出站数据的功能。

虚拟网络集成使函数应用能够访问虚拟网络中的资源。 集成后,应用通过虚拟网络路由出站流量。 这使得应用使用相关规则访问专用终结点或资源,该规则仅允许来自特定子网的流量。 当目标是虚拟网络外部的 IP 地址时,除非你已配置 NAT 网关,否则系统仍将从应用属性中列出的某个地址发送源 IP 。

Azure Functions 支持两种类型的虚拟网络集成:

若要了解如何设置虚拟网络集成,请参阅启用虚拟网络集成

区域虚拟网络集成

使用区域虚拟网络集成允许应用访问以下资源和服务:

  • 应用所在的同一虚拟网络中的资源。
  • 虚拟网络中的资源对等互连到与你的应用集成的虚拟网络。
  • 服务终结点保护的服务。
  • 跨 Azure ExpressRoute 连接的资源。
  • 跨对等连接的资源,包括 Azure ExpressRoute 连接。
  • 专用终结点

使用区域虚拟网络集成时,可以使用以下 Azure 网络功能:

  • 网络安全组 (NSG) :可以使用集成子网上的 NSG 阻止出站流量。 入站规则不适用,因为无法使用虚拟网络集成提供对应用的入站访问。
  • 路由表 (UDR) :可以在集成子网上放置路由表,以便将出站流量发送到所需的位置。

注意

如果将所有出站流量路由到虚拟网络,它会受应用于集成子网的 NSG 和 UDR 的约束。 集成虚拟网络后,由函数应用发往公共 IP 地址的出站流量仍会从应用属性中列出的地址发送,除非提供可将流量定向到其他位置的路由。

区域虚拟网络集成无法使用端口 25。

有关弹性消耗计划的注意事项:

  • 按照此处的说明确保为订阅启用 Microsoft.App Azure 资源提供程序。 子网委派需要该计划。
  • 在弹性消耗计划中运行时,所需的子网委派为 Microsoft.App/environments。 该计划不同于弹性高级计划和专用(应用服务)计划,后两者具有不同的委派要求。
  • 你可以规划最多为一个函数应用使用 40 个 IP 地址,即使应用扩展超过 40。 例如,如果同一子网中集成了 15 个弹性消耗计划函数应用,则必须计划最多使用 15x40 = 600 个 IP 地址。 此限制可能会更改,并且不强制实施。
  • 子网不能用于其他目的(例如专用或服务终结点,或委派给任何其他托管计划或服务)。 虽然你可以与多个弹性消耗计划应用共享同一子网,但网络资源将跨这些函数应用共享,这可能会导致某个函数应用影响同一子网上的其他应用的性能。

有关弹性高级计划专用(应用服务)计划容器应用计划的注意事项:

  • 弹性高级和应用服务高级 V2 和应用服务高级 V3 提供此功能。 此功能在标准层中也可用,但只能从较新的应用服务部署中使用。 如果使用较旧的部署,则只能通过高级 V2 应用服务计划使用此功能。 如果想确保能够在标准应用服务计划中使用该功能,请在高级版 V3 应用服务计划中创建应用。 这些计划仅在最新的部署上受支持。 如果需要,之后可以纵向缩减。
  • 应用服务环境中的独立计划应用无法使用此功能。
  • 应用和虚拟网络必须位于同一区域。
  • 该功能需要一个未使用的子网,该子网在 Azure 资源管理器虚拟网络中为 /28 或更大。
  • 集成子网只能由一个应用服务计划使用。
  • 每个应用服务计划可以有最多两个区域虚拟网络集成。 同一个应用服务计划中的多个应用都可以使用同一集成子网。
  • 不能删除具有集成应用的虚拟网络。 删除虚拟网络之前,请删除该集成。
  • 存在使用区域虚拟网络集成的应用时,不能更改应用或计划的订阅。

启用虚拟网络集成

  1. Azure 门户中的功能应用中,选择“网络”,然后在“VNet 集成”下选择“单击此处进行配置”。

  2. 选择“添加 VNet”。

    屏幕截图:可在应用中启用虚拟网络集成的 VNet 集成页面。

  3. 下拉列表包含订阅内位于相同区域中的所有 Azure 资源管理器虚拟网络。 选择要集成的虚拟网络。

    选择 VNet

    • 弹性消耗和弹性高级托管计划仅支持区域虚拟网络集成。 如果虚拟网络位于同一区域,请创建一个新子网,或者选择一个已存在的空子网。

    • 若要选择另一区域中的虚拟网络,必须已预配一个启用了点到站点连接的虚拟网络网关。 跨区域的虚拟网络集成仅支持专用计划,但全球对等互连可与区域虚拟网络集成配合使用。

在集成期间,应用会重启。 完成集成后,系统将显示你所集成的虚拟网络的详细信息。 默认情况下,“全部路由”处于启用状态,所有流量都将路由到虚拟网络中。

如果你只想路由专用流量(RFC1918 流量),请按照该应用服务文章中的步骤完成操作。

子网

虚拟网络集成取决于专用子网。 预配子网时,Azure 子网从一开始就丢失 5 个 IP。 对于弹性高级和应用服务计划,每个计划实例的集成子网使用一个地址。 如果将应用缩放到 4 个实例,则使用 4 个地址。 对于弹性消耗计划,这不适用,实例会共享 IP 地址。

在弹性高级和专用(应用服务)计划中,当实例大小纵向扩展或缩减时,所需地址空间在短时间内翻倍。 对于指定的子网大小,这会影响其实际可用的受支持实例。 下表显示了每个 CIDR 块的最大可用地址数,以及这对横向缩放的影响:

CIDR 块大小 最大可用地址数 最大横向缩放(实例)数*
/28 11 5
/27 27 13
/26 59 29

*假设需要在某一时刻增加或缩减大小或 SKU。

由于子网大小不能在分配后更改,请使用足够大的子网来容纳应用可能会达到的任何规模。 为避免 Functions 弹性高级计划的子网容量出现任何问题,应该为 Windows 使用带有 256 个地址的 /24,为 Linux 使用带有 64 个地址的 /26。 与虚拟网络集成期间在 Azure 门户中创建子网时,Windows 和 Linux 分别需要的最小大小是 /24 和 /26。

弹性消耗计划允许在弹性消耗计划中运行的多个应用与同一子网集成。 但弹性高级计划和专用(应用服务)托管计划的情况并非如此。 这些计划仅允许通过两个虚拟网络与每个应用服务计划连接。 来自单个应用服务计划的多个应用可以加入同一子网,但来自不同计划的应用无法使用同一子网。

Windows 和 Linux 应用都完全支持此功能,包括自定义容器。 所有行为在 Windows 应用和 Linux 应用之间都是相同的。

网络安全组

你可以使用网络安全组来控制虚拟网络中资源之间的流量。 例如,你可以创建一个安全规则,阻止应用的出站流量访问虚拟网络中的资源或离开网络。 这些安全规则适用于已配置虚拟网络集成的应用。 若要阻止前往公共地址的流量,必须启用虚拟网络集成和“全部路由”。 NSG 中的入站规则不适用于你的应用,因为虚拟网络集成只影响来自你的应用的出站流量。

若要控制应用的入站流量,请使用访问限制功能。 无论应用到集成子网的路由如何,应用到集成子网的 NSG 都有效。 如果函数应用在启用“全部路由”的情况下与虚拟网络集成,并且集成子网上没有任何影响公共地址流量的路由,则所有出站流量仍受分配给集成子网的 NSG 的约束。 如果未启用“全部路由”,则 NSG 仅应用于 RFC1918 流量。

路由

可以使用路由表将出站流量从应用路由到你所需的任何位置。 默认情况下,路由表只影响 RFC1918 目标流量。 启用“全部路由”后,所有出站调用都会受到影响。 禁用“全部路由”后,只有私人流量 (RFC1918) 受路由表的影响。 在集成子网上设置的路由不会影响对入站应用请求的答复。 常见目标可以包括防火墙设备或网关。

如果要路由本地的所有出站流量,可以使用路由表将所有出站流量发送到 ExpressRoute 网关。 如果确实要将流量路由到网关,请确保在外部网络中设置路由以发回任何回复。

边界网关协议 (BGP) 路由也会影响你的应用流量。 如果具有来自 ExpressRoute 网关等位置的 BGP 路由,应用出站流量会受到影响。 默认情况下,BGP 路由只影响 RFC1918 目标流量。 如果函数应用在启用“全部路由”的情况下与虚拟网络集成,所有出站流量都可能会受 BGP 路由的影响。

出站 IP 限制

灵活消耗计划、弹性高级计划、应用服务计划或应用服务环境中提供了出站 IP 限制。 可以为部署应用服务环境的虚拟网络配置出站限制。

将弹性高级计划或应用服务计划中的函数应用与虚拟网络集成时,默认情况下,应用仍可对 Internet 进行出站呼叫。 通过在启用“全部路由”的情况下将函数应用与虚拟网络集成,可以强制将所有出站流量发送到你的虚拟网络,在其中可以使用网络安全组规则来限制流量。 对于弹性消耗计划,所有流量都已通过虚拟网络路由,不需要“全部路由”。

若要了解如何使用虚拟网络控制出站 IP,请参阅教程:使用 Azure 虚拟网络 NAT 网关控制 Azure Functions 出站 IP

Azure DNS 专用区域

将应用与虚拟网络集成后,该应用将使用配置了虚拟网络的同一 DNS 服务器,并使用链接到虚拟网络的 Azure DNS 专用区域。

自动化

以下 API 可让你以编程方式管理区域虚拟网络集成:

混合连接

混合连接是可用于访问其他网络中的应用程序资源的一项 Azure 中继功能。 使用混合连接可以从应用访问应用程序终结点。 无法使用它访问应用程序。 在除消耗计划之外的所有计划中,混合连接可用于 Windows 上运行的函数。

在 Azure Functions 中使用时,每个混合连接与单个 TCP 主机和端口组合相关联。 这意味着,混合连接终结点可以位于任何操作系统和任何应用程序上,前提是你能够访问 TCP 侦听端口。 混合连接功能不知道也不关心应用程序协议或者要访问的内容是什么。 它只提供网络访问。

有关详细信息,请参阅应用服务文档中的“混合连接”。 Azure Functions 支持这些相同配置步骤。

重要

仅当函数应用在 Windows 上运行时,才支持混合连接。 不支持 Linux 应用。

通过虚拟网络连接到 Azure 服务

通过虚拟网络集成,函数应用可以访问虚拟网络中的资源。 本部分概述了尝试将应用连接到某些服务时应考虑的事项。

将存储帐户限制到虚拟网络中

注意

若要在存储帐户中快速部署启用了专用终结点的函数应用,请参考以下模板:具有 Azure 存储专用终结点的函数应用

创建函数应用时,必须创建或链接到支持 Blob、队列和表存储的常规用途的 Azure 存储帐户。 可以将此存储帐户替换为服务终结点或专用终结点所保护的存储帐户。

你可以通过函数应用在弹性消耗计划、弹性高级计划和专用(应用服务)计划上使用网络受限存储帐户;但消耗计划不支持该操作。 对于弹性高级计划和专用计划,必须确保已配置专用内容共享路由。 若要了解如何使用受虚拟网络保护的存储帐户配置函数应用,请参阅将存储帐户限制为虚拟网络

使用 Key Vault 引用

可以在不需进行任何代码更改的情况下,通过 Azure Key Vault 引用在 Azure Functions 应用程序中使用 Azure Key Vault 中的机密。 Azure Key Vault 是一项服务,可以提供集中式机密管理,并且可以完全控制访问策略和审核历史记录。

如果为应用配置了虚拟网络集成,则可以使用密钥保管库引用来检索网络受限保管库中的机密。

虚拟网络触发器(非 HTTP)

你的工作负载可能需要你的应用从受虚拟网络保护的事件源触发。 如果希望应用根据从非 HTTP 触发源接收到的事件数量动态扩展,存在两个选项:

专用(应用服务)计划上运行的函数应用不会根据事件动态缩放。 相反,横向扩展由你定义的自动缩放规则决定。

具有虚拟网络触发器的弹性高级计划

弹性高级计划让你可以创建由虚拟网络保护的服务触发的函数。 这些非 HTTP 触发器称为“虚拟网络触发器”

默认情况下,虚拟网络触发器不会导致函数应用扩展到超出预热实例计数。 但是,某些扩展支持会导致函数应用动态缩放的虚拟网络触发器。 可以通过以下方式之一在函数应用中为受支持的扩展启用此动态缩放监视:

  1. Azure 门户中,导航到你的函数应用。

  2. 在“设置”下选择“配置”,然后在“函数运行时设置”选项卡中,将“运行时缩放监视”设置为“打开”。

  3. 选择“保存”以更新函数应用配置并重启应用。

VNETToggle

提示

启用对虚拟网络触发器的监视可能会影响应用程序的性能,但这种影响应该很小。

Functions 运行时版本 1.x 中不支持对虚拟网络触发器的动态缩放监视。

此表中的扩展支持对虚拟网络触发器进行动态缩放监视。 若要获得最佳缩放性能,应升级到同时支持基于目标的缩放的版本。

扩展(最低版本) 仅限运行时缩放监视 使用基于目标的缩放
Microsoft.Azure.WebJobs.Extensions.CosmosDB > 3.0.5 > 4.1.0
Microsoft.Azure.WebJobs.Extensions.DurableTask > 2.0.0 不适用
Microsoft.Azure.WebJobs.Extensions.EventHubs > 4.1.0 > 5.2.0
Microsoft.Azure.WebJobs.Extensions.ServiceBus > 3.2.0 > 5.9.0
Microsoft.Azure.WebJobs.Extensions.Storage > 3.0.10 > 5.1.0*

* 仅队列存储。

重要

启用虚拟网络触发器监视时,只有这些扩展的触发器会导致应用动态缩放。 仍可以使用不在该表中的扩展的触发器,但它们不会使缩放超出其预热实例计数。 有关所有触发器和绑定扩展的完整列表,请参阅触发器和绑定

具有虚拟网络触发器的应用服务计划和应用服务环境

当函数应用在应用服务计划或应用服务环境中运行时,你可以编写由虚拟网络保护的资源触发的函数。 若要使函数可正确触发,你的应用必须使用可以访问触发器连接中定义的资源的访问权限来连接到虚拟网络。

例如,假设要将 Azure Cosmos DB 配置为仅接受来自虚拟网络的流量。 在这种情况下,必须在提供虚拟网络与该虚拟网络集成的应用服务计划中部署函数应用。 集成使函数可以由该 Azure Cosmos DB 资源触发。

测试注意事项

在使用专用终结点在函数应用中测试函数时,必须在同一虚拟网络中(例如在该网络中的虚拟机上)进行测试。 要从该 VM 的门户中使用“代码 + 测试”选项,需要将以下 CORS 源 添加到函数应用:

  • https://functions-next.azure.com
  • https://functions-staging.azure.com
  • https://functions.azure.com
  • https://portal.azure.com

如果已使用专用终结点或任何其他访问限制来限制对函数应用的访问,则还必须将服务标记 AzureCloud 添加到允许列表。 若要更新允许列表:

  1. 导航到函数应用并选择“设置”>“网络”,然后选择“入站访问配置”>“公用网络访问”

  2. 确保“公用网络访问”设置为“从所选虚拟网络和 IP 地址启用”

  3. 在“站点访问和规则”下添加规则

    1. 选择 Service Tag 作为源设置“类型”,选择 AzureCloud 作为“服务标记”

    2. 请确保操作为“允许”,并设置所需的名称和优先级

故障排除

虽然此功能很容易设置,但这并不意味着你的体验不会遇到任何问题。 如果在访问所需终结点时遇到问题,可以使用某些实用程序来测试从应用控制台发出的连接。 可以使用两种控制台。 一种是 Kudu 控制台,另一种是 Azure 门户中的控制台。 若要访问应用中的 Kudu 控制台,请转到“工具”“Kudu”。 此外,还可以通过 [sitename].scm.azurewebsites.net 访问 Kudo 控制台。 网站加载后,转到“调试控制台”选项卡。若要从应用访问 Azure 门户托管的控制台,请转到“工具”“控制台”。

工具

在本机 Windows 应用中,由于存在安全约束,ping、nslookup 和 tracert 工具无法通过控制台来使用(可在自定义 Windows 容器中使用) 。 为了填补此空白,我们添加了两个单独的工具。 我们添加了名为 nameresolver.exe 的工具,用于测试 DNS 功能。 语法为:

nameresolver.exe hostname [optional: DNS Server]

可以使用 nameresolver 来检查应用所需的主机名。 可以通过这种方式来测试 DNS 是否配置错误,或者测试你是否有权访问 DNS 服务器。 若要了解可供应用在控制台中使用的 DNS 服务器,请查看环境变量 WEBSITE_DNS_SERVER 和 WEBSITE_DNS_ALT_SERVER。

注意

nameresolver.exe 工具当前不适用于自定义 Windows 容器。

可以使用下一工具测试与主机的 TCP 连接情况,以及端口组合情况。 该工具名为 tcpping,语法为:

tcpping.exe hostname [optional: port]

tcpping 实用程序会告知是否可访问特定主机和端口。 只有满足以下条件才会显示成功:存在侦听主机和端口组合的应用程序,且可从应用对指定主机和端口进行网络访问。

调试对虚拟网络托管的资源的访问

许多因素可能会阻止应用访问特定的主机和端口。 大多数情况下为以下因素之一:

  • 存在防火墙。 如果存在防火墙,则会发生 TCP 超时。 本例中的 TCP 超时为 21 秒。 使用 tcpping 工具测试连接性。 除了防火墙外,还有多种原因可能导致 TCP 超时。
  • DNS 不可访问。 每个 DNS 服务器的 DNS 超时为 3 秒。 如果具有 2 个 DNS 服务器,则超时为 6 秒。 使用 nameresolver 查看 DNS 是否正常工作。 不能使用 nslookup,因为它不使用为虚拟网络配置的 DNS。 如果无法访问,则表明可能有防火墙或 NSG 在阻止对 DNS 的访问,或者该 DNS 可能已停机。

如果这些方法未解决问题,请首先检查以下因素:

区域虚拟网络集成

  • 目标是否为非 RFC1918 地址,并且未启用全部路由?
  • 是否有 NSG 阻止了集成子网传出数据?
  • 如果通过 Azure ExpressRoute 或 VPN 传输,本地网关是否配置为将流量路由回 Azure? 如果可以访问虚拟网络中的终结点,但不能访问本地的终结点,请检查路由。
  • 是否有足够的权限在集成子网上设置委派? 在区域虚拟网络集成配置期间,会将集成子网委托给 Microsoft.Web/serverFarms。 VNet 集成 UI 会自动将子网委托给 Microsoft.Web/serverFarms。 如果帐户没有足够的网络权限来设置委派,将需要可设置集成子网中的属性的用户来委托子网。 若要手动委托集成子网,请转到 Azure 虚拟网络子网 UI,并设置 Microsoft.Web/serverFarms 的委派。

需要网关的虚拟网络集成

  • 点到站点地址范围是否在 RFC 1918 范围内 (10.0.0.0-10.255.255.255 / 172.16.0.0-172.31.255.255 / 192.168.0.0-192.168.255.255)?
  • 网关在门户中是否显示为已启动? 如果网关处于关闭状态,则将其重新启动。
  • 证书是否显示正在同步?或者,你是否怀疑网络配置已更改? 如果证书未同步,或者你怀疑对虚拟网络配置做出了与 ASP 不同步的更改,请选择“同步网络”。
  • 如果通过 VPN 传输,本地网关是否配置为将流量路由回 Azure? 如果可以访问虚拟网络中的终结点,但不能访问本地的终结点,请检查路由。
  • 你是否正在尝试使用一个既支持点到站点连接,又支持 ExpressRoute 的共存网关? 虚拟网络集成不支持共存网关。

调试网络问题很有难度,因为你看不到哪些因素在阻止访问特定的“主机:端口”组合。 部分原因包括:

  • 在主机上开启了防火墙,导致无法从点到站点 IP 范围访问应用程序端口。 跨子网通常需要公共访问权限。
  • 目标主机已关闭。
  • 应用程序已关闭。
  • IP 或主机名错误。
  • 应用程序所侦听的端口与你预期的端口不同。 可以使用终结点主机上的“netstat -aon”匹配进程 ID 和侦听端口。
  • 网络安全组的配置方式导致无法从点到站点 IP 范围访问应用程序主机和端口。

你不知道应用实际使用的地址。 它可能是集成子网中或点到站点地址范围内的任意地址,因此你需要允许从整个地址范围进行访问。

更多调试步骤包括:

  • 连接到虚拟网络中的某个 VM,尝试在该处访问资源主机:端口。 若要针对 TCP 访问权限进行测试,请使用 PowerShell 命令 Test-NetConnection。 语法为:
Test-NetConnection hostname [optional: -Port]
  • 在某个 VM 中启动应用程序,然后使用 tcpping 测试能否在应用的控制台中访问该主机和端口。

本地资源

如果应用无法访问本地资源,请检查是否能够通过虚拟网络访问该资源。 请使用 Test-NetConnection PowerShell 命令来针对 TCP 访问权限进行测试。 如果 VM 无法访问本地资源,原因可能是未正确配置 VPN 或 ExpressRoute 连接。

如果虚拟网络托管的 VM 能够访问本地系统但应用无法访问,则可能是由于以下某个原因:

  • 在本地网关中未使用子网或点到站点地址范围配置路由。
  • 网络安全组阻止点到站点 IP 范围的访问。
  • 本地防火墙阻止来自点到站点 IP 范围的流量。
  • 正在尝试使用区域虚拟网络集成功能访问非 RFC 1918 地址。

在断开连接 VNet 集成之前删除应用服务计划或 Web 应用

如果在未先断开连接 VNet 集成的情况下删除了 Web 应用或应用服务计划,你将无法对用于与已删除资源集成的虚拟网络或子网执行任何更新/删除操作。 子网委派“Microsoft.Web/serverFarms”将保持分配给子网,并阻止更新/删除操作。

若要再次更新/删除子网或虚拟网络,需要重新创建 VNet 集成,然后断开其连接:

  1. 重新创建应用服务计划和 Web 应用(必须使用与之前完全相同的 Web 应用名称)。
  2. 导航到 Web 应用上的“网络”边栏选项卡,并配置 VNet 集成。
  3. 配置 VNet 集成后,选择“断开连接”按钮。
  4. 删除应用服务计划或 Web 应用。
  5. 更新/删除子网或虚拟网络。

如果按照上述步骤操作后仍遇到 VNet 集成问题,请联系 Microsoft 支持部门。

网络疑难解答

还可以使用网络疑难解答来解决连接问题。 若要打开网络疑难解答,请转到 Azure 门户中的应用。 选择“诊断和解决问题”,然后搜索“网络疑难解答”。

连接问题 - 它检查虚拟网络集成的状态,包括检查是否已将专用 IP 分配给计划的所有实例和 DNS 设置。 如果未配置自定义 DNS,则应用默认 Azure DNS。 疑难解答还会检查常见的函数应用依赖项,包括 Azure 存储的连接和其他绑定依赖项。

显示正在运行疑难解答来解决连接问题的屏幕截图。

配置问题 - 此疑难解答检查子网是否对虚拟网络集成有效。

显示正在运行疑难解答来解决配置问题的屏幕截图。

子网/VNet 删除问题 - 此疑难解答检查子网是否具有任何锁,以及它是否有任何未使用但可能阻止删除 VNet/子网的服务关联链接。

后续步骤

若要详细了解网络和 Azure Functions: