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

时间:2020-01-24 16:24:14

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

因此,我有一个Azure应用服务,并且希望它能够连接到mongo db地图集。对于我们的Atlas设置,在Azure上的托管环境(以及全部位于其中的vnet)与mongo数据库集群之间存在a peering connection

mongo群集已设置为“仅通过对等连接”,我们无法更改。这意味着我们无法使用任何旧的公共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应用程序服务连接到数据库有任何帮助吗?

2 个答案:

答案 0 :(得分:0)

是否有防火墙或网络安全组?网络对等状态是什么?如果显示“已启动”,则表示尚未完成。网络对等必须在两端进行。如果显示``已连接'',那么我将寻找防火墙或网络安全组。

查看此 https://docs.atlas.mongodb.com/security-vpc-peering/#vpc-peering

答案 1 :(得分:0)

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

就我而言,我有一个部署在 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 网络访问 IP 地址列表。 (在Virtual Network > Subnets > IPv4下)