Compartilhar via

Azure Functions 网络选项

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

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

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

快速入门资源

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

入站网络功能

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

入站权限限制

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

访问限制适用于 Flex Consumption 计划Elastic PremiumConsumptionApp Service

注意

由于网络限制,您只能从虚拟网络内部署,或者将您用于访问 Azure 门户的计算机的 IP 地址放入 Safe Recipients 列表中。 不过,你仍然可以使用门户管理该函数。

若要了解详细信息,请参阅 Azure App Service 静态访问限制

专用终结点

Azure专用终结点是一个网络接口,可将你专用且安全地连接到由 Azure Private Link 提供支持的服务。 专用终结点使用来自您虚拟网络的专用 IP 地址,从而有效地将服务引入您的虚拟网络。

可以将专用终结点用于托管在 Flex ConsumptionElastic PremiumDedicated(App Service) 计划中的函数。

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

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

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

若要调用具有专用终结点连接的其他服务(例如storage或service bus),请确保将应用配置为对专用终结点进行外行调用。 有关使用专用终结点与函数应用的存储帐户配合的更多详细信息,请访问将您的存储帐户限制在虚拟网络中

服务终结点

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

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

若要了解详细信息,请参阅 Virtual network 服务终结点

使用服务终结点

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

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

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

选中虚拟网络类型时“添加 IP 限制”窗格的截图。

无法使用服务终结点来限制对在 App Service Environment 中运行的应用的访问权限。 当您的应用位于应用服务环境中时,可以通过应用IP访问规则来控制访问。

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

出站网络功能

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

虚拟网络集成

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

函数应用的虚拟网络集成可提供对虚拟网络中资源的访问权限。 集成后,您的应用会通过虚拟网络路由出站流量。 这样,应用程序就可以访问专用终结点或资源,这些终结点或资源的规则仅允许来自选定子网的流量。 当目标是virtual network之外的 IP 地址时,源 IP 仍将从应用属性中列出的地址之一发送,除非你配置了 NAT 网关。

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

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

区域虚拟网络集成

使用区域虚拟网络集成使应用能够访问:

  • 与应用位于同一虚拟网络的资源。
  • 与您应用程序集成的虚拟网络已对等互连的虚拟网络中的资源。
  • 受服务终结点保护的服务。
  • 跨 Azure ExpressRoute 连接的资源。
  • 跨对等连接的资源,包括Azure ExpressRoute 连接。
  • 专用终结点

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

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

注意

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

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

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

  • 这个应用和虚拟网络必须在同一区域。
  • 确保通过 按照这些说明 为订阅启用 Microsoft.App。 这对于子网配置是必需的。 在创建灵活消耗(Flex Consumption)应用时,Azure portal 和 Azure CLI 强制实施此注册,因为可以在应用创建后随时启用虚拟网络集成。
  • 在弹性消耗计划中运行时,所需的子网委派为 Microsoft.App/environments。 这不同于弹性高级版和专用(App Service)计划,这些计划有不同的委派要求。
  • 你可以规划最多为一个函数应用使用 40 个 IP 地址,即使应用扩展超过 40。 例如,如果同一子网中集成了 15 个弹性消耗计划函数应用,则必须计划最多使用 15x40 = 600 个 IP 地址。 此限制可能会更改,并且不会强制执行。
  • 子网不得被用于其他用途(例如专用终结点或服务终结点,或委派给任何其他托管计划或服务)。 虽然你可以与多个弹性消耗计划应用共享同一子网,但网络资源将跨这些函数应用共享,这可能会导致某个函数应用影响同一子网上的其他应用的性能。
  • Flex Consumption 计划目前不支持名称包含下划线 (_) 字符的子网。

