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

如何让Kubernetes集群访问外部IP以连接SQL服务器?

解决Kubernetes集群访问外部本地IP的方法

1. 先验证节点层面的连通性

直接在K8s集群的节点(而非Pod)上ping SQL服务器的IP:

  • 如果节点也ping不通,问题出在节点的网络配置:
    • 查看节点路由表:执行 ip route,确认是否存在指向SQL服务器所在网段的路由条目
    • 检查节点防火墙:Ubuntu用ufw status,CentOS/RHEL用firewall-cmd --list-all,确保允许节点访问SQL服务器的IP和默认端口1433

2. 排查Pod的网络路由

如果节点能ping通但Pod不行,重点检查CNI插件和Pod网络配置:

  • 进入目标Pod执行 ip route,查看是否有指向本地网段的路由,或默认网关是否正确指向集群网络的网关
  • 检查CNI插件(如Calico、Flannel)的规则,确认没有拦截Pod访问本地网段的策略

3. 检查Kubernetes网络策略

若集群启用了网络策略,可能存在出站拦截规则:

  • 列出所有网络策略:kubectl get networkpolicies --all-namespaces
  • 若存在限制,可添加允许Pod访问SQL服务器的策略(替换占位符为你的实际配置):
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-sql-access
      namespace: your-api-namespace
    spec:
      podSelector:
        matchLabels:
          app: your-api-app
      policyTypes:
      - Egress
      egress:
      - to:
        - ipBlock:
            cidr: 192.168.x.x/32  # SQL服务器的IP
        ports:
        - protocol: TCP
          port: 1433
    

4. 调整Docker Desktop的网络设置

因为你使用Docker Desktop搭建K8s,它的集群可能有独立网络栈:

  • 打开Docker Desktop设置,进入Resources > Network,确认Allow the default Docker socket to be used by Kubernetes已启用
  • 检查Docker的子网是否和SQL服务器所在本地子网冲突,若冲突,修改daemon.json文件添加bip参数指定不冲突的子网

5. 配置SQL服务器的防火墙规则

确保SQL服务器所在机器允许K8s集群的流量:

  • Windows系统:添加防火墙入站规则,允许K8s节点/Pod网段访问TCP 1433端口
  • Linux系统:执行ufw allow from <k8s-node-subnet> to any port 1433(或对应防火墙命令)

6. 确认SQL服务器的远程访问配置

  • 在SQL Server配置管理器中启用TCP/IP协议,设置监听所有IP或本地IP
  • 重启SQL服务后,用netstat -ano | findstr :1433(Windows)或ss -tulpn | grep 1433(Linux)确认端口处于监听状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:10:13