Azure Functions 中的 IP 地址

本文介绍与函数应用的 IP 地址相关的以下概念:

  • 查找函数应用当前正在使用的 IP 地址。
  • 导致函数应用 IP 地址更改的条件。
  • 限制可以访问函数应用的 IP 地址。
  • 定义函数应用的专用 IP 地址。

IP 地址与函数应用相关联,而不是与单个函数相关联。 传入 HTTP 请求不能使用入站 IP 地址调用单个函数;它们必须使用默认域名(functionappname.azurewebsites.net)或自定义域名。

函数应用的入站 IP 地址

每个函数应用都使用单个入站 IP 地址启动。 当函数应用在消耗计划或高级计划中运行时,可能会添加更多入站 IP 地址,因为发生了事件驱动的横向扩展。 若要查找应用正在使用的入站 IP 地址或地址,请使用 nslookup 本地计算机的实用工具,如以下示例所示:

nslookup <APP_NAME>.azurewebsites.net

在此示例中,请将 <APP_NAME> 替换为您的函数应用名称。 如果你的应用使用 自定义域名,请 nslookup 改用该自定义域名。

函数应用的出站 IP 地址

每个函数应用都有一组可用的出站 IP 地址。 从函数(例如后端数据库)到后端数据库的任何出站连接都使用其中一个可用的出站 IP 地址作为源 IP 地址。 你事先不知道给定连接使用的 IP 地址。 因此,后端服务必须向函数应用的所有出站 IP 地址开放其防火墙。

小窍门

对于某些平台级功能(如 Key Vault 引用),源 IP 可能不是出站 IP 之一,不应将目标资源配置为依赖于这些特定地址。 建议应用改用虚拟网络集成,因为平台通过该网络将流量路由到目标资源。

查找函数应用可用的出站 IP 地址:

  1. 登录到 Azure 资源浏览器
  2. 选择“订阅”> {你的订阅} >“提供程序”>“Microsoft.Web”>“站点”。
  3. 在 JSON 面板中,查找具有 id 以函数应用名称结尾的属性的网站。
  4. 请参阅 outboundIpAddressespossibleOutboundIpAddresses

outboundIpAddresses 总集当前可供函数应用使用。 该possibleOutboundIpAddresses集包含仅在函数应用缩放到其他定价层时可用的 IP 地址。

注释

消耗计划高级计划 上运行的函数应用程序进行扩展时,可能会分配新的出站 IP 地址范围。 在上述任一计划中运行时,不能依赖报告的出站 IP 地址来创建最终的允许列表。 若要能够包含动态缩放期间使用的所有潜在出站地址,需要将整个数据中心添加到允许列表。

数据中心出站 IP 地址

如果需要将函数应用使用的出站 IP 地址添加到允许列表,另一个选项是将函数应用的数据中心(Azure 区域)添加到允许列表。 可以下载列出所有 Azure 数据中心 IP 地址的 JSON 文件。 然后,找到应用于运行函数应用的区域的 JSON 片段。

例如,下面的 JSON 片段是西欧允许列表的样子:

{
  "name": "AzureCloud.westeurope",
  "id": "AzureCloud.westeurope",
  "properties": {
    "changeNumber": 9,
    "region": "westeurope",
    "platform": "Azure",
    "systemService": "",
    "addressPrefixes": [
      "13.69.0.0/17",
      "13.73.128.0/18",
      ... Some IP addresses not shown here
     "213.199.180.192/27",
     "213.199.183.0/24"
    ]
  }
}

有关此文件何时更新以及 IP 地址何时更改的信息,请展开下载中心页的“详细信息”部分。

入站 IP 地址更改

在以下情况下,入站 IP 地址 可能会 更改:

  • 删除函数应用,然后在不同的资源组中重新创建它。
  • 删除资源组和区域组合中的最后一个函数应用,然后重新创建它。
  • 删除 TLS 绑定,例如 在证书续订期间。

当你的函数应用在消耗计划高级计划中运行时,即使你未执行任何类似此处的操作,入站 IP 地址也可能会更改。

出站 IP 地址更改

出站 IP 地址的相对稳定性取决于托管计划。

消耗计划和高级计划

由于自动缩放行为,在消耗计划高级计划中运行时,出站 IP 可以随时更改。

如果需要控制函数应用的出站 IP 地址,例如,如果需要将其添加到允许列表,请考虑在高级托管计划中运行时实现 虚拟网络 NAT 网关 。 还可以通过在专用应用服务计划中运行来实现此操作。

专用计划

在专用(应用服务)计划中运行函数应用时,函数应用的可用出站 IP 地址集可能会在以下情况下更改:

  • 采取任何可能更改入站 IP 地址的动作。
  • 更改专用(应用服务)计划的定价层。 应用可用于所有定价层的所有可能的出站 IP 地址的列表位于该属性中 possibleOutboundIPAddresses 。 请参阅查找外部 IP

强制更改出站 IP 地址

使用以下过程在专用(应用服务)计划中特意强制进行出站 IP 地址更改:

  1. 在标准层和高级 v2 定价层之间纵向扩展或缩减应用服务计划。

  2. 等待 10 分钟。

  3. 缩放回到最初的层。

IP 地址限制

可以配置要允许或拒绝对函数应用的访问的 IP 地址列表。 有关详细信息,请参阅 Azure 应用服务访问限制

专用 IP 地址

函数应用需要静态专用 IP 地址时,可以探索多种策略。

用于出站静态 IP 的虚拟网络 NAT 网关

你可以通过使用虚拟网络 NAT 网关将流量定向到静态公共 IP 地址,以此来控制来自函数的出站流量的 IP 地址。 在 高级计划专用托管计划中运行时,可以使用此拓扑。 若要了解详细信息,请参阅 教程:使用 Azure 虚拟网络 NAT 网关控制 Azure Functions 出站 IP

应用服务环境

为了完全控制入站和出站 IP 地址,我们建议 应用服务环境(应用 服务计划的 隔离层 )。 有关详细信息,请参阅 应用服务环境概述

若要了解函数应用是否在应用服务环境中运行:

  1. 登录到 Azure 门户
  2. 导航到函数应用。
  3. 选择概览选项卡。
  4. 应用服务计划层显示在 应用服务计划/定价层下。 应用服务环境定价层是 隔离的

应用服务环境 skuIsolated.

后续步骤

IP 发生更改的常见原因之一是函数应用的规模发生更改。 详细了解函数应用缩放