【问题标题】:Unable to connect to mongo atlas using Kubernetes service无法使用 Kubernetes 服务连接到 mongo atlas
【发布时间】:2021-10-23 23:18:36
【问题描述】:

我可以使用 uri 连接到 mongodb atlas:mongodb+srv://username:password@cluster0.q2w3e.mongodb.net/myFirstDatabase?retryWrites=true&w=majority

现在,我想通过外部服务连接。

这是我的服务定义:

apiVersion: v1
kind: Service
metadata:
  name: mongo-atlas
spec:
  ports:
    - port: 80
      protocol: TCP
      targetPort: 80
  type: ExternalName
  externalName: "cluster0.p9jq2.mongodb.net"
And I changed spring.data.mongodb.uri to mongodb+srv://username:password@mongo-atlas/myFirstDatabase?retryWrites=true&w=majority

但原因是:javax.naming.NameNotFoundException: DNS name not found

有人可以帮我解决这个问题吗?

【问题讨论】:

  • cluster0.p9jq2.mongodb.net 是一个有效的 CNAME,nslookup cluster0.p9jq2.mongodb.net 的输出是什么?
  • mongodb+srv 将为_mongodb._tcp.cluster0.p9jq2.mongodb.net 的SRV 记录和cluster0.p9jq2.mongodb.net 的TXT 记录进行DNS 查找。我不知道是否可以使用 CNAME 重定向。
  • @Joe 那我应该怎么给这个?
  • 使用mongodb://这种连接字符串可能更容易,所以主机名被解析为A记录。不知道怎么让k8s解析SRV

标签: mongodb spring-boot kubernetes mongodb-atlas


【解决方案1】:

javax.naming.NameNotFoundException: DNS name not found

这实际上是正确的,因为 TXT 记录可解析但无法访问。它旨在让驱动程序执行主机发现。这种方式允许后端更改,而无需您更改连接字符串。

通常,连接字符串可以保存在 ConfigMap 中并作为配置文件挂载到您的 pod。在这种情况下,您不需要 ExternalService 来执行 CNAME 查找。

【讨论】:

    猜你喜欢
    • 2021-09-01
    • 2020-12-25
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2020-09-01
    相关资源
    最近更新 更多