应用服务环境的网络注意事项

重要

本文介绍用于独立应用服务计划的应用服务环境 v2。 应用服务环境 v2 将于 2024 年 8 月 31 日停用。 应用服务环境有新版本,此版本更易于使用并在更强大的基础结构上运行。 若要详细了解该新版本,请先参阅应用服务环境简介。 如果你当前正在使用应用服务环境 v2,请按照本文中的步骤迁移到新版本。

从 2024 年 1 月 29 日起,无法再使用任何可用方法(包括 ARM/Bicep 模板、Azure 门户、Azure CLI 或 REST API)创建新的应用服务环境 v2 资源。 必须在 2024 年 8 月 31 日之前迁移到应用服务环境 v3,以防止资源删除和数据丢失。

应用服务环境是指将 Azure 应用服务部署到 Azure 虚拟网络的子网中。 应用服务环境有两种部署类型:

注意

本文介绍用于独立应用服务计划的应用服务环境 v2。

无论部署类型如何,所有应用服务环境都有一个公共虚拟 IP (VIP)。 此 VIP 用于入站管理流量,并在你从应用服务环境向 Internet 发出调用时用作地址。 此类调用通过为应用服务环境分配的 VIP 离开虚拟网络。

如果应用调用了虚拟网络中的资源或通过 VPN 发出调用,则源 IP 是子网中的某个 IP。 由于应用服务环境在虚拟网络中,因此也可以访问虚拟网络中的资源,而不需要进行任何额外配置。 如果虚拟网络连接到本地网络,则应用也可访问此处的资源,不需其他配置。

Diagram that shows the elements of an external deployment. 

如果应用服务环境采用外部部署,则公共 VIP 也是应用解析为以下项的终结点:

  • HTTP/S
  • FTP/S
  • Web 部署
  • 远程调试

Diagram that shows the elements of an internal load balancer deployment.

如果应用服务环境采用内部负载均衡器部署,则内部地址的地址就是 HTTP/S、FTP/S、Web 部署和远程调试的终结点。

子网大小

部署应用服务环境后,不能更改用于托管它的子网的大小。 应用服务环境使用每个基础结构角色以及每个独立应用服务计划实例的地址。 此外,Azure 网络对创建的每个子网使用五个地址。

在创建应用前,根本不带应用服务计划的应用服务环境将使用 12 个地址。 如果使用内部负载均衡器部署,则它会在创建应用之前使用 13 个地址。 横向扩展时,请注意基础结构角色会按应用服务计划实例的 15 和 20 的倍数添加。

重要

子网中不能有任何其他内容,只能有应用服务环境。 请务必选择一个容许将来扩展的地址空间。 以后无法更改此设置。 建议使用包含 256 个地址的大小 /24

纵向扩展或缩减时,将会添加具有相应大小的新角色,然后将工作负载从当前大小迁移到目标大小。 只有迁移工作负荷后,才会删除原始 VM。 例如,如果应用服务环境具有 100 个应用服务计划实例,则有一段时间需要将 VM 数量翻倍。

入站和出站依赖项

以下部分介绍针对应用服务环境需要注意的依赖项。 另一部分讨论 DNS 设置。

入站依赖项

为了应用服务环境能够运行,以下端口必须为打开状态:

用途 如果
管理 应用服务管理地址 应用服务环境子网:454、455
应用服务环境内部通信 应用服务环境子网:所有端口 应用服务环境子网:所有端口
允许 Azure 负载均衡器入站流量 Azure 负载均衡器 应用服务环境子网:16001

端口 7564 和 1221 可以在端口扫描时显示为打开状态。 它们的回复中包含 IP 地址,此外不会包含任何其他信息。 如果需要,可以关闭这些端口。

除系统监视以外,入站管理流量还提供对应用服务环境的指挥与控制。 应用服务环境管理地址中列出了此流量的源地址。 网络安全配置需要允许从端口 454 和 455 上的应用服务环境管理地址进行访问。 如果阻止从这些地址进行访问,则应用服务环境会变得不正常,然后变成暂停状态。 从端口 454 和 455 进来的 TCP 流量必须从同一 VIP 回去,否则会出现非对称路由问题。

在子网内,有多个用于内部组件通信的端口,并且可以更改。 这要求子网中的所有端口均可从子网访问。

对于 Azure 负载均衡器和应用服务环境子网间的通信,需要打开的最小端口是 454、455 和 16001。 如果使用内部负载均衡器部署,可以将流量锁定在 454、455、16001 端口。 如果使用外部部署,则需要考虑常规的应用访问端口。 具体包括:

