我创建了一个新项目,然后单击以部署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进行连接。
答案 0 :(得分:0)
虽然GCE实例几乎不受限制地访问互联网(SMTP是一个很大的例外),但为了允许传入连接,需要在正在使用的网络上设置适当的防火墙规则,就像你做的那样。您可以通过为这些MongoDB连接指定源IP和端口来进一步微调访问规则,以及在VM上使用标签,在防火墙规则的目标部分中指定这些相同的标签,进一步限制对仅访问组的访问权限。具有该标签的VM。虽然让您在Google Cloud Platform上托管应用程序可以提高性能,但这绝不是使用环境的先决条件。
此外,您始终可以设置更安全的连接方式,例如VPN等等。