如何建立从多个应用引擎项目到Mongo Atlas的VPC网络对等



我有一个应用程序引擎应用程序,它通过网络对等连接安全地连接到Mongo Atlas,一切正常。

我开始想让应用程序成为多区域的,这意味着创建多个项目,从而复制各种GCP基础设施,包括对等连接。然而,在复制这种连接时,由于Mongo Atlas一侧的IP冲突,我无法实现这两种连接;默认";每个项目中的VPC。

我可以在GCP端创建VPC网络对等OK;默认";VPC并设置相同的Mongo项目/网络ID。默认的VPC有每个区域的范围,例如us-west1=10.138.0.0/20,us-west2=10.168.0.0/20(我原来的应用程序区域),us-wst4=10.182.00.0/20——我正在设置的第二个区域。

在Mongo DB端,他们的CIDR块固定在192.168.0.0/16,不能更改。但是当我输入新的GCP项目ID和";默认";VPC,抛出这个错误:

尝试处理异步操作时出错:对等网络中的IP范围(10.138.0.0/20)与本地网络的活动对等(对等ABCXYZ)中的IP区域(10.138.0.0./20)重叠。

我知道IP范围不能重叠,因为会有路由模糊。所以我想知道如何解决这个问题,并从两个项目中进行连接。

我注意到错误大约是10.138,这是我们的第一个区域,我甚至没有使用它。那么,有没有办法限制每个VPC对等只能共享项目的区域?如果我能为每一个做到这一点,就不会有重叠。

Mongo DB有一份关于这个问题的文档,但这只是讨论了AWS解决方案,而且只是从他们的角度出发,没有说明如何设置另一端。https://docs.atlas.mongodb.com/security-vpc-peering/#network-服务vpc与具有相同cidr块的两个虚拟网络之间的对等

GCP有一份关于这个问题的文件,但似乎没有提供解决方案,只是";你不能这样做"https://cloud.google.com/vpc/docs/vpc-peering#overlapping_subnets_at_time_of_peering

我想我需要创建一个新的专有网络,也许有区域限制的子网,并且只共享该专有网络?我看了一眼";创建VPC网络"但它很快就变得复杂了。

我想要的是:

Project A, us-west2=10.168.0.0/20 <==> Mongo Atlas 192.168.0.0/16
Project B, us-west4=10.182.0.0/20 <==> Mongo Atlas 192.168.0.0/16

这个问题类似,但没有具体的说明(因为OP无论如何都不想要第二个连接)Mongodb Atlas谷歌云对等失败,因为本地网络中的ip范围与活动对等中的ip区域重叠

更新

从那以后,我发现这成为一个问题的原因之一是,当我2年前最初设置第一个应用程序时;默认";VPC本身默认为";"自动模式";它自动为现在和将来的所有区域创建子网。这可以节省时间,但GCP建议不要在生产中使用它,原因有很多,包括我的问题!如果你想更多地控制子网并避免冲突等,他们建议你使用";自定义模式";VPC,您必须自己定义所有子网。

在我的情况下,我不需要这个世界上所有可能地区的超级VPC,只需要一个地区。因此,现在我必须将其转换为自定义模式,并修剪掉我在该项目中没有使用的其他区域,以解决重叠(即使我在另一个项目中使用了单个区域子网,我仍然需要将它们从原始项目中删除以避免冲突)。

你是对的,如果你使用默认的VPC,你在所有地区都有VPC,并且由于重叠而导致对等失败。

有两种解决方案:

  • 在每个区域/项目中创建一个自定义VPC,以创建一个干净的对等网络
  • 或者(我最喜欢的),创建一个共享的VPC,并将所有的区域/项目添加到主机项目中。最后,这是同一个项目,但只是在多区域中,共享VPC层很有意义

Guillaume的答案是正确的,但我想我应该添加我的具体工作配方,包括我如何避免冲突,而不必重新配置我的原始应用程序。

我打算将我原来应用程序的自动模式VPC转换为自定义模式,然后删除我不使用的区域(除了us-west2之外的所有区域)。我在另一个项目中实践了这一点,似乎工作迅速而轻松,但我想避免对我的生产应用程序造成任何干扰。

在研究了自动模式VPC使用的IP范围后,我意识到我可以使用任何空闲的"VPC"在我的第二个区域创建一个新的VPC;本地";IP范围,只要我避开10.128.0.0/20的GCP自动范围(10.128.0.0-10.255.255.255)和192.168.0.0/16的Mongo Atlas范围(192.168.0.0-192.168.255.255),所以我选择了10.1.0.0/16

然后执行以下步骤:

  • 创建自定义专有网络"我的应用程序引擎";在我的第二个区域项目中
    • 添加1个子网";my-appengine-us-west4";区域:";us-west4";10.1.0.0/16
  • 在GCP+Mongo Atlas将VPC Peering添加到此网络并等待其连接
  • 将子网范围10.1.0.0/16添加到Atlas Network Access>IP访问列表
  • 使用额外的app.yaml设置将应用程序重新部署到此VPC中:
    • 网络:我的应用程序引擎
    • 子网名称:my-appengine-us-west4

您还必须在app.yaml中为自定义VPCs指定subnetwork_name,但不能为自动模式的VPCs指定。

";IP访问列表";我有一段时间被打扰了,因为我忘了你还必须打开Mongo防火墙才能访问新的VPC对等网络,而且即使对等网络已经设置好,仍然会导致与集群的连接超时。

所以现在我有两个VPC对等,一个是原来的超缓冲的,另一个是在自定义网络上的新的超薄的。一旦新的区域开始工作,我最终会以这种更精简的模式重新部署旧的应用程序。

最新更新