我只使用基本的mongo:3.6.4官方坞映像创建了一个Mongo容器,并将其部署到我的OpenShift OKD集群中,但无法使用来自集群外部的Mongo客户机连接到这个MongoDB实例。
我可以在http://mongodb.my.domain上访问MongoDB,并成功地获得“看起来您试图在本地驱动程序端口上通过HTTP访问MongoDB”。消息。
当在吊舱上使用终端时,我可以成功地登录使用: mongo "mongodb://mongoadmin:pass@localhost“--身份验证数据库管理
但是当试图从OKD外部连接时,连接失败。
我的客户端需要通过代理才能访问OKD文件,我确实有一个.der证书文件,但我不确定这是否与问题有关。
我尝试过一些命令:
mongo "mongodb://mongoadmin:pass@mongodb.my.domain:80“-认证数据库管理
mongo -ssl "mongodb://mongoadmin:pass@mongodb.my.domain:80“--认证数据库管理
我希望能够成功地连接,但是却得到了以下错误消息:
MongoDB shell version v3.4.20
connecting to: mongodb://mongoadmin:pass@mongodb.my.domain:80
2019-05-15T11:32:25.514+0100 I NETWORK [thread1] recv(): message len 1347703880 is invalid. Min 16 Max: 48000000
2019-05-15T11:32:25.514+0100 E QUERY [thread1] Error: network error while attempting to run command 'isMaster' on host 'mongodb.my.domain:80' :
connect@src/mongo/shell/mongo.js:240:13
@(connect):1:6
exception: connect failed我不确定我是如何使用我的MongoDB客户端,还是在我的OKD集群中可能存在一些代理设置的问题。任何帮助都将不胜感激。
发布于 2019-05-15 13:06:26
这里的问题是外部OpenShift路由在处理数据库连接方面不是很好。当您试图通过该路由连接到蒙古舱时,该路由将接受该连接并将您的连接传输到Mongo服务。我相信这种传输将连接封装在HTTP包装中,而Mongo不喜欢处理这个包装。OKD文件强调基于路径的路由流量应该是基于HTTP的,这将导致连接失败。
当试图连接到MongoDB数据库时,您可以看到这方面的证据,并返回“看起来您试图通过HTTP访问本机驱动程序端口上的MongoDB”。到浏览器上。用户relief.malone解释了这一点,并在他们对这个问题的回答中提出了一些解决方案/解决方案。
为了补充relief.mone的答案,我建议您从MongoDB吊舱转发到本地机器进行开发/调试。在生产中,您可以将一个应用程序部署到OKD,该应用程序通过它的内部DNS名称引用MongoDB服务,该名称将类似于以下内容:mongodb.project_namespace.svc:27017。这样,您将避免路由干扰连接。
关于端口转发这不是信息吗?的Openshift OKD文档,但是,由于oc在幕后运行kubectl命令,您可以阅读这是库伯奈特斯指南以获得更多信息。
https://stackoverflow.com/questions/56147657
复制相似问题