显而易见的框架是 peering 与 VPN 之争,而这是错误的框架。对等连接的 VPC 无法借用邻居的 VPN 连接来做边缘到边缘的路由,所以无论路由表怎么暗示,这个选项从来就不在桌面上。你真正要选的是共享网络中枢、两条独立 VPN 路径和一条窄应用入口。三者各自回答的是「路由归谁所有」这个问题的不同侧面。

三个选项,以及那个并不成立的选项

先把 peering 这个念头删掉,再按归属而非按图面简单程度来比较剩下的选项。下表是压缩后的决定。

OptionWho owns the pathMain cost
Shared transit gatewayHub owner, used by both VPC ownersShared blast radius, attachment and data-processing charges
Separate VPNs per accountEach account independentlyPeer capacity, duplicated tunnels, overlapping prefixes to coordinate
Application proxyThe account that hosts the intermediaryNew auth, logging and availability surface, and only one service

如果账户 A 需要到达整个本地网络,代理这一行就选错了。如果账户 A 只需要一个 API,前两行就比需求所要求的网络更多。

共享 Transit Gateway 何时胜出

Transit Gateway 把每个 VPC 和 VPN 作为各自独立的网络接入,跨账户共享让 VPC 所有者无需合并账户即可使用中枢。吸引力就在于此:本地前缀与 AWS 网络相遇的地方只有一处,判断哪个接入学到哪条路由的地方也只有一处。

全部接入并不意味着全部放行。关联与传播决定哪个接入使用哪张路由表,因此两个 VPC 前缀可以各自到达一个本地服务,而彼此的访问仍被中枢的设计排除在外。本地一侧仍需为 AWS 前缀配置回程路由,那是另一个团队的变更工单。

成本既是财务上的,也是组织上的。中枢所有者掌管着其他团队依赖的路由关系,所以改动一个接入,就可能搬动某个中枢所有者从未听说过的服务的流量。接入时长和数据处理随着每接入一个网络而累加,这也是中枢往往比运维它的团队增长更快的原因。

独立 VPN 或窄代理何时胜出

两条独立 VPN 适合有真实运维边界的小型部署:每个账户改自己的隧道,谁也改不了路由表害了对方。限制在本地一侧。对端网关要有容纳额外隧道的容量,地址规划不能重叠,两份宣告相同前缀的配置需要刻意设定的优先级,而不是靠运气。

代理是最窄的接口。如果账户 A 只需要账户 B 里的一个数据库或一个 API,一个划定范围的中间层就能给出明确的入口,并自带认证、日志和可用性方案。它也是最容易被误用的选项:一个把所有流量转发到任意私有目标的中间层,就变成多绕几步的无限中继,对别的东西不会像 VPC 到本地的透明过境那样表现。

在此之前值得先读VPC peering 的限制,因为它们解释了第四个念头为何反复出现、为何行不通。

选最能满足需求的最窄接口

把问题排好序:A 需要的是一张网络、一组网络,还是一个服务?本地团队想要的是一条路还是多条?谁有权改另一个团队流量的路由?第一个能给出最窄接口的答案就是架构,之后的一切都是实施。

把答案与地址前缀规划、路由归属、隧道或接入清单,以及双方预期的故障模式一起记录下来。日后有人问为什么账户 A 不能直接用账户 B 的 VPN,那份记录就是答案,也能让你在下一个项目里不必重新争论同样的三个选项。

相关文章