一个虚拟机上的 VMware Grails 应用程序无法访问另一个虚拟机上的 MongoDB

一个虚拟机上的 VMware Grails 应用程序无法访问另一个虚拟机上的 MongoDB

我在 VMware 云中拥有两台虚拟机,它们属于同一个 VApp,因此位于同一个边缘网关后面。它们都有自己不同的内部 IP 地址,但我使用边缘网关的 IP 地址和端口组合将服务从外部路由到它们。我在一台虚拟机上运行了一个 Grails 应用程序,该应用程序需要与 MongoDB 实例一起工作。我让该 MongoDB 实例作为服务在另一台虚拟机上运行。问题是,当 Grails 应用程序启动时,它无法使用边缘网关的 IP 地址和端口 27017 连接另一台虚拟机上的 MongoDB 实例。

我有一个适当的 NAT 规则来将此类请求转发到同一端口 27017 上具有 MongoDB 的 VM。我还设置了适当的防火墙规则。

一些有用的诊断信息,Grails 应用程序可以成功联系我在 Amazon Web Services 云上运行的另一个 MongoDB 实例。

如果我在本地机器上运行 Robomongo(MongoDB GUI 客户端),它可以成功联系在我的 VMware VM 上运行的 MongoDB 实例。

我无法在一个虚拟机上的 Grails 应用程序和另一个虚拟机上的 MongoDB 之间建立联系。我的 Grails 应用程序收到错误消息,提示无法找到 MongoDB。

编辑:我还发现,如果从我的本地 Linux 机器上,我在提示符下输入以下内容:

telnet [vmwareEdgeGateway's IP] 27017

它会建立连接。我希望这能证明我的 NAT 和防火墙设置配置正确。

答案1

我通过使用运行 MongoDB 的虚拟机的内部 IP 地址解决了这个问题。而不是使用边缘网关的 IP 地址来访问它。那些比我聪明的人也建议我,这也是一种更安全的方法。我只是想把答案贴出来,以防将来有人来寻求这个主题的帮助。

相关内容