Elastic PremiumDedicated App Service

  • 此功能适用于 Elastic 高级版 和 App Service Premium V2 和 Premium V3。 它也在标准版本中提供,但仅适用于最新的 App Service 部署。 如果使用的是较旧的部署,则只能使用高级 V2 App Service 计划中的功能。 若要确保可以在标准App Service计划中使用该功能,请在高级 V3 App Service计划中创建应用。 这些方案仅在我们最新的部署上得到支持。 如果需要,之后可以缩减规模。
  • 在应用服务环境中的隔离计划应用无法使用该功能。
  • 应用和虚拟网络必须位于同一区域。
  • 此功能需要在 Azure 资源管理器虚拟网络中使用大小为 /28 或更大的子网。
  • 集成子网可由多个App Service计划使用。
  • 每个 App Service 计划最多可以拥有两个区域虚拟网络集成。 同一App Service计划中的多个应用可以使用同一集成子网。
  • 选择的子网不能用于其他目的,例如专用终结点或服务终结点,或者委托给任何其他托管计划或服务。
  • 可以在App Service计划中与多个应用共享同一子网。 由于网络资源在所有应用中共享,因此一个函数应用可能会影响同一子网上其他人的性能。
  • 不能删除包含集成应用的虚拟网络。 在删除虚拟网络之前,先删除集成。
  • 在有应用使用区域虚拟网络集成的情况下,无法更改应用或计划的订阅。

启用虚拟网络集成

  1. Azure portal 的函数应用中,选择Networking,然后在VNet Integration下选择点击此处进行配置

  2. 选择“添加 VNet”。

    虚拟网络集成页的截图,其中您可以在应用程序中启用虚拟网络集成。

  3. 下拉列表包含同一区域中订阅中的所有Azure Resource Manager虚拟网络。 选择要与之集成的virtual network。

    选择 VNet

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

    • 若要在另一区域中选择虚拟网络,必须预配虚拟网络网关并启用点对站点。 仅专用计划支持跨区域虚拟网络集成,但全局对等互连适用于区域虚拟网络集成。

在集成期间,应用会重启。 集成完成后,您会看到有关您集成的虚拟网络的详细信息。 默认情况下,启用“全部路由”,并将所有流量路由到您的虚拟网络。

如果希望仅路由专用流量(RFC1918流量),请按照此 App Service 文章中的步骤进行操作。

子网

虚拟网络集成依赖于专用子网。 预配子网时,Azure保留前五个 IP 地址供内部使用。 剩余 IP 地址的使用方式取决于托管计划。 由于子网大小不能在分配后更改,请使用足够大的子网来容纳应用可能会达到的任何规模。

弹性高级计划和专用计划

在 Elastic 高级版和专用(App Service)计划中,函数应用的每个运行中的实例都使用子网中的一个 IP 地址。 纵向扩展或缩减时,所需的地址空间可能会暂时增加一倍,以适应转换。 如果多个应用共享同一子网,则 IP 地址总使用量是这些应用的所有实例的总和,以及缩放事件期间的临时翻倍。

IP 消耗方案

Scenario IP 地址消耗
1 个应用,1 个实例 1 个 IP 地址
1 个应用,5 个实例 5 个 IP 地址
1 个应用,从 5 个实例扩展到 10 个实例 最多 20 个 IP 地址,临时使用于扩展操作期间
3 个应用,每个应用 5 个实例 15 个 IP 地址

CIDR 范围建议

CIDR 块大小 最大可用地址数 最大水平缩放(实例)1
/28 11 5
/27 二十七 13
/26 59 二十九
/25 123 612
/24 251 1253

1假设您需要在某个时候扩容或缩减大小或 SKU。

2 尽管 IP 地址数支持 61 个实例,但专用计划中的各个应用 的最大实例数为 30 个。

2 尽管 IP 地址数支持 125 个实例,但弹性高级计划上的单个应用 的最大实例数为 100 个。

其他注意事项

对于弹性高级计划或专用计划上的函数应用程序:

  • 为避免 Functions 弹性高级计划的子网容量出现任何问题,应该为 Windows 使用带有 256 个地址的 /24,为 Linux 使用带有 64 个地址的 /26。 在 Azure portal 中创建子网以实现与虚拟网络集成时,对于 Windows 系统,子网的最小大小要求为 /24,而对于 Linux 系统,子网的最小大小要求为 /26。
  • 每个App Service计划最多可以支持两个可用于 VNet 集成的子网。 来自单个App Service计划的多个应用可以加入同一子网,但来自不同计划的应用无法使用同一子网。

弹性消耗计划

