谷歌计算引擎MongoDB通过Java驱动程序连接时出现问题

时间:2015-01-18 22:12:52

标签: java mongodb google-compute-engine

我创建了一个新项目,然后单击以部署MongoDB Compute实例。

我将主虚拟机实例设置为允许HTTP流量。

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

MongoClient mongoClient = new MongoClient(EXTERNAL_IP);

List<String> dbs = mongoClient.getDatabaseNames();
for(String db : dbs){
    System.out.println(db);
}

EXTERNAL_IP常量是从计算引擎中的VM列表中复制的IP地址。

我收到了以下异常:

Exception in thread "AWT-EventQueue-0" com.mongodb.MongoTimeoutException: Timed out after 10000 ms while waiting to connect. Client view of cluster state is {type=Unknown, servers=[{address=EXTERNAL_IP:27017, type=Unknown, state=Connecting, exception={com.mongodb.MongoException$Network: Exception opening the socket}, caused by {java.net.ConnectException: Connection refused: connect}}]

然后我尝试在Google Compute的默认网络中打开端口27017,我就可以通过MongoDb了。

获取连接是否正确?

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

1 个答案:

答案 0 :(得分:0)

虽然GCE实例几乎不受限制地访问互联网(SMTP是一个很大的例外),但为了允许传入连接,需要在正在使用的网络上设置适当的防火墙规则,就像你做的那样。您可以通过为这些MongoDB连接指定源IP和端口来进一步微调访问规则,以及在VM上使用标签,在防火墙规则的目标部分中指定这些相同的标签,进一步限制对仅访问组的访问权限。具有该标签的VM。虽然让您在Google Cloud Platform上托管应用程序可以提高性能,但这绝不是使用环境的先决条件。

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