当前位置: 首页 > 知识库问答 >
问题:

如何从多个App Engine项目到Mongo Atlas建立VPC网络对等

高奇
2023-03-14

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

我想让应用程序成为多区域的,这意味着创建多个项目,从而复制各种GCP基础设施,包括对等连接。但是,在复制此连接时,由于每个项目中的两个“默认”专有网络之间在Mongo Atlas端的IP冲突,我无法复制。

我可以在GCP端OK中创建VPC网络对等互连,共享“默认”VPC并设置相同的Mongo项目/网络ID。默认VPC具有每个区域的范围,例如us-West1=10.138.0.0/20,us-West2=10.168.0.0/20(我的原始应用区域),us-West4=10.182.0.0/20-我正在设置的第二个区域。

在Mongo DB端,它们的CIDR块固定在192.168.0.0/16,无法更改。但是当我输入新的GCP项目ID和“默认”VPC时,它会抛出这个错误:

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

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

我注意到误差约为10.138,这是美国西部地区,我甚至没有使用它。那么,有没有办法限制每个专有网络对等仅共享项目的区域?如果我可以为每一个这样做,就不会有重叠。

Mongo DB有一个关于这个问题的文档,但这只讨论了一个AWS解决方案,并且只从他们的角度出发,没有说如何设置另一端。https://docs.atlas.mongodb.com/security-vpc-peering/#network-peering-between-an-service-vpc-and-two-virtual-networks-with-identical-cidr-blocks

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

我猜我可能需要创建一个新的VPC,它可能具有区域有限的子网,并且只共享该VPC?我看了一下“创建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 Google云对等失败,本地网络中的ip范围与活动对等中的ip范围重叠

使现代化

我后来发现,这成为一个问题的原因之一是,在2年前最初安装第一个应用程序时,我只使用了“默认”专有网络,它本身默认为“自动模式”,自动为当前和未来的所有地区创建子网。这可以节省时间,但GCP建议不要在生产中使用它-因为很多原因,包括我的问题!如果您希望对子网进行更多控制并避免冲突等,他们建议您使用“自定义模式”专有网络,您必须自己定义所有子网。

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

共有2个答案

孔安阳
2023-03-14

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

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

在研究自动模式专有网络使用的IP范围后,我意识到我可以使用任何备用的“本地”IP范围在我的第二个区域创建一个新的专有网络,只要我避开GCP自动范围10.128.0.0/20(10.128.0.0-10.255.255)和Mongo Atlas范围192.168.0.0/16(192.168.0.0-192.168.255.255),所以我选择了10.1.0.0/16。

然后执行这些步骤:

  • 在我的第二个区域项目中创建自定义VPC“my-app-Engine”
    • 添加1个子网my-app-Engine us-West4区域:us-West410.1.0.0/16
    • 网络:my-app-Engine
    • subnetwork_name: my-app-Engine-us-West4

    对于自定义VPC,您必须在app.yaml中指定subnetwork_name,但对于自动模式VPC则不能。

    “IP访问列表”让我陷入了一段时间,因为我忘记了您还必须向新的VPC对等互连打开Mongo防火墙,并且即使对等互连已设置,仍会获得到集群的连接超时。

    所以现在我有两个VPC对等互连,原始的过度填充的对等互连,以及自定义网络上的新瘦对等互连。一旦新区域工作,我最终将以这种更瘦的模式重新部署旧应用程序。

屠杰
2023-03-14

您是对的,如果您使用默认VPC,则所有区域都有VPC,并且由于重叠而对等互连失败。

有2种解决方案:

  • 在每个区域/项目中创建自定义VPC以创建干净的对等互连
  • 或者(我最喜欢的),创建一个共享VPC并将所有区域/项目添加到主机项目中。最后,这是同一个项目,但仅限于多区域,共享VPC层很有意义。
 类似资料:
  • 我正在尝试使用VPC和对等网络从Google Cloud Run连接到MongoDB,但我似乎无法建立连接。目标是能够从Cloud Run连接到Atlas,同时只允许特定的IP范围。 我的设置是: 运行在谷歌云上的MongoDB Atlas 我已采取以下步骤: > 按照https://cloud.google.com/vpc/docs/using-vpc.的说明在Google Cloud端创建VP

  • 使用 vue-cli 建议使用脚手架项目vue-loader 与 vue-cli: npm install -g vue-cli vue init webpack-simple hello-vue cd hello-vue npm install npm run dev # ready to go!

  • 下面的代码适用于一个if语句,但没有给出另一个if语句的结果,它在第一个查询中显示了'flights'表,但在另一个条件之后,没有显示另一个名为'ISB to Muree'的表。

  • 在根中应用Quarkus插件的多模块gradle项目在步骤失败,出现: 根如下所示: 但是,将行移动到子项目的中,生成将成功。看来quarkus构建步骤是在插件声明的地方运行的,而不是在插件实际应用的地方。 理想情况下,我希望在根项目中声明一次插件,然后仅将其应用于子项目,而不是在根项目中执行它,在根项目中显然没有什么可构建的。 有什么想法吗?

  • 本文向大家介绍Rust 建立项目,包括了Rust 建立项目的使用技巧和注意事项,需要的朋友参考一下 示例 除错 发布 使用--release标记进行构建可以实现某些编译器优化,而这些优化在构建调试版本时不会完成。这使代码运行得更快,但也使编译时间更长一些。为了获得最佳性能,发行版本就绪后应使用此命令。            

  • 尽管Java 插件在你的项目里加入了许多任务,只有几个会在项目构建中经常用到。 最常用的任务是 build 任务, 用于完全构建你的项目.运行 gradle build 命令执行后,Gradle 将会编译和测试你的代码,并生成一个包含所有类与资源的 JAR 文件: 例子 7.2. 建立一个 Java 项目 gradle build 命令的输出: > gradle build :compileJav