【发布时间】:2022-08-08 17:53:39
【问题描述】:
我有一个 k8s 开发集群(在 aks 中)。我之前使用 bitnami 图表来部署单个 MongoDB pod,但我从未遇到过以下问题。
由于我现在使用的功能仅适用于副本集,因此我最近开始使用 MongoDBCommunity Operator 来创建在其自己的命名空间(在 dev 中)运行的单实例 MongoDB 副本集。我的应用程序正在毫无问题地连接和使用这个实例,我的新功能就像做梦一样。
$ k get pods -n db
NAME READY STATUS RESTARTS AGE
mongodb-kubernetes-operator-748c85557-bffz5 1/1 Running 0 2d16h
nga-mongodb-0 2/2 Running 0 2d19h
现在我想在 vscode 中使用 MongoDB 扩展来帮助调试,这就是问题所在。正如我所提到的,使用 bitnami 图表我没有问题——我提供了 db 连接字符串,它就可以工作了。
当我尝试对这个新部署执行相同操作时,虽然我收到以下错误:
getaddrinfo ENOTFOUND nga-mongodb-0.nga-mongodb-svc.db.svc.cluster.local
操作员创建一个包含 2 种形式的连接字符串的秘密,用于服务和 pod,两者都给出相同的错误
服务端:
mongodb+srv://username:password@nga-mongodb-svc.db.svc.cluster.local/admin?ssl=false
荚:
mongodb://username:password@nga-mongodb-0.nga-mongodb-svc.db.svc.cluster.local:27017/admin?ssl=false
我注意到这些字符串都不包含副本名称,我觉得这很奇怪,但是我在我的应用程序中使用了基于 svc 的字符串,它工作正常,因此在端口转发时应该可以正常工作。
我的端口转发语句非常基本:
k port-forward -n db nga-mongodb-0 27017:27017
如果我尝试curl localhost:27017,我会收到预期的消息
It looks like you are trying to access MongoDB over HTTP on the native driver port.
这确实表明我有一个工作端口转发器。
我使用的连接字符串(假设是 pod 连接字符串)然后更改为:
mongodb://username:password@localhost:27017/admin?ssl=false
我怀疑,但不知道,副本集正在尝试将客户端转发到主节点(如果我使用 pod 连接字符串,我已经连接到主节点)并且正在发送一个不能很好翻译的 kubernetes URL通过端口转发方法。所以,我怀疑这是运营商所做的奇怪的事情。
有没有其他人真正得到这个工作或知道如何让它工作?
-
很抱歉来自 SO 的奇怪的代码突出显示:)
-
spring.data.mongodb.uri=mongodb://mongo-service:27017/test我在 sprint 和 mongodb 中使用的是什么,它在有状态的情况下运行良好,你使用的是 operator 吗? -
@HarshManvar - 您的机器如何解析“mongo-service”主机?此外,这不是连接问题——它工作正常,这是一个副本集 => 端口转发问题。
-
哦,好吧,我正在尝试在同一个 k8s 集群上运行服务,以便它可以轻松解决,但是我没有尝试将端口转发到副本。
标签: mongodb kubernetes portforwarding replicaset mongodb-replica-set