在 Flex Consumption 计划中,来自函数应用实例的出站网络流量通过专用于子网的共享网关进行路由。 每个共享网关使用子网中的 1 个 IP 地址。 无论有多少应用与单个子网集成,最多 27 个共享网关(27 个 IP 地址)将用于支持所有实例。 选择子网大小时,关键是与子网集成的所有应用程序的实例总数。 当子网用于过多实例或执行 I/O 密集型工作负荷的应用时,可能会出现网络容量问题,例如增加平均延迟和超时。 应用横向扩展不会受到影响。

建议使用 /27 子网大小(27 个可用 IP 地址),以支持单个函数应用,该应用最多可扩展到 1,000 个实例。

如果预期单个函数应用的实例数要超过 1,000 个,或多个函数应用的实例总数将超过 1,000 个,请使用 /26 子网,并联系产品组请求提高您的最大实例数上限。

重要

将 Flex Consumption 功能应用程序与大小小于 /27 的子网集成,或将多个应用程序与大小为 /27 的子网集成,将减少其可用的出站网络容量。 如果计划这样做,请使用生产级负载对应用进行测试,以确保网络容量不受限制的情况。

IP 消耗方案

Scenario 最大 IP 地址消耗量
1 个应用 最多 27 个 IP 地址(/27 个子网大小)
2 个应用 最多 27 个 IP 地址(/27 个子网大小)
10 个应用 最多 27 个 IP 地址(/27 个子网大小)

网络安全组

可以使用 network 安全组来控制virtual network中的资源之间的流量。 例如,可以创建一个安全规则,阻止您的应用程序的出站流量到达虚拟网络中的资源或离开虚拟网络。 这些安全规则适用于配置virtual network集成的应用。 若要阻止流向公共地址的流量,必须进行虚拟网络集成并启用全部路由。 NSG 中的入站规则不适用于应用,因为virtual network集成仅影响来自应用的出站流量。

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

路由

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

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

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

出站 IP 限制

弹性消耗计划、Elastic Premium计划、App Service计划或App Service Environment中提供出站 IP 限制。 可以为部署有 App Service Environment 的虚拟网络配置出站限制。

将函数应用集成到 Elastic Premium 计划或将 App Service 计划与虚拟网络集成时,应用仍然可以默认对互联网进行出站调用。 通过将函数应用与启用“全部路由”功能的虚拟网络集成,可以强制将所有出站流量发送到虚拟网络中,其中可以使用网络安全组规则来限制流量。 对于 Flex Consumption,所有流量已通过虚拟网络路由,因此不需要Route All

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

Azure DNS专用区域

应用与虚拟网络集成后,它将使用虚拟网络配置的同一 DNS 服务器,并将处理链接到虚拟网络的 Azure DNS 私有区域。

自动化

以下 API 允许以编程方式管理区域的虚拟网络集成:

混合连接

Hybrid Connections 是 Azure Relay 的一项功能,可用于访问其他网络中的应用程序资源。 它提供从您的应用程序到一个应用程序终结点的访问权限。 不能使用它来访问应用程序。 在除消耗计划之外的所有计划中,混合连接可用于 Windows 上运行的函数。

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

若要了解详细信息,请参阅混合连接的 App Service 文档。 这些相同的配置步骤支持Azure Functions。

重要

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

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

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

将存储帐户限制为虚拟网络

注意

若要在 storage 帐户上快速部署启用了专用终结点的函数应用,请参阅以下模板:具有Azure Storage专用终结点的函数应用

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

可以将网络受限储存帐户与弹性消耗、弹性高级版和专用(App Service)计划上的函数应用结合使用;而消耗计划不支持该功能。 对于弹性高级计划和专用计划,必须确保已配置私有内容共享路由。 若要了解如何使用受虚拟网络保护的存储帐户配置函数应用,请参阅 将存储帐户限制为虚拟网络

使用 Key Vault 引用

可以使用Azure Key Vault引用在Azure Functions应用程序中使用来自Azure Key Vault的机密,而无需更改任何代码。 Azure Key Vault是一项提供集中化机密管理的服务,能够完全控制访问策略和审计历史记录。

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

Virtual network 触发器(非 HTTP)

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

