K8s创建mongo-express部署时Pod无法连接MongoDB问题求助
问题根因
- 错误日志中
getaddrinfo ENOTFOUND mongodb-service提示K8s集群DNS无法解析mongodb-service服务域名,核心问题是服务命名不匹配:- 你创建的MongoDB Service配置中
metadata.name为mongo-service - ConfigMap中配置的
database_url值为mongodb-service,和实际服务名不一致,导致mongo-express读取到错误的数据库连接地址。
- 你创建的MongoDB Service配置中
修复步骤
- 统一服务命名,任选一种修改方式即可:
- 方式一:修改ConfigMap配置,将
database_url的值改为实际的MongoDB服务名apiVersion: v1 kind: ConfigMap metadata: name: mongodb-configmap data: database_url: mongo-service - 方式二:修改MongoDB Service的
metadata.name为mongodb-service,和ConfigMap配置保持一致
- 方式一:修改ConfigMap配置,将
- 应用修改后的配置文件,示例命令:
kubectl apply -f <你的配置文件名> - 重启mongo-express Deployment让新配置生效:
kubectl rollout restart deployment mongo-express - 验证修复结果,待Pod重建完成后查看运行日志,出现
Mongo Express server listening at http://0.0.0.0:8081即为连接成功:kubectl logs <mongo-express新Pod名称>
附加排查点
如果修改命名后仍无法连接,可按以下步骤排查:
- 执行
kubectl get pods、kubectl get svc确认MongoDB相关Pod、Service处于正常运行状态 - 若mongo-express和MongoDB Service不在同一个命名空间下,需要使用
<服务名>.<命名空间>.svc.cluster.local的完整域名格式配置连接地址
内容的提问来源于stack exchange,提问作者Andy Xu
相关产品推荐
相关产品推荐

