应用服务环境网络

应用服务环境是托管 Windows 和 Linux 容器、Web 应用、API 应用、逻辑应用和函数应用的 Azure 应用服务的单个租户部署。 在安装应用服务环境时,需要选择要在其中部署的 Azure 虚拟网络。 所有入站和出站应用程序流量都位于你指定的虚拟网络内。 你需要部署到虚拟网络中的单个子网中,无法将任何其他内容部署到该子网中。

注意

本文介绍与独立 v2 应用服务计划一起使用的应用服务环境 v3。

子网要求

必须将子网委托给 Microsoft.Web/hostingEnvironments,并且子网必须为空。

子网的大小会影响应用服务环境中应用服务计划实例的缩放限制。 对于生产规模,我们建议为子网提供 /24 地址空间(256 个地址)。 如果计划在应用服务环境中缩放近 200 个实例的最大容量,并且计划频繁的纵向扩展/缩减操作,我们建议为子网提供 /23 地址空间(512 个地址)。

如果使用的子网较小,请注意以下限制:

  • 任何特定的子网都有五个保留用于管理目的的地址。 除了管理地址之外,应用服务环境还会动态缩放支持基础结构,并使用 7 到 27 个地址,具体取决于配置和负载。 可以将其余地址用于应用服务计划中的实例。 子网的最小大小是 /27 地址空间(32 个地址)。
  • 对于应用服务环境(如 I1v2 Windows)中使用的任何应用服务计划 OS/SKU 组合,每 20 个活动实例创建一个备用实例。 备用实例也需要 IP 地址。
  • 在应用服务环境中纵向扩展/缩减应用服务计划时,当缩放操作完成后,应用服务计划使用的 IP 地址量会暂时增加一倍。 在取消预配现有实例之前,新实例需要完全正常运行。
  • 平台升级需要使用免费 IP 地址,以确保可以在不中断出站流量的情况下进行升级。
  • 在纵向扩展、缩减或完成操作后,可能需要一小段时间才能释放 IP 地址。 在极少数情况下,此操作可能长达 12 小时。
  • 如果子网中的地址用完,可能会限制你在应用服务环境中横向扩展应用服务计划。 另一种可能性是,如果 Microsoft 无法缩放支持基础结构,在密集的流量负载期间可能会遇到更高的延迟。

注意

对于每个应用服务计划实例,Windows 容器针对每个应用使用一个额外的 IP 地址,并且需要相应地调整子网大小。 例如,如果你的应用服务环境有 2 个 Windows 容器应用服务计划,每个计划有 25 个实例,每个有 5 个应用运行,则需要 300 个 IP 地址和额外的地址来支持横向缩放(横向缩减/横向扩展)。

示例计算:

对于每个应用服务计划实例,你需要:5 个 Windows 容器应用 = 5 个 IP 地址,每个应用服务计划实例 1 个 IP 地址,5 + 1 = 6 个 IP 地址

对于 25 个实例:每个应用服务计划为 6 x 25 = 150 个 IP 地址

由于有 2 个应用服务计划,因此需要 2 x 150 = 300 个 IP 地址。

地址

应用服务环境创建时具有以下网络信息:

地址类型 描述
应用服务环境虚拟网络 部署到的虚拟网络。
应用服务环境子网 部署到的子网。
域后缀 创建的应用使用的域后缀。
虚拟 IP (VIP) 使用的 VIP 类型。 两个可能的值为“内部”和“外部”。
入站地址 入站地址是访问应用的地址。 如果有内部 VIP,则它是应用服务环境子网中的地址。 如果该地址是外部地址,则它是面向公众的地址。
默认出站地址 在向 Internet 发出出站调用时,应用默认使用此地址。

可以在门户的“IP 地址”部分找到详细信息,如以下屏幕截图所示:

Screenshot that shows details about IP addresses.