使用 端口
HTTP/HTTPS 80、443
FTP/FTPS 21, 990, 10001-10020
Visual Studio 远程调试 4020, 4022, 4024
Web 部署服务 8172

如果阻止应用程序端口,应用服务环境仍可正常工作,但应用可能无法正常运行。 如果使用应用分配的 IP 地址和外部部署,则需要允许从分配给应用的 IP 到子网的流量。 从应用服务环境门户,转到“IP 地址”,查看你需要允许流量进入的端口。

出站依赖项

对于出站访问,应用服务环境依赖于多个外部系统。 在这些系统依赖项中,许多是使用 DNS 名称定义的,不会映射到一组固定的 IP 地址。 因此,应用服务环境需要从子网跨各种端口对所有外部 IP 进行出站访问。

应用服务环境在以下端口上与可通过 Internet 访问的地址通信:

使用 端口
DNS 53
NTP 123
CRL,Windows 更新,Linux 依赖项,Azure 服务 80/443
Azure SQL 1433
监视 12000

锁定应用服务环境中列出了出站依赖项。 如果应用服务环境失去其依赖项的访问权限,它将停止工作。 如果发生这种情况的时间足够长,它将暂停。

客户 DNS

如果在虚拟网络中配置了客户定义的 DNS 服务器,则租户工作负荷将使用该服务器。 此应用服务环境使用 Azure DNS 进行管理。 如果在虚拟网络配置了客户选择的 DNS 服务器,则必须可从子网访问 DNS 服务器。

注意

应用服务环境 v2 中的存储挂载或容器映像拉取无法在虚拟网络中或通过 WEBSITE_DNS_SERVER 应用设置使用客户定义的 DNS。

若要从 Web 应用测试 DNS 解析,可以使用控制台命令 nameresolver。 转到应用的 scm 站点的调试窗口,或者在门户中转到应用,然后选择控制台。 在 shell 提示符下,可以结合要查找的 DNS 名称发出命令 nameresolver。 你取回的结果与应用进行同一查找时获取的结果相同。 如果使用 nslookup,则改用 Azure DNS 进行查找。

如果更改应用服务环境所在的虚拟网络的 DNS 设置,则需重启。 为了避免重启,建议先为虚拟网络配置 DNS 设置,然后再创建应用服务环境。

门户依赖项

除了前面部分所述的依赖项外,还应注意一些与门户体验相关的额外注意事项。 Azure 门户中的某些功能依赖于对源代码管理 (SCM) 站点的直接访问。 Azure 应用服务中的每个应用都有两个 URL。 第一个 URL 用于访问你的应用。 第二个 URL 用于访问 SCM 站点(也称为 Kudu 控制台)。 使用 SCM 站点的功能包括:

  • Web 作业
  • 函数
  • 日志流式处理
  • Kudu
  • 扩展
  • 进程资源管理器
  • 控制台

使用内部负载均衡器时,无法从虚拟网络外部访问 SCM 站点。 某些功能不会从应用门户运行,因为它们需要访问应用的 SCM 站点。 可以直接连接到 SCM 站点,而不使用门户。

如果内部负载均衡器的域名为 contoso.appserviceenvironment.net,并且应用名称为 testapp,则在 testapp.contoso.appserviceenvironment.net 处访问该应用。 在 testapp.scm.contoso.appserviceenvironment.net 中访问其随附的 SCM 站点。

IP 地址

应用服务环境有一些需要注意的 IP 地址。 它们分别是:

  • 公共入站 IP 地址:用于外部部署中的应用流量,以及内部和外部部署中的管理流量。
  • 出站公共 IP:用作离开虚拟网络的出站连接的“来源”IP。 这些连接不会通过 VPN 路由。
  • 内部负载均衡器 IP 地址:此地址仅存在于内部部署中。
  • 应用分配的基于 IP 的 TLS/SSL 地址:只有采用了外部部署并且配置了基于 IP 的 TLS/SSL 绑定时才可使用这些地址。

所有这些 IP 地址会显示在 Azure 门户上的应用服务环境 UI 中。 如果有内部部署,则会列出内部负载均衡器的 IP。

注意

只要应用服务环境在运行,这些 IP 地址就不会更改。 如果应用服务环境变为暂停暂停,然后被还原,则使用的地址将更改。 暂停通常是因为阻止了入站管理访问,或者阻止了对依赖项的访问。

应用分配的 IP 地址

使用外部 ASE 时,可将 IP 地址分配到各个应用。 无法使用 ILB ASE 实现这一点。

