Kubernetes集群中.NET Core Web API无法连接SQL Server实例求助
排查点汇总
基础配置错误
- 配置键拼写错误:appsettings.json中的连接字符串根键名错误,ASP.NET Core默认读取的连接字符串配置键为
ConnectionStrings,你的配置中写为ConnectionsStrings多了一个s,会直接导致程序无法读取到正确的连接字符串。 - CPU资源配置异常:Deployment中MSSQL容器的CPU limits配置为
"100",和requests的100m(0.1核)差距极大,大概率是手误漏写了单位m,异常的CPU限制会导致MSSQL实例启动卡顿甚至资源不足崩溃,无法响应连接请求。
集群内部访问失败排查
- 集群内访问MSSQL不需要使用LoadBalancer的公网IP,直接使用K8s Service的集群内域名即可,连接字符串的Server参数改为
mssql-deployment.default.svc.cluster.local,1433即可,使用公网IP可能触发集群网络回环、SNAT策略限制导致连接失败。 - 执行
kubectl get pods -l app=mssql确认MSSQL Pod处于Running状态,若状态为CrashLoopBackOff,执行kubectl logs <MSSQL Pod名称>查看启动日志,检查是否为SA密码不符合复杂度要求(MSSQL要求SA密码至少8位,包含大小写、数字、特殊字符,复杂度不足会直接启动失败)。 - 执行
kubectl get endpoints mssql-deployment确认Service正确绑定了后端Pod的IP,若ENDPOINTS列为空,说明Service的selector和Pod的label不匹配,需核对两侧的app: mssql标签是否一致。 - 确认集群没有配置限制跨Pod访问的NetworkPolicy,若存在网络策略,需开放1433端口的入站规则给Web API所在的Pod。
- 进入Web API的Pod中执行
nc -zv mssql-deployment.default.svc.cluster.local 1433测试端口连通性,端口不通先排查集群网络插件故障。
外部访问失败排查
- 执行
kubectl get svc mssql-deployment确认LoadBalancer类型的Service已经分配到了正常的EXTERNAL-IP,若EXTERNAL-IP为Pending状态,说明你的集群不支持LoadBalancer(裸机集群需预先安装MetalLB等组件),无法通过公网IP访问。 - 确认集群节点防火墙、云服务商安全组已经放开1433端口的入站访问规则。
- 连接字符串补充
TrustServerCertificate=True参数,MSSQL默认使用自签名证书,客户端未信任该证书时会直接拒绝连接。
内容的提问来源于stack exchange,提问作者Aziz Gaamouz
相关产品推荐
相关产品推荐