在应用服务环境中缩放应用服务计划时,将使用子网中的更多地址。 使用的地址数根据你的应用服务计划实例数以及存在的流量多少而异。 应用服务环境中的应用在子网中没有专用地址。 应用在子网中使用的特定地址会随时间而改变。

自带入站地址

可以将自己的入站地址带入应用服务环境中。 如果创建具有内部 VIP 的应用服务环境,则可以在子网中指定静态 IP 地址。 如果使用外部 VIP 创建应用服务环境,则可以通过指定公共 IP 地址的资源 ID 来使用自己的 Azure 公共 IP 地址。 以下是自带入站地址的限制:

  • 对于具有外部 VIP 的应用服务环境,Azure 公共 IP 地址资源必须与应用服务环境位于同一订阅中。
  • 创建应用服务环境后,无法更改入站地址。

端口和网络限制

为了让应用接收流量,请确保入站网络安全组 (NSG) 规则允许应用服务环境子网从所需端口接收流量。 除了希望接收流量的任何端口以外,还应确保 Azure 负载均衡器能够在端口 80 上连接到子网。 此端口用于内部虚拟机的健康状况检查。 你仍可控制从虚拟网络到子网的端口 80 流量。

建议配置以下入站 NSG 规则:

源/目标端口 方向 目标 目的
* / 80,443 入站 VirtualNetwork 应用服务环境子网范围 允许应用流量和内部运行状况 ping 流量

应用服务环境运行的最低要求是:

源/目标端口 方向 目标 目的
* / 80 入站 AzureLoadBalancer 应用服务环境子网范围 允许内部运行状况 ping 流量

如果使用最低要求规则,可能需要为应用程序流量使用一个或多个规则。 如果使用任何部署或调试选项,还必须允许此流量流向应用服务环境子网。 这些规则的来源可以是虚拟网络,也可以是一个或多个特定的客户端 IP 或 IP 范围。 目标始终是应用服务环境子网范围。 端口 80 上的内部运行状况 ping 流量被隔离在负载均衡器与内部服务器之间。 外部流量不能到达运行状况 ping 终结点。

常规应用出站访问端口如下所示:

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

注意

对于 FTP 访问,即使要禁止端口 21 上的标准 FTP,仍需要允许端口 21 上从 LoadBalancer 到应用服务环境子网范围的流量,因为这专门用于 FTP 服务的内部运行状况 ping 流量。

网络路由

你可以不受限制地设置路由表。 可以将所有出站应用程序流量从应用服务环境通过隧道传输到出口防火墙设备,例如 Azure 防火墙。 在这种情况下,你唯一需要担心的是应用程序依赖项。

应用程序依赖项包括应用在运行时所需的终结点。 除了应用正在调用的 API 和服务之外,依赖项还可以是派生的终结点,如证书吊销列表 (CRL) 检查终结点和标识/身份验证终结点(例如 Microsoft Entra ID)。 如果使用的是应用服务中的持续部署,则可能还需要根据类型和语言允许终结点。 特别是对于 Linux 持续部署,需要允许 oryx-cdn.microsoft.io:443

可以将 Web 应用程序防火墙设备(例如 Azure 应用程序网关)置于入站流量的前面。 这样做可以公开该应用服务环境上的特定应用。

应用程序会将其中一个默认出站地址用于流向公共终结点的出口流量。 如果要自定义应用服务环境上应用程序的出站地址,可以将 NAT 网关添加到子网。

注意

应用服务环境 v3 支持出站 SMTP 连接(端口 25)。 可支持性取决于部署虚拟网络的订阅上的设置。 对于 2022 年 8 月 1 日之前创建的虚拟网络/子网, 需要对虚拟网络/子网启动临时配置更改,以便从订阅同步设置。 例如,添加临时子网、临时关联/分离 NSG 或临时配置服务终结点。 有关详细信息和故障排除,请参阅排查 Azure 中的出站 SMTP 连接问题

专用终结点

若要为托管在应用服务环境中的应用启用专用终结点,必须先在应用服务环境级别启用此功能。

