集成到 VNET 后无法连接到 Azure Function App
Unable to connect to Azure Function App after integrating into VNET
问题大纲
Azure Function App 集成到 VNET 并且 WEBSITE_VNET_ROUTE_ALL 设置为 1 后无法访问。
这是必需的,以便 Function App 可以安全地连接到 SQL 而无需使 SQL public 可用。
错误:
无法列出功能应用程序键。
同一网络中 VM 内的 HTTP 请求 (CURL) 失败:504 网关超时
架构图
重现步骤
- 创建资源组
- 创建地址为 10.20.11.0/26 的 VNET space
- 为函数应用创建一个子网以集成地址
范围 10.20.11.0/27
- 创建一个Linux Function App并集成到您创建的VNET中
在第 2 步中。
- 看到应用程序密钥仍然正常加载。
- 为数据库创建一个子网,地址范围为
10.20.11.32/27
- 创建 SQL 服务器和 SQL 数据库。
- 在数据库上使用 DNS 区域创建私有 Link 并限制
public访问。
- Link 在步骤 2 中创建的 VNET 的 DNS 区域。
- 函数应用将 SQL 私有 link 解析为 public IP 地址。
- 在Function App配置中,添加一个Application设置
WEBSITE_VNET_ROUTE_ALL 并将其设置为 1。
- 看到函数应用现在将 SQL 私有 link 解析为私有 IP
地址
- 看到功能应用程序键未加载。
- 尝试通过来自
网络或来自 public link.
- 看到函数应用网关超时。
通过 SSH 连接到 Function App 并使用 nslookup,我们确定与私有 link 的连接按预期解析了 SQL 数据库的本地 IP 地址。
将 WEBSITE_VNET_ROUTE_ALL 标志设置为 0,nslookup 解析 SQL 数据库的 public 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
已通过向 Function App 子网添加“Microsoft.Storage”服务端点解决此问题。
当所有流量都发送到 vnet 时,它需要一个到存储的服务端点,以便它可以读取 Function App 配置和功能。
- 导航到您的虚拟网络资源
- 在侧面菜单的“设置”下,select“服务端点”
- 点击“添加”
- Select 服务下拉列表中的“Microsoft.Storage”
- 根据需要添加政策(我没有在此处 select 任何政策)
- 关联Function App子网
- 添加。
问题大纲
Azure Function App 集成到 VNET 并且 WEBSITE_VNET_ROUTE_ALL 设置为 1 后无法访问。
这是必需的,以便 Function App 可以安全地连接到 SQL 而无需使 SQL public 可用。
错误:
无法列出功能应用程序键。
同一网络中 VM 内的 HTTP 请求 (CURL) 失败:504 网关超时
架构图
重现步骤
- 创建资源组
- 创建地址为 10.20.11.0/26 的 VNET space
- 为函数应用创建一个子网以集成地址 范围 10.20.11.0/27
- 创建一个Linux Function App并集成到您创建的VNET中 在第 2 步中。
- 看到应用程序密钥仍然正常加载。
- 为数据库创建一个子网,地址范围为 10.20.11.32/27
- 创建 SQL 服务器和 SQL 数据库。
- 在数据库上使用 DNS 区域创建私有 Link 并限制 public访问。
- Link 在步骤 2 中创建的 VNET 的 DNS 区域。
- 函数应用将 SQL 私有 link 解析为 public IP 地址。
- 在Function App配置中,添加一个Application设置 WEBSITE_VNET_ROUTE_ALL 并将其设置为 1。
- 看到函数应用现在将 SQL 私有 link 解析为私有 IP 地址
- 看到功能应用程序键未加载。
- 尝试通过来自 网络或来自 public link.
- 看到函数应用网关超时。
通过 SSH 连接到 Function App 并使用 nslookup,我们确定与私有 link 的连接按预期解析了 SQL 数据库的本地 IP 地址。
将 WEBSITE_VNET_ROUTE_ALL 标志设置为 0,nslookup 解析 SQL 数据库的 public 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
已通过向 Function App 子网添加“Microsoft.Storage”服务端点解决此问题。
当所有流量都发送到 vnet 时,它需要一个到存储的服务端点,以便它可以读取 Function App 配置和功能。
- 导航到您的虚拟网络资源
- 在侧面菜单的“设置”下,select“服务端点”
- 点击“添加”
- Select 服务下拉列表中的“Microsoft.Storage”
- 根据需要添加政策(我没有在此处 select 任何政策)
- 关联Function App子网
- 添加。