将具有相同CIDR块的多个VPC连接到共享VPC

在我公司的AWS云中,我们有4个VPC,每个主要的API环境(dev,test,stage,prod)都有一个。 为了使这些环境尽可能相似,他们都将CIDR块设置为10.0.0.0/16。

现在,我们需要创build这些环境之间共享的内部服务。 为了争辩,让我们假设这个新服务存储来自所有这些环境的日志数据。 该服务存在于自己的VPC中,CIDR块为10.1.1.0/24。

起初,我认为我可以简单地将来自所有环境VPC的对等连接添加到日志loggingVPC中。 当我开始设置路线表时,我遇到了一个障碍。 我做了一个路由表从开发 – >日志logging路由所有stream量目的地10.1.1.0/24。 但是我仍然无法从dev中连接到我的日志logging服务器。 看来我需要添加一个路由表的日志 – >开发路由所有stream量与目的地10.0.0.0/16。 这允许我从开发服务器连接到日志logging服务器,但是现在我无法将任何其他环境连接到日志loggingVPC。

日志logging服务器从来不必与我的API服务器发起连接,只需要接收和响应连接。 所以我的下一个想法是我可以在每个环境VPC上使用一个NAT网关,然后将这些网关路由到日志loggingVPC。 不幸的是,似乎NAT网关直接连接到互联网,我不希望我的日志loggingVPC连接到互联网。

我觉得一定有办法做这个工作,但我想不出来。 目前我觉得我唯一的select是创build4个日志loggingVPC,并在其中运行独立的日志logging服务器,但从成本angular度来看,这并不吸引我。

首先,我必须提到:通过复制VPC中的子网,您犯了一个非常严重的错误。 即使接近零的机会,您也需要在它们之间路由stream量,RFC1918地址空间足够大,您可以为每个VPC分配一个唯一的子网。 我与许多公司就AWS主题进行了协商,并在为客户分配VPC时维护一个“主子网列表”电子表格以logging正在使用的子网,以确保我没有重叠的子网。

你的问题的明显答案是重新编号重叠的VPC。 这将是痛苦的,但这是对这个问题的正确答案,并将为您彻底解决这个问题。

如果这不是一个选项,我可以考虑一些其他的select:

  1. 将SQS用于您的日志 – 将日志从应用程序VPC发送到SQS队列,并使用每个应用程序VPC的源ID注释,然后从日志loggingVPC中将日志从SQS中取出。 除了解决您陈述的问题之外,这将在您的日志生产者和日志消费者之间提供高度可用的缓冲区。 如果您的基础架构打嗝,或者您需要维护,则可以保护您不会丢失日志。
  2. 通过公共IP(ELB,EIP等)公开您的日志logging终结点,防火墙,以便只有您的应用程序服务器的公共IP可以打它,让他们以这种方式发送他们的日志。 stream量将保留在AWS的networking上,只要它被encryption和validation,这不是一个安全问题。 不过,你会为带宽支付更多的费用。