可通过 Azure 门户激活它。 在“应用服务环境”配置窗格中,打开设置 Allow new private endpoints。 或者,可以使用以下 CLI 启用它:

az appservice ase update --name myasename --allow-new-private-endpoint-connections true

有关专用终结点和 Web 应用的详细信息,请参阅 Azure Web 应用专用终结点

DNS

以下部分介绍了适用于应用服务环境的入站和出站的 DNS 注意事项和配置。 这些示例使用了 Azure 公有云中的域后缀 appserviceenvironment.cn。 如果你在使用其他云(如 Azure 政府),则需要使用其各自的域后缀。 对于应用服务环境域,由于 DNS 限制,站点名称被截断为 40 个字符。 如有槽,则槽名称将被截断为 19 个字符。

应用服务环境的 DNS 配置

如果你的应用服务环境是使用外部 VIP 创建的,则应用将自动置于公共 DNS 中。 如果你的应用服务环境是使用内部 VIP 创建的,则可能需要为其配置 DNS。 创建应用服务环境时,如果选择自动配置 Azure DNS 专用区域,则会在虚拟网络中配置 DNS。 如果你已选择手动配置 DNS,需要使用自己的 DNS 服务器或配置 Azure DNS 专用区域。 要查找入站地址,请转到应用服务环境门户,并选择“IP 地址”。

如果要使用自己的 DNS 服务器,请添加以下记录:

  1. <App Service Environment-name>.appserviceenvironment.cn 创建区域。
  2. 在该区域中创建 A 记录,该记录将 * 指向应用服务环境使用的入站 IP 地址。
  3. 在该区域中创建 A 记录,该记录将 @ 指向应用服务环境使用的入站 IP 地址。
  4. 在名为 scm<App Service Environment-name>.appserviceenvironment.cn 中创建区域。
  5. scm 区域中创建 A 记录,该记录将 * 指向应用服务环境的专用终结点使用的 IP 地址。

在 Azure DNS 专用区域中配置 DNS:

  1. 创建名为 <App Service Environment-name>.appserviceenvironment.cn 的 Azure DNS 专用区域。
  2. 在该区域中,创建一条将 * 指向入站 IP 地址的 A 记录。
  3. 在该区域中,创建一条将 @ 指向入站 IP 地址的 A 记录。
  4. 在该区域中,创建一条将 *.scm 指向入站 IP 地址的 A 记录。

除了创建应用时提供的默认域之外,还可以向应用添加自定义域。 可以设置一个自定义域名,而无需对应用进行任何验证。 如果使用的是自定义域,需要确保它们已配置 DNS 记录。 可以按照上述指南为自定义域名配置 DNS 区域和记录(将默认域名替换为自定义域名即可)。 自定义域名适用于应用请求,但不适用于 scm 站点。 scm 站点仅在 <appname>.scm.<asename>.appserviceenvironment.cn 上可用。

用于 FTP 访问的 DNS 配置

具体而言,若要通过 FTP 访问内部负载均衡器 (ILB) 应用服务环境 v3,你务必要配置 DNS。 使用以下设置配置 Azure DNS 专用区域或等效的自定义 DNS:

  1. 创建名为 ftp.appserviceenvironment.cn 的 Azure DNS 专用区域。
  2. 在该区域中,创建一条将 <App Service Environment-name> 指向入站 IP 地址的 A 记录。

除了设置 DNS 之外,还需要在应用服务环境配置中和应用级别启用它。

应用服务环境中的 DNS 配置

应用服务环境中的应用使用配置虚拟网络的 DNS。 如果你希望某些应用使用不同的 DNS 服务器,可以使用应用设置 WEBSITE_DNS_SERVERWEBSITE_DNS_ALT_SERVER 手动设置每个应用。 WEBSITE_DNS_ALT_SERVER 配置备用 DNS 服务器。 仅当主 DNS 服务器没有响应时,才会使用辅助 DNS 服务器。

更多资源