Compartilhar via

App Service Environment 环境网络

App Service Environment是托管 Windows 和 Linux 容器、web apps、API 应用、逻辑应用和函数应用的Azure App Service的单租户部署。 安装应用服务环境时,您需要选择要部署的 Azure 虚拟网络。 所有入站和出站应用程序流量都在指定的virtual network内。 您将部署到虚拟网络中的一个子网,并且该子网中不能再部署任何其他内容。

子网要求

以下是App Service Environment所在的子网的一组最低要求。

  • 必须将子网委派给 Microsoft.Web/hostingEnvironments
  • 子网必须为空。
  • 子网的 addressPrefix 属性必须设置为字符串而不是数组格式。

子网的大小可能会影响 App Service Environment 中服务计划实例的扩展限制。 对于生产规模,我们建议为子网提供 /24 地址空间(256 个地址)。 如果计划在 App Service Environment 中扩展到接近 200 个实例的最大容量,并计划频繁进行弹性伸缩操作,我们建议为子网分配 /23 地址空间(512 个地址)。

注意事项

现在可以将你的 App Service Environment 移到新子网。 若需将应用服务环境移到新子网,请创建服务请求。 需要支持票证,因为在更改子网之前,需要验证并正确配置先决条件和配置,以确保成功迁移。 无法正确迁移可能会导致停机和连接问题。

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

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

注意事项

Windows 容器为每个应用的每个 App Service 计划实例使用额外的 IP 地址,并且需要根据需要调整子网大小。 例如,如果你的 App Service Environment 有 2 个 Windows 容器 App Service 计划,每个计划有 25 个实例,每个计划运行 5 个应用,则需要 300 个 IP 地址,以及其他用于支持水平(扩展/收缩)缩放的地址。

示例计算:

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

对于 25 个实例:对于每个 App Service 计划,6 x 25 = 150 个 IP 地址

由于有 2 个 App Service 计划,2 x 150 = 300 个 IP 地址。

地址

在创建 App Service Environment 时,其具有以下网络信息:

地址类型 描述
App Service Environment 虚拟网络 部署到虚拟网络。
App Service Environment子网 部署到的子网。
域后缀 应用使用的默认域后缀。
自定义域后缀 (可选)应用使用的自定义域后缀。
虚拟 IP (VIP) 使用的 VIP 类型。 两个可能的值为“内部”和“外部”。
入站地址 入站地址是访问应用的地址。 如果有内部 VIP,则它是 App Service Environment 子网中的地址。 如果该地址是外部地址,则它是面向公众的地址。
工作出站地址 在向 Internet 发出出站调用时,应用使用这个(或这些)地址。
平台出站地址 在向 Internet 发出出站调用时,平台使用这个地址。 例如,如果未使用专用终结点,则从 Key Vault 拉取自定义域后缀的证书。

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

显示有关 IP 地址详细信息的屏幕截图。

在App Service Environment中缩放App Service计划时,可以在子网外使用更多地址。 使用的地址数因你拥有的App Service计划实例数以及有多少流量而异。 App Service Environment中的应用在子网中没有专用地址。 应用在子网中使用的特定地址会随时间而改变。

自带入站地址

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

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

ILB App Service Environment入站流量限制

对于具有内部 VIP 的应用服务环境,如果源 IP 地址位于用于应用服务环境前端的基础结构地址范围内,则可以阻断到前端的入站流量。 在连接到 ILB App Service Environment 时,172.31.192.0/25 地址空间中请勿使用源 IP 地址。

端口和网络限制

若要使应用接收流量,请确保入站网络安全组(NSG)规则允许App Service Environment子网接收来自所需端口的流量。 除了要接收流量的任何端口外,还应确保Azure Load Balancer能够连接到端口 80 上的子网。 此端口用于内部虚拟机的健康状况检查。 您仍然可以控制从虚拟网络到子网的端口 80 的流量。

注意事项

由于 HTTP 连接持久性,对 NSG 规则的更改最长可能需要 14 天才能生效。 如果进行更改会阻止平台/管理流量,最长可能需要 14 天才能看到效果。

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

源/目标端口 方向 目标 目的
* / 80,443 入站 VirtualNetwork App Service Environment 子网范围 允许应用流量和内部健康检测 ping 流量

运行App Service Environment的最低要求是:

源/目标端口 方向 目标 目的
* / 80 入站 Azure 负载均衡器 (AzureLoadBalancer) App Service Environment 子网范围 允许内部健康检查 ping 流量

如果使用最低要求规则,可能需要为应用程序流量使用一个或多个规则。 如果使用任何部署或调试选项,还必须允许此流量流向App Service Environment子网。 这些规则的源可以是virtual network,也可以是一个或多个特定的客户端 IP 或 IP 范围。 目标始终是 App Service Environment 子网地址范围。

端口 80 上的内部健康检查 ping 流量在负载均衡器与内部服务器之间被隔离。 外部流量不能到达运行状况 ping 终结点。

普通应用访问端口入站如下:

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

注意事项

对于 FTP 访问,即使您希望在端口 21 上禁止标准 FTP,您仍需允许来自 LoadBalancer 到端口 21 上 App Service Environment 子网范围的流量,因为这专用于 FTP 服务的内部健康检查 ping 流量。

