首页 > 解决方案 > 集成到 VNET 后无法连接到 Azure Function App

问题描述

问题大纲

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

这是必需的,以便函数应用可以安全地连接到 SQL,而无需公开 SQL。

错误:

无法列出函数应用键。

在此处输入图像描述

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

在此处输入图像描述

架构图

在此处输入图像描述

重现步骤

  1. 创建资源组
  2. 创建具有 10.20.11.0/26 地址空间的 VNET
  3. 为函数应用程序创建一个子网以集成到地址范围为 10.20.11.0/27
  4. 创建一个 Linux Function App 并集成到您在步骤 2 中创建的 VNET。
  5. 看到应用程序键仍然正常加载。
  6. 为数据库创建一个子网,地址范围为 10.20.11.32/27
  7. 创建 SQL Server 和 SQL 数据库。
  8. 在数据库上创建带有 DNS 区域的专用链接并限制公共访问。
  9. 将 DNS 区域链接到在步骤 2 中创建的 VNET。
  10. 函数应用将 SQL 专用链接解析为公共 IP 地址。
  11. 在 Function App 配置中,添加应用程序设置 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

标签: sql-serverazureazure-function-appvnetazure-private-dns

解决方案


这已通过将“Microsoft.Storage”服务终结点添加到 Function App 子网来解决。

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

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

推荐阅读