Dedicated (App Service) 上运行的函数应用不会根据事件动态扩展。 相反,横向扩展是由您定义的自动扩展规则决定的。

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

使用 Elastic Premium 计划可以创建由受virtual network保护的服务触发的函数。 这些非 HTTP 触发器称为 virtual network 触发器

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

  1. Azure portal 中,访问您的函数应用程序。

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

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

VNETToggle

提示

启用对virtual network触发器的监视可能会影响应用程序的性能,但影响可能很小。

对虚拟网络触发器的动态扩展监控的支持在 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*

*仅队列存储。

重要

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

App Service计划和App Service Environment中的虚拟网络触发器

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

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

测试注意事项

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

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

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

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

  2. 确保将 公共网络访问 设置为 允许从选定的虚拟网络和 IP 地址访问

  3. 在网站access和规则下添加规则

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

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

故障排除

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

工具

在本机 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? 如果可以在virtual network中访问终结点,但不能访问本地终结点,请检查路由。
  • 您是否拥有足够的权限在集成子网中设置委派? 在区域虚拟网络集成配置期间,您的集成子网将委托给 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 同步的virtual network配置进行了更改,请选择 Sync Network
  • 如果要跨 VPN,本地网关是否配置为将流量路由回Azure? 如果可以在virtual network中访问终结点,但不能访问本地终结点,请检查路由。
  • 你是否正在尝试使用一个既支持点到站点连接,又支持 ExpressRoute 的共存网关? 虚拟网络集成不支持共存网关。

调试网络问题很有挑战性,因为无法查看阻止对特定主机:端口组合的访问的内容。 部分原因包括:

  • 主机上有防火墙,阻止从点对站点 IP 范围访问应用程序端口。 跨子网通常需要公共网络访问。
  • 目标主机已关闭。
  • 应用程序已关闭。
  • IP 或主机名错误。
  • 应用程序所侦听的端口与你预期的端口不同。 可以在端点主机上使用“netstat -aon”来匹配进程 ID 和侦听端口。
  • 网络安全组被配置为阻止从点对站点 IP 范围访问您的应用程序主机和端口。

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

更多调试步骤包括:

  • 连接到您的虚拟网络中的 VM,然后尝试从那里连接至资源主机端口。 若要测试 TCP access,请使用 PowerShell 命令 Test-NetConnection。 语法为:
Test-NetConnection hostname [optional: -Port]
  • 在 VM 上启动应用程序,并通过应用程序控制台使用 tcpping 测试对该主机和端口的访问。

本地资源

如果应用无法访问本地资源,请检查是否可以从virtual network访问资源。 使用 Test-NetConnection PowerShell 命令检查 TCP access。 如果 VM 无法访问本地资源,原因可能是未正确配置 VPN 或 ExpressRoute 连接。

如果virtual network托管的 VM 可以访问本地系统,但应用无法访问,原因可能是以下原因之一:

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

在断开 VNet 集成之前删除 App Service 计划或 Web 应用

如果删除了 Web 应用或 App Service 计划而未先断开 VNet 集成的连接,您将无法对用于与已删除资源集成的虚拟网络或子网执行任何更新或删除操作。 您的子网委派“Microsoft.Web/serverFarms”将继续分配给子网,并阻止更新/删除操作。

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

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

如果在执行上述步骤后仍遇到 VNet 集成问题,请联系Microsoft Support。

网络疑难解答

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

连接问题 - 它会检查虚拟网络集成的状态,包括检查是否已将专用 IP 分配给计划中的所有实例以及 DNS 设置。 如果未配置自定义 DNS,则应用默认Azure DNS。 故障排除程序还会检查常见的功能应用依赖项,包括与 Azure Storage 的连接及其他绑定依赖项。

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

配置问题 - 此疑难解答检查子网是否适用于虚拟网络集成。

显示正在运行故障排除工具以解决配置问题的屏幕截图。

子网/VNet 删除问题 - 此故障诊断工具检查子网是否有任何锁定,以及它是否存在可能阻止 VNet/子网删除的未使用的服务关联链接。

后续步骤

若要进一步了解网络和 Azure Functions,请参阅以下步骤: