Azure专用端点问题:另一VNet的Azure函数无法连接Azure SQL数据库
排查启用Route All的VNet中Azure函数无法连接私有端点Azure SQL的问题
核心问题定位
从你提供的测试结果来看,nameresolver返回SQL实例的公网IP,但SQL已拒绝公网访问,这说明函数应用的DNS解析未指向SQL专用端点的私有IP,是连接失败的核心原因。以下是具体排查步骤:
1. 检查函数应用的VNet集成DNS设置
- 启用Route All的Azure Functions默认使用Azure公共DNS(168.63.129.16),而公共DNS无法解析SQL专用端点的私有IP。需确认函数应用的虚拟网络集成配置中,是否开启了“使用虚拟网络的DNS服务器”,或手动指定了能解析私有DNS的服务器IP。
- 若函数所在VNet关联了Azure专用DNS区域,必须让函数应用使用该VNet的DNS配置,才能正确解析SQL的FQDN到私有IP。
2. 验证SQL专用端点的DNS关联
- 确认Azure SQL的专用端点已关联
privatelink.database.windows.net类型的Azure专用DNS区域,且该DNS区域已与函数所在的VNet建立链接(在专用DNS区域的“虚拟网络链接”中查看)。 - 检查专用DNS区域内的A记录:是否存在对应SQL实例的条目,其值为专用端点的私有IP。若缺失,需重新创建专用端点或手动添加记录。
3. 修正函数应用的DNS配置
- 在函数应用的配置中,添加或修改以下应用设置:
WEBSITE_DNS_SERVER:设置为私有DNS服务器的IP(若用Azure专用DNS区域,可使用Azure DNS的私有IP,或VNet内的自定义DNS服务器)- 确认
WEBSITE_VNET_ROUTE_ALL=1已正确配置(你已启用Route All,需确保该值存在)
- 修改后重启函数应用,再次用
nameresolver测试,查看是否返回私有IP。
4. 验证网络流量路径与NSG规则
- 虽然
tcpping显示1433端口可通,但需确认流量实际走VNet内部而非公网:可通过Azure Monitor的网络流量分析,查看函数到SQL的连接目标IP是否为专用端点的私有IP。 - 检查函数所在子网的NSG出站规则:是否允许到SQL专用端点子网的1433端口流量;同时检查SQL专用端点所在子网的NSG入站规则:是否允许来自函数子网的1433端口流量。
5. 手动测试私有DNS解析
- 在函数的Kudu控制台中,执行指定DNS服务器的解析测试:
若返回私有IP,说明DNS服务器正常,问题出在函数应用的DNS配置;若仍返回公网IP,需排查专用DNS区域的链接或记录是否正确。nslookup <你的SQL实例FQDN> <私有DNS服务器IP>
6. 确认专用端点与VNet权限
- 检查SQL专用端点的状态是否为“已批准”,未批准的端点无法正常提供服务。
- 确认函数所在的VNet子网是否被添加到SQL实例的虚拟网络规则中(虽然专用端点优先,但部分场景下仍需配合VNet规则放行流量)。
内容的提问来源于stack exchange,提问作者David Baker
相关产品推荐
相关产品推荐

