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

Kubernetes Pod连接MongoDB实例超时问题求助

问题排查:K3s集群Pod无法连接MongoDB(自建/托管)

环境信息

  • Kubernetes集群:基于kube-hetzner在Hetzner搭建,Server Version: v1.26.4+k3s1
  • Client Version: v1.26.3
  • Mongosh版本:1.8.1
  • 核心现象:Pod内可正常ping 8.8.8.8、发起curl请求,但连接MongoDB(自建Docker部署或MongoDB Atlas托管)均报错:
    MongoServerSelectionError: Server selection timed out after 30000 ms
    
    本地使用相同连接串可通过MongoDB Compass/mongosh正常连接。

排查与解决步骤

1. 校验MongoDB的访问权限

  • MongoDB Atlas:检查集群IP白名单是否包含K3s集群所有节点的公网IP,测试阶段可临时允许0.0.0.0/0(生产环境不建议),排除白名单拦截问题。
  • 自建MongoDB:
    • 检查mongod.conf中的bindIp配置,确认是否设置为0.0.0.0(允许所有IP访问),默认可能仅绑定127.0.0.1导致外部无法连接。
    • 检查宿主机防火墙(ufw/iptables)是否开放MongoDB默认端口27017,确保集群节点IP能访问该端口。

2. 验证端口连通性(TCP层面)

ping仅验证ICMP协议,需用nc或telnet测试TCP端口是否可达:

# 针对MongoDB Atlas:先解析SRV记录,再测试节点端口
nslookup -type=SRV _mongodb._tcp.cluster0.fdofntt.mongodb.net
nc -zv cluster0-shard-00-00.fdofntt.mongodb.net 27017

# 针对自建MongoDB
nc -zv <自建MongoDB_IP> 27017

若端口不通,回到第一步排查防火墙/白名单配置。

3. 检查K3s网络策略

kube-hetzner默认可能配置网络策略,或自定义策略限制了Pod出站流量:

kubectl get networkpolicies --all-namespaces

若存在阻止Pod访问27017端口的规则,需修改策略添加允许出站的规则。

4. 确认DNS解析正常

测试Pod内是否能正常解析MongoDB域名:

nslookup cluster0.fdofntt.mongodb.net

若解析失败,检查CoreDNS运行状态:

kubectl get pods -n kube-system -l k8s-app=kube-dns

若CoreDNS异常,重启相关Pod或排查集群DNS配置。

5. 核对连接串正确性

  • SRV连接串:确认格式无拼写错误,mongosh 1.8.1支持SRV格式,但需确保域名解析正常。
  • 自建MongoDB连接串:若开启认证,需指定authSource(如使用admin用户时添加?authSource=admin):
    mongosh mongodb://<user>:<password>@<ip>:27017/test?authSource=admin
    

6. 检查Hetzner服务器出站规则

Hetzner默认开放出站流量,但如果集群使用了kube-hetzner自带的防火墙模块,需在Hetzner控制台确认是否允许TCP 27017端口的出站请求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:57:27