Azure 应用服务中的入站和出站 IP 地址

Azure 应用服务是一个多租户服务(应用服务环境除外)。 不在应用服务环境中(不在隔离层中)的应用与其他应用共享网络基础结构。 因此,应用的入站和出站 IP 地址可能不同,在某些情况下甚至可能会更改。

应用服务环境使用专用网络基础结构,因此,应用服务环境中运行的应用将获取静态专用 IP 地址用于入站和出站连接。

IP 地址在应用服务中的工作原理

应用服务应用在应用服务计划中运行,而应用服务计划部署到 Azure 基础结构中的一个部署单元(内部称为 Web 空间)。 为每个部署单元分配一组虚拟 IP 地址,其中包含 1 个公共入站 IP 地址和一组出站 IP 地址。 同一部署单元中的所有应用服务计划和在其中运行的应用实例共享同一组虚拟 IP 地址。 对于应用服务环境(隔离层中的应用服务计划),应用服务计划是部署单元本身,因此虚拟 IP 地址专用的。

由于不允许在部署单元之间移动应用服务计划,因此分配给应用的虚拟 IP 地址通常保持不变,但也有例外。

入站 IP 更改时

不管横向扩展的实例数如何,每个应用只有一个入站 IP 地址。 执行以下操作之一时,入站 IP 地址可能会更改:

  • 删除应用,然后在其他资源组中重新创建它(部署单元可能会更改)。
  • 删除资源组和区域组合中的最后一个应用,然后重新创建它(部署单元可能会更改)。

找到入站 IP

只需在本地终端中运行以下命令:

nslookup <app-name>.chinacloudsites.cn

获取静态入站 IP

有时,你可能需要对应用使用专用静态 IP 地址。 若要获取静态入站 IP 地址,需要使用基于 IP 的证书绑定来保护自定义 DNS 名称。 如果并不真正需要使用 TLS 功能来保护应用,甚至可以上传一个自签名证书来实现此绑定。 在基于 IP 的 TLS 绑定中,证书绑定到 IP 地址本身。因此,应用服务会预配一个静态 IP 地址来实现此目的。

出站 IP 更改时

不管横向扩展的实例数如何,每个应用在任意给定时间具有指定数目的出站 IP 地址。 从应用服务应用发起的任何出站连接(例如,与后端数据库的连接)使用某个出站 IP 地址作为源 IP 地址。 要使用的 IP 地址是在运行时随机选择的,因此后端服务必须对应用的所有出站 IP 地址打开其防火墙。

执行以下操作之一时,应用的出站 IP 地址集将更改:

  • 删除应用,然后在其他资源组中重新创建它(部署单元可能会更改)。
  • 删除资源组和区域组合中的最后一个应用,然后重新创建它(部署单元可能会更改)。
  • 在较低层级(“基本”、“标准”和“高级”)与“高级 V2”层级、“高级 V3”层级和“高级 V3”层级中的“Pmv3”选项之间缩放应用(可以在该集内增减 IP 地址)。

无论是哪个定价层,你都可以通过查找 possibleOutboundIpAddresses 属性或者在 Azure 门户的“属性”边栏选项卡中的“其他出站 IP 地址”字段中查找你的应用可以使用的所有可能的出站 IP 地址。 请参阅查找出站 IP

请注意,如果应用服务向现有应用服务部署添加新的定价层或选项,则所有可能的出站 IP 地址集可能会随着时间的推移而增大。 例如,如果应用服务将“高级 V3”层级添加到现有应用服务部署中,则所有可能的出站 IP 地址集将增大。 同样,如果应用服务向已支持“高级 V3”层级的部署添加新的 Pmv3 选项,则所有可能的出站 IP 地址集也会增大。 这不会立即生效,因为将新的定价层或选项添加到应用服务部署时,正在运行的应用程序的出站 IP 地址不会更改。 但如果应用程序切换到以前不可用的新定价层或选项,则将使用新的出站地址,客户需要更新下游防火墙规则和 IP 地址限制。

查找出站 IP

若要在 Azure 门户中查找应用当前使用的出站 IP 地址,请单击应用左侧导航窗格中的“属性”。 它们列出在“出站 IP 地址”字段中。

在 Azure CLI 中运行以下命令也可以找到相同的信息。

az webapp show --resource-group <group_name> --name <app_name> --query outboundIpAddresses --output tsv
(Get-AzWebApp -ResourceGroup <group_name> -name <app_name>).OutboundIpAddresses

若要查找你的应用可能使用的所有出站 IP 地址(无论是哪个定价层),请在你的应用的左侧导航栏中单击“属性”。 它们列出在“其他出站 IP 地址”字段中。

在 Azure CLI 中运行以下命令也可以找到相同的信息。

az webapp show --resource-group <group_name> --name <app_name> --query possibleOutboundIpAddresses --output tsv
(Get-AzWebApp -ResourceGroup <group_name> -name <app_name>).PossibleOutboundIpAddresses

获取静态出站 IP

你可以通过将区域性 VNet 集成与虚拟网络 NAT 网关一起使用来将流量定向通过静态公共 IP 地址,以此来控制来自应用的出站流量的 IP 地址。 区域性 VNet 集成在“基本”、“标准”、“高级”、“高级 V2”和“高级 V3”应用服务计划中提供。 若要详细了解此设置,请参阅 NAT 网关集成

后续步骤

了解如何按源 IP 地址限制入站流量。