从 Azure 应用服务配置对 MongoDB 集群的网络访问

Configure network access to MongoDB cluster from Azure App Service

我正在尝试配置 MongoDB 集群的网络访问以允许来自 Azure 应用服务的连接。我在 Azure 门户中找到了我的应用服务的出站 IP 地址(请参阅 Azure docs). And entered them in the IP access list according to MongoDB Atlas docs. I appended "/32" to the IP addresses to allow only a single host (CIDR notation)。

但是,当尝试在应用服务启动时连接时,我收到一条错误消息,指示检查 MongoDB 集群的 IP 白名单。

这似乎确实是问题所在,因为添加 0.0.0.0/0(允许从任何地方访问)解决了问题。

这可能是什么问题?

我仔细检查了 Azure 应用服务的出站 IP 地址和 MongoDB 集群的 IP 访问列表。

我所做的确实是 another question 的答案,所以我想我遗漏了一些东西...

实际上 /32 不是 Azure 中的有效 CIDR。单个 VNET 的最小大小为 /29。 这会将您的范围限制为仅 3 个 IP(而不是您期望的 8 个),因为 Azure 将保留前四个 IP 和最后一个用于内部路由。

还请考虑,如果您是 运行 私有网络中的 MongoDB 集群,并且它没有通过网络设备(例如应用程序网关、负载均衡器、前门或流量管理器),您将需要在 Azure Web 应用端启用 VNET 集成。

如果是这种情况,请在门户中浏览您的应用程序并进入“网络”边栏选项卡。 在这里你可以添加 VNET Integration,但是你应该考虑在这种情况下你的子网的最小大小只能是 /28(你不能添加更小的子网)

我只添加了我的 Azure 应用服务的“出站 IP 地址”属性 中列出的 IP 地址。添加“其他出站 IP 地址”中列出的 IP 地址后 属性 应用服务也成功连接到 MongoDB 集群。

这让我有些惊讶,因为 documentation on when outbound IPs change 表示“...当您执行以下操作之一时,您的应用程序的出站 IP 地址集会发生变化:

  • 删除一个应用程序并在不同的资源组中重新创建它(部署单位可能会改变)。
  • 删除资源组和区域组合中的最后一个应用程序并重新创建它(部署单位可能会更改)。
  • 在较低层(基本、标准和高级)、PremiumV2 和 PremiumV3 层之间扩展您的应用程序(IP 地址可以添加到集合中或从集合中减去)。

...

None 以上操作发生。