网络路由

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

应用程序依赖项包括应用在运行时所需的终结点。 除了应用所调用的 API 和服务,依赖项还可能包括衍生终结点,例如证书吊销列表(CRL)检查终结点和身份/认证终结点,如 Microsoft Entra ID。 如果使用 App Service 中的连续部署,您可能还需要根据类型和语言允许终结点。 具体而言,对于 Linux 持续部署,需要允许 oryx-cdn.microsoft.io:443

可以将 Web 应用防火墙设备(如 Azure Application Gateway)放置在入站流量的前面以进行保护。 这样做可以公开该App Service Environment上的特定应用。

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

注意事项

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

出站网络分段

出站网络分段允许将应用加入备用子网,以控制出站流量的路由方式。 默认情况下,来自App Service Environment的所有出站流量都源自托管App Service Environment的子网。

启用出站网络分段

创建App Service Environment时,必须启用出站网络分段。 无法在现有App Service环境中启用此功能。 无法通过门户界面支持启用此群集设置或加入备用子网。

若要启用该功能,请在使用 Azure Resource Manager 或 Bicep 模板创建App Service Environment时配置 MultipleSubnetJoinEnabled 群集设置:

"clusterSettings": [
    {
        "name": "MultipleSubnetJoinEnabled",
        "value": "true"
    }
]

有关配置集群设置的指导,请参阅 App Service 环境的自定义配置设置

将应用加入备用子网

备用子网必须是空的,并且必须委托给 Microsoft.Web/serverFarms。 确保为 应用启用应用程序流量路由 ,以便通过备用子网路由所有流量。

若要将应用加入备用子网,请使用以下Azure CLI命令:

az webapp vnet-integration add --resource-group <APP-RESOURCE-GROUP> --name <APP-NAME> --vnet <VNET-NAME> --subnet <ALTERNATE-SUBNET-NAME>

如果备用子网位于与应用不同的资源组中,请运行 az webapp vnet-integration add -h 以了解如何指定资源 ID。

若要更改应用的备用子网,请先删除现有集成,然后添加新的子网。

若要删除应用的备用子网联接,请使用 Azure CLI 或 ARM/Bicep 删除虚拟网络集成:

az webapp vnet-integration remove --resource-group <APP-RESOURCE-GROUP> --name <APP-NAME>

重要

不要将App Service Environment的子网添加为备用子网。 此配置会导致冲突,并会阻止应用正常运行。

局限性

  • 应用、App Service Environment 和虚拟网络必须全部位于同一订阅中。
  • 来自给定计划的每个应用只能与一个备用子网集成。
  • 一个计划最多可以有四个不同的子网连接,同一计划中的应用可以使用任何连接。
  • 此功能与多租户 App Service 提供的 multi-plan 子网联接功能不兼容。

专用终结点

若要为托管在 App Service Environment 中的应用启用专用终结点,必须先在 App Service Environment 级别启用此功能。

可以通过Azure portal激活它。 在 App Service Environment 配置窗格中,启用设置Allow new private endpoints。 或者,可以使用以下 CLI 启用它:

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

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

DNS

以下部分介绍适用于入站和出站的 App Service Environment 的 DNS 注意事项和配置。 这些示例使用来自 Azure 公有云的域后缀 appserviceenvironment.cn。 如果使用其他云(如 Azure Government),则需要使用各自的域后缀。 由于 DNS 限制,App Service Environment 域的站点名称被截断至 59 个字符。 对于具有插槽的 App Service Environment 域,由于 DNS 限制,站点名称截断为 40 个字符,插槽名称截断为 19 个字符。

您的 App Service 环境的 DNS 配置

如果您的应用服务环境是使用外部 VIP 创建的,则应用会自动放入公共 DNS 中。 如果您的应用服务环境是用内部 VIP 创建的,那么在创建您的应用服务环境时,您有这两个选项。 如果选择自动配置Azure DNS专用区域,则会在virtual network中配置 DNS。 如果选择手动配置 DNS,则需要使用自己的 DNS 服务器或配置Azure DNS专用区域。 若要查找入站地址,请转到App Service Environment门户,然后选择IP 地址

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

  1. <App Service Environment-name>.appserviceenvironment.cn 创建区域。
  2. 在该区域中创建一条 A 记录,将“*”指向 App Service Environment 使用的入站 IP 地址。
  3. 在该区域中创建一个 A 记录,将 @ 指向您的 App Service Environment 使用的入站 IP 地址。
  4. 在名为 <App Service Environment-name>.appserviceenvironment.cnscm 中创建区域。
  5. scm 区域中创建一条 A 记录,该记录指向 * App Service Environment 专用终结点使用的 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配置

要专门访问内部负载均衡器(ILB)App Service Environment v3 的 FTP,您需要确保已配置 DNS。 使用以下设置配置Azure DNS专用区域或等效的自定义 DNS:

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

除了设置 DNS 之外,还需要在 App Service Environment 配置app 级别启用 DNS

App Service Environment 的 DNS 配置

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

更多资源