Google计算引擎MongoDB无法通过Java驱动程序连接

Google计算引擎MongoDB无法通过Java驱动程序连接,java,mongodb,google-compute-engine,Java,Mongodb,Google Compute Engine,我创建了一个新项目并单击部署MongoDB计算实例 MongoClient mongoClient = new MongoClient(EXTERNAL_IP); List<String> dbs = mongoClient.getDatabaseNames(); for(String db : dbs){ System.out.println(db); } 我将主VM实例设置为允许HTTP通信 然后在eclipse中,我编写了以下代码来确定是否可以连接到MongoDB实

我创建了一个新项目并单击部署MongoDB计算实例

MongoClient mongoClient = new MongoClient(EXTERNAL_IP);

List<String> dbs = mongoClient.getDatabaseNames();
for(String db : dbs){
    System.out.println(db);
}
我将主VM实例设置为允许HTTP通信

然后在eclipse中,我编写了以下代码来确定是否可以连接到MongoDB实例

MongoClient mongoClient = new MongoClient(EXTERNAL_IP);

List<String> dbs = mongoClient.getDatabaseNames();
for(String db : dbs){
    System.out.println(db);
}
然后,我尝试在Google Compute的默认网络中打开端口27017,然后我就可以接通MongoDb了

这是获得连接的正确方法吗


我担心它会允许任何人访问数据库,并弄乱其中存储的信息。我假设我打算将我的应用程序放在compute engine上同一网络空间的VM实例中,并使用内部IP进行连接。

而GCE实例几乎可以不受限制地访问internet(SMTP是最大的例外),以便允许传入连接,需要在正在使用的网络上设置适当的防火墙规则,正如您所做的那样。您可以通过为这些MongoDB连接指定源IP和端口,以及在虚拟机上使用标签,在防火墙规则的目标部分指定这些相同的标签,进一步微调访问规则,从而进一步限制仅对具有该标签的虚拟机组的访问。虽然在谷歌云平台上托管应用程序可以提高性能,但这绝不是使用环境的先决条件


此外,您始终可以设置更安全的连接方式,如VPN等。

外部IP的值是多少?可以通过ping访问吗?您肯定不想向世界公开您的MongoDB副本集。如果您的应用程序是从固定/已知IP远程连接的,您可能希望限制通过防火墙的访问,理想情况下使用加密连接(VPN适用于连接副本集),并在MongoDB实例上启用身份验证。有关最佳做法(包括示例防火墙配置)的更多信息,请参阅MongoDB手册的安全部分:。您的应用程序在哪里运行。。在Google Compute上的另一个虚拟机上?通过ping可以访问外部IP。@Stennie谢谢你的评论,我将阅读有关安全性的文章。回答你的问题:我希望有一天能让这个应用程序在虚拟机上运行。我知道在这种情况下,我将能够使用内部IP连接到MongoDB VW实例。我的编码优势在于Java应用程序开发,这意味着我的应用程序最像是在客户端pc上运行的jar可执行文件。第二次迭代可以在web服务器上运行。目前,最快的代码发布方法是坚持我所知道的。这只是为了开发目的而设置的,还是你的桌面应用程序会有其他用户?对于到独立远程MongoDB服务器的开发连接,SSH隧道可能是最方便的安全连接方式,而无需打开数据库端口。如果部署需要连接到多个节点(即副本集或分片群集),则VPN将更容易。如果您需要允许最终用户从应用程序进行连接,您可能希望创建端点/API,而不是提供对数据库的直接访问。