sql-server - 集成到 VNET 后无法连接到 Azure Function App
问题描述
问题大纲
Azure Function App 一旦集成到 VNET 并且 WEBSITE_VNET_ROUTE_ALL 设置为 1,就无法访问。
这是必需的,以便函数应用可以安全地连接到 SQL,而无需公开 SQL。
错误:
无法列出函数应用键。
来自同一网络中 VM 内的 HTTP 请求 (CURL) 失败:504 网关超时
架构图
重现步骤
- 创建资源组
- 创建具有 10.20.11.0/26 地址空间的 VNET
- 为函数应用程序创建一个子网以集成到地址范围为 10.20.11.0/27
- 创建一个 Linux Function App 并集成到您在步骤 2 中创建的 VNET。
- 看到应用程序键仍然正常加载。
- 为数据库创建一个子网,地址范围为 10.20.11.32/27
- 创建 SQL Server 和 SQL 数据库。
- 在数据库上创建带有 DNS 区域的专用链接并限制公共访问。
- 将 DNS 区域链接到在步骤 2 中创建的 VNET。
- 函数应用将 SQL 专用链接解析为公共 IP 地址。
- 在 Function App 配置中,添加应用程序设置 WEBSITE_VNET_ROUTE_ALL 并将其设置为 1。
- 看到函数应用程序现在将 SQL 私有链接解析为私有 IP 地址
- 看到 Function App 键未加载。
- 尝试通过来自网络或公共链接的连接连接到 Azure Functions。
- 看到函数应用网关超时。
通过 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
解决方案
这已通过将“Microsoft.Storage”服务终结点添加到 Function App 子网来解决。
当所有流量都发送到 vnet 时,它需要一个服务端点到存储,以便它可以读取 Function App 配置和功能。
- 导航到您的虚拟网络资源
- 在侧边菜单的“设置”下,选择“服务端点”
- 点击“添加”
- 从服务下拉列表中选择“Microsoft.Storage”
- 如果需要,添加策略(我在这里没有选择任何策略)
- 关联 Function App 子网
- 添加。
推荐阅读
- java - 致命异常:主要 java.lang.NoClassDefFoundError:android.media.AudioAttributes$Builder
- r - 删除了包含非有限值的 N 行 (stat_pie)
- android - 如何在底部应用栏中关闭工厂?
- php - 在 memcached 重新启动后,Libmemached 滞后未从服务器获取缓存值
- c# - CheckBox 根据选定对象的值创建一个字符串
- pandas - 如何对具有多个索引的 pnadas 数据框进行计算?
- python - Python:如何将字符串与列表分开
- python - 在 Flask 应用程序中通过 jquery (getjson) 在字典中发送 Plotly 图表
- ios - 未找到 -lRNAppleAuthentication react-native iOS 的库
- node.js - Node js获取请求IP不返回任何内容