Azure Functions 中的 IP 地址
本文介绍以下与函数应用的 IP 地址相关的概念:
- 查找函数应用当前正在使用的 IP 地址。
- 导致函数应用 IP 地址更改的条件。
- 限制可以访问函数应用的 IP 地址。
- 定义函数应用的专用 IP 地址。
IP 地址与函数应用而不是单个函数相关联。 传入的 HTTP 请求不能使用入站 IP 地址来调用单个函数;它们必须使用默认域名 (functionappname.chinacloudsites.cn) 或自定义域名。
函数应用的入站 IP 地址
每个函数应用都使用单个入站 IP 地址启动。 在消耗或高级计划中运行时,可能会添加其他入站 IP 地址,因为发生了事件驱动的横向扩展。 若要查找应用正在使用的入站 IP 地址,请使用本地计算机中的 nslookup
实用工具,如以下示例所示:
nslookup <APP_NAME>.chinacloudsites.cn
在此示例中,将 <APP_NAME>
替换为函数应用名称。 如果应用使用自定义域名,请改用 nslookup
作为该自定义域名。
函数应用的出站 IP 地址
每个函数应用具有一组可用的出站 IP 地址。 从某个函数发起的任何出站连接(例如,与后端数据库的连接)使用某个可用的出站 IP 地址作为源 IP 地址。 无法事先知道给定的连接要使用哪个 IP 地址。 因此,后端服务必须向函数应用的所有出站 IP 地址开放其防火墙。
提示
对于某些平台级功能(例如 Key Vault 引用),源 IP 可能不是出站 IP 之一,不应将目标资源配置为依赖于这些特定地址。 建议应用改用虚拟网络集成,因为平台将通过该网络将流量路由到目标资源。
查找函数应用可用的出站 IP 地址:
az functionapp show --resource-group <GROUP_NAME> --name <APP_NAME> --query outboundIpAddresses --output tsv
az functionapp show --resource-group <GROUP_NAME> --name <APP_NAME> --query possibleOutboundIpAddresses --output tsv
outboundIpAddresses
的集当前可供函数应用使用。 possibleOutboundIpAddresses
的集包括仅当函数应用缩放到其他定价层时才可用的 IP 地址。
注意
对按消耗计划或高级计划运行的函数应用进行缩放时,可能会分配新范围的出站 IP 地址。 在上述任一计划中运行时,不能依赖报告的出站 IP 地址来创建最终的允许列表。 为了能够包含动态缩放期间使用的所有潜在出站地址,需要将整个数据中心添加到允许列表。
数据中心出站 IP 地址
如果需要将函数应用使用的出站 IP 地址添加到允许列表,可以采用另一种做法,即,将函数应用的数据中心(Azure 区域)添加到允许列表。 可以下载列出所有 Azure 数据中心 IP 地址的 JSON 文件。 然后,找到应用于运行函数应用的区域的 JSON 片段。
例如,“中国北部 2”区域的允许列表可能会如以下 JSON 片段所示:
{
"name": "AzureChinaCloud.chinanorth2",
"id": "AzureChinaCloud.chinanorth2",
"properties": {
"changeNumber": 9,
"region": "chinanorth2",
"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 地址发生更改:
在标准和高级 v2 定价层之间纵向缩放应用服务计划。
等待 10 分钟。
缩放回到最初的层。
IP 地址限制
可以配置允许或拒绝其访问函数应用的 IP 地址列表。 有关详细信息,请参阅 Azure 应用服务静态 IP 限制。
专用 IP 地址
在函数应用需要静态专用 IP 地址时,可以探索多种策略。
用于出站静态 IP 的虚拟网络 NAT 网关
可以通过使用虚拟网络 NAT 网关引导流量通过静态公共 IP 地址,从而控制来自函数的出站流量的 IP 地址。 在高级计划或专用(应用服务)计划中运行时,可以使用此拓扑。 要了解详细信息,请参阅教程:使用 Azure 虚拟网络 NAT 网关控制 Azure Functions 出站 IP。
应用服务环境
若要对入站和出站的 IP 地址都进行完全控制,建议使用应用服务环境(应用服务计划的独立层)。 有关详细信息,请参阅应用服务环境 IP 地址。
确定函数应用是否在应用服务环境中运行:
az resource show --resource-group <GROUP_NAME> --name <APP_NAME> --resource-type Microsoft.Web/sites --query properties.sku --output tsv
应用服务环境的 sku
为“Isolated
”。
后续步骤
IP 发生更改的常见原因之一是函数应用的规模发生更改。 详细了解函数应用的缩放。