You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

消费计划Azure Function无法访问跨租户Azure VM上的SQL数据库

问题排查与解决方案

针对跨租户场景下,采用消费计划的Azure Function无法连接绑定NSG的VM数据库的问题,按以下步骤逐一排查解决:

1. 补全Azure Function的出站IP范围

消费计划的Azure Function出站IP包含两类,仅添加静态IP会导致遗漏:

  • 从Function App -> Networking -> Outbound Traffic获取的静态出站IP地址
  • Function所在区域的Azure数据中心公共IP范围(需下载Azure官方IP范围文件,筛选对应区域的AzureCloud.<区域>条目)

将上述两类IP/IP范围全部添加到VM的NSG入站规则中,保持源IP、目标端口1433、TCP协议、允许操作的配置。

2. 检查NSG规则优先级

NSG规则按优先级数值从小到大执行(数值越小优先级越高),确保你的允许规则优先级高于任何拒绝1433端口的规则。例如将允许规则优先级设为100-1000之间,避免被默认拒绝规则(优先级65500)覆盖。

3. 验证VM操作系统防火墙配置

即使NSG放行流量,VM内部防火墙仍可能拦截请求:

  • Windows:打开Windows Defender防火墙,添加入站规则,允许TCP 1433端口,源为Function的出站IP/IP范围。
  • Linux:以ufw为例,执行ufw allow from <Function出站IP/范围> to any port 1433 proto tcp,或配置对应iptables规则。

4. 确认SQL Server配置

  • 打开SQL Server配置管理器,确保TCP/IP协议已启用,且监听端口为1433。
  • 在SSMS中右键服务器 -> 属性 -> 连接,勾选"允许远程连接到此服务器"。
  • 验证SQL登录账号允许从Function的IP范围访问(测试阶段可临时设为%,正式环境需限制具体IP)。

5. 测试端口连通性

在Function中添加测试代码,判断是网络层还是SQL层问题:

using System.Net.Sockets;
using Microsoft.AspNetCore.Mvc;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    string vmIp = req.Query["vmIp"];
    int port = 1433;
    using (TcpClient client = new TcpClient())
    {
        try
        {
            await client.ConnectAsync(vmIp, port);
            return new OkObjectResult("1433端口连通正常");
        }
        catch (Exception ex)
        {
            return new BadRequestObjectResult($"端口连接失败: {ex.Message}");
        }
    }
}

6. 检查VM子网路由表

若VM所在子网关联了自定义路由表,确认没有规则将Function的出站IP流量转发至不可达节点(如未配置的防火墙或对等连接)。


内容的提问来源于stack exchange,提问作者Sergiu Molnar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:35:20