java - 通过 vnet 对等连接将 Azure 应用程序服务连接到 MongoDB Atlas

标签 java mongodb azure azure-web-app-service mongodb-atlas

所以我有一个 Azure 应用服务,我希望它能够连接到 mongo db atlas。对于我们的 Atlas 设置,有 a peering connection我们在 azure 上的托管环境(以及它所在的 vnet)和我们的 mongo 数据库集群之间。

mongo 集群设置为“仅通过对等连接”,我们无法更改。这意味着我们无法使用任何旧的公共(public) IP 地址连接到我们的数据库 - 它必须来自与之对等的 vnet。虚拟机(来自对等互连 vnet 内)能够毫无问题地访问数据库。

我尝试使用应用程序服务使用适用于虚拟机的相同连接字符串连接到数据库。它返回了错误:

java.net.ConnectException: Connection refused (Connection refused)}}, {address=MYMONGOADDRESS.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused (Connection refused)}}]

由于上述原因,这是预期的。不过我设置了 vnet integration for the app service 。我按照应用程序服务的描述创建了一个专用子网,并将 mongo 中的 IP 范围列入白名单。但是,使用此 vnet 集成后我仍然无法连接到数据库。我也遇到了一个非常相似的错误,但略有不同。

{java.net.SocketTimeoutException: connect timed out}}, {address=MYMONGOADDRESS.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.SocketTimeoutException: connect timed out}}]

我没有连接超时,而不是连接被拒绝。我重复了几次,得到了相同的结果。

有人知道为什么这些错误不同,并且对能够从我的azure应用程序服务连接到数据库有什么帮助吗?

最佳答案

不知道这是否适用于您的情况,但这个问题是我在搜索类似内容时第一个也是唯一一个出现的问题。

就我而言,我在 Azure 上部署了 MongoDB Atlas,并在 AKS 中运行了一个应用程序。我按照文档设置了对等互连,但仍然无法从 AKS 中的应用程序容器连接到 MongoDB。结果发现问题是连接字符串不正确。

Atlas 在直接连接和通过对等网络连接时具有不同的 URL:

# Direct connection
mongo "mongodb+srv://<cluster>.<something>.mongodb.net/<dbname>"

# Peered connection (note the -pri)
mongo "mongodb+srv://<cluster>-pri.<something>.mongodb.net/<dbname>"

作为补充说明,我使用 AKS 中使用的 Azure VN 子网的 CIDR 配置了 Atlas Network Access IP 地址列表。 (在虚拟网络 > 子网 > IPv4 下)

关于java - 通过 vnet 对等连接将 Azure 应用程序服务连接到 MongoDB Atlas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59900289/

相关文章:

java - 控制台条形图使用循环,不带图形JAVA

javascript - Mongoose 和 Schema.Types.Mixed 的问题

c# - 无法将 CloudTask 添加到 Azure Batch

java - Spring-Data-Jpa AuditingEntityListener createdDate 在保存现有实体时更新

java - java 类中的锁

mongodb - 如何检查对象是否不在 mongoDb 中的数组中?

azure - 我是否可以对 Azure 存储进行 API 调用来判断我的容器是否已被删除?

azure - 具有可选 ServiceBusOutput 返回值的隔离进程 Azure Function

java - 什么是 NullPointerException,我该如何解决?

java - mongodb (java) 包括按名称排列的 id 字段