Google Compute Engine MongoDB 通过 Java 驱动程序连接时遇到问题

Google Compute Engine MongoDB trouble connecting via Java Driver

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

我将主要 VM 实例设置为允许 HTTP 流量。

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

MongoClient mongoClient = new MongoClient(EXTERNAL_IP);

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

EXTERNAL_IP 常量是从 Compute Engine 中的 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。

这是获得连接的正确做法吗?

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

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

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