当应用使用其自身的基于 IP 的 SSL 地址时,应用服务环境将保留两个映射到该 IP 地址的端口。 它们分别用于 HTTP 流量和 HTTPS 流量。 应用服务环境门户的“IP 地址”部分列出了这些端口。 流量必须能够从 VIP 抵达这些端口。 否则,无法访问应用。 配置网络安全组 (NSG) 时,请务必牢记此要求。

网络安全组

NSG 可用于控制虚拟网络中的网络访问。 使用门户时,有一个最低优先级的隐式拒绝规则可拒绝任何流量。 因此,只需生成允许规则。

你无权访问用于托管应用服务环境本身的 VM。 它们位于 Azure 管理的订阅中。 若要限制对应用的访问,请在子网中设置 NSG。 操作时,需特别注意依赖项。 如果阻止任何依赖项,应用服务环境将停止工作。

可通过 Azure 门户或 PowerShell 配置 NSG。 此处仅介绍了 Azure 门户中的操作。 在门户中的“网络”下面创建和管理 NSG 顶级资源。

NSG 中所需的条目允许以下流量:

入站

  • 来自端口 454、455 上 IP 服务标记 AppServiceManagement 的 TCP 流量
  • 来自端口 16001 上负载均衡器的 TCP 流量
  • 从应用服务环境子网到所有端口上应用服务环境子网的流量

Outbound

  • 发往端口 53 上所有 IP 的 UDP 流量
  • 发往端口 123 上所有 IP 的 UDP 流量
  • 发往端口 80、443 上所有 IP 的 TCP 流量
  • 发往端口 1433 上 IP 服务标记 Sql 的 TCP 流量
  • 发往端口 12000 上所有 IP 的 TCP 流量
  • 发往所有端口上应用服务环境子网的流量

这些端口不包括成功使用应用所需的端口。 例如,假设应用需要在端口 3306 上调用 MySQL 服务器。 端口 123 上的网络时间协议 (NTP) 是操作系统使用的时间同步协议。 NTP 终结点不特定于应用服务,可因操作系统而异,并且不是定义完善的地址列表。 若要防止时间同步问题,则需要允许 UDP 流量发送到端口 123 上的所有地址。 端口 12000 的出站 TCP 流量用于系统支持和分析。 终结点是动态的,并且不是一组定义完善的地址。

常规应用访问端口为:

使用 端口
HTTP/HTTPS 80、443
FTP/FTPS 21, 990, 10001-10020
Visual Studio 远程调试 4020, 4022, 4024
Web 部署服务 8172

默认规则允许虚拟网络中的 IP 与子网对话。 另一条默认规则允许负载均衡器(亦称为公共 VIP)与应用服务环境通信。 选择“默认规则”(“添加”图标旁边)即可查看默认规则。

如果在默认规则的前面放置一条拒绝其他任何流量的规则,则会阻止 VIP 与应用服务环境之间的流量。 要阻止来自虚拟网络内部的流量,请自行添加规则以允许入站。 使用等效于 AzureLoadBalancer 的源,其目标为“任何”,端口范围为 *。 由于子网将应用 NSG 规则,因此无需指定具体的目标。

若向应用分配了 IP 地址,请确保端口保持打开。 可在“应用服务环境”>“IP 地址”中查看端口。  

定义 NSG 之后,请将其分配到子网。 如果你不记得虚拟网络或子网,可以通过应用服务环境门户查看。 若要将 NSG 分配到子网,请转到子网 UI 并选择该 NSG。

路由

强制隧道是指在虚拟网络中设置路由时,使出站流量不直接前往 Internet。 相反,流量会前往其他位置,例如 Azure ExpressRoute 网关或虚拟设备。 如果需要以这样的方式配置应用服务环境,请参阅为应用服务环境配置强制隧道

在门户中创建应用服务环境时,会在子网上自动创建一组路由表。 这些路由只是指示将出站流量直接发送到 Internet。

若要手动创建同样的路由,请执行以下步骤:

  1. 转到 Azure 门户,选择“网络”>“路由表”。

  2. 在虚拟网络所在的位置新建一个路由表。

  3. 在路由表 UI 中选择“路由”>“添加”。

  4. 将“下一跃点类型”设置为 Internet,将“地址前缀”设置为 0.0.0.0/0。 选择“保存” 。

    然后将看到如下内容:

    Screenshot that shows functional routes.

  5. 创建新路由表后,请转到子网。 从门户中的列表处选择路由表。 保存更改后,会看到子网旁显示有 NSG 和路由。

    Screenshot that shows NSGs and routes.