集成到 VNET 后无法连接到 Azure Function App

Ger*_*een 2 sql-server azure vnet azure-function-app azure-private-dns

问题大纲

Azure Function App 集成到 VNET 后无法访问,并且 WEBSITE_VNET_ROUTE_ALL 设置为 1。

这是必需的,以便 Function App 可以安全地连接到 SQL,而无需公开 SQL。

错误:

无法列出功能应用程序键。

在此处输入图片说明

来自同一网络中 VM 的 HTTP 请求 (CURL) 失败:504 网关超时

在此处输入图片说明

架构图

在此处输入图片说明

重现步骤

  1. 创建资源组
  2. 创建具有 10.20.11.0/26 地址空间的 VNET
  3. 为Function App创建子网集成到地址范围10.20.11.0/27
  4. 创建一个 Linux Function App 并集成到您在步骤 2 中创建的 VNET 中。
  5. 看到 App 键仍然正常加载。
  6. 为数据库创建一个地址范围为 10.20.11.32/27 的子网
  7. 创建 SQL Server 和 SQL 数据库。
  8. 在数据库上创建带有 DNS 区域的私有链接并限制公共访问。
  9. 将 DNS 区域链接到在步骤 2 中创建的 VNET。
  10. 函数应用将 SQL 私有链接解析为公共 IP 地址。
  11. 在 Function App 配置中,添加一个 Application 设置 WEBSITE_VNET_ROUTE_ALL 并将其设置为 1。
  12. 看到函数应用程序现在将 SQL 私有链接解析为私有 IP 地址
  13. 看到 Function App 键没有加载。
  14. 尝试通过来自网络或公共链接的连接连接到 Azure Functions。
  15. 看到函数应用网关超时。

通过 SSH 连接到 Function App 并使用 nslookup,我们确定与私有链接的连接按预期解析了 SQL 数据库的本地 IP 地址。

将 WEBSITE_VNET_ROUTE_ALL 标志设置为 0,nslookup 将解析 SQL 数据库的公共 IP。

由于 SQL 数据库受到限制并且只能在网络上使用,因此将 WEBSITE_VNET_ROUTE_ALL 设置设为 1 至关重要。

WEBSITE_VNET_ROUTE_ALL = 1

在此处输入图片说明

WEBSITE_VNET_ROUTE_ALL = 0

在此处输入图片说明

参考

https://docs.microsoft.com/en-us/azure/app-service/web-sites-integrate-with-vnet

Ger*_*een 5

这已通过向函数应用子网添加“Microsoft.Storage”服务终结点解决。

当所有流量都发送到 vnet 时,它需要一个到 Storage 的服务端点,以便它可以读取 Function App 配置和函数。

  1. 导航到您的虚拟网络资源
  2. 在侧边菜单中,在设置下,选择“服务端点”
  3. 点击“添加”
  4. 从服务下拉菜单中选择“Microsoft.Storage”
  5. 如果需要,添加策略(我没有在这里选择任何策略)
  6. 关联函数应用子网
  7. 添加。

  • @CB_Ron 我添加了更多细节。希望能帮助到你。 (2认同)