你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

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

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

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

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

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

入站 IP 更改时

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

  • 删除应用,然后在其他资源组中重新创建它(部署单元可能会更改)。
  • 删除资源组和区域组合中的最后一个应用,然后重新创建它(部署单元可能会更改)。
  • 删除现有基于 IP 的 TLS/SSL 绑定,例如在证书续订期间(请参阅续订证书)。

找到入站 IP

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

nslookup <app-name>.azurewebsites.net

获取静态入站 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 地址限制。

查找出站 IP

若要在 Azure 门户中查找应用当前使用的出站 IP 地址,请选择应用左侧导航中的“属性”。 这些 IP 地址会列在“出站 IP 地址”字段中。

Cloud Shell 中运行以下命令也可以找到相同的信息。

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 地址”字段中。

Cloud Shell 中运行以下命令也可以找到相同的信息。

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

对于函数应用,请参阅函数应用出站 IP 地址

获取静态出站 IP

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

服务标记

通过使用 AppService 服务标记,可以定义 Azure 应用服务服务的网络访问,而无需指定单个 IP 地址。 服务标记是一组 IP 地址前缀,用于最大程度地降低创建安全规则的复杂性。 使用服务标记时,Azure 会在服务更改时自动更新 IP 地址。 但是,服务标记不是安全控制机制。 服务标记只是一个 IP 地址列表。

AppService 服务标记仅包括多租户应用的入站 IP 地址。 不包括在隔离(应用服务环境)中部署的应用和使用基于 IP 的 TLS 绑定的应用的入站 IP 地址。 此外,多租户和隔离中使用的所有出站 IP 地址都不包括在该标记中。

该标记可用于允许网络安全组 (NSG) 中的出站流量流向应用。 如果应用使用的是基于 IP 的 TLS,或者应用是在隔离模式下部署的,则必须改用专用 IP 地址。

注意

服务标记有助于定义网络访问,但不应将其视为适当的网络安全措施的替代项,因为它不提供对单个 IP 地址的精细控制。

后续步骤