公网地址块的一部分留在本地,另一部分迁入 Google Cloud。这句话描述的是两套方案,而不是一套:一套是对外通告方案,一套是私网转发方案。把它们当成同一个路由问题,正是 BYOIP 设计出错的地方。

涉及的对象回答的是不同的问题,其中只有一个关乎报文下一步去哪里。

三个对象,三个问题

公网通告前缀是 Google 代表你向互联网通告的单位。公网委派前缀描述的是导入的地址空间如何分配给受支持的 Cloud 资源。VPC 路由(包括从 VPN 经 Cloud Router 学到的路由)选择的是私网下一跳。三者各有各的范围、各自的 API 和各自的报错信息。

用表格说更短。

ObjectQuestion it answers
Public advertised prefixWhich authorized range Google announces publicly
Public delegated prefixHow imported space is allocated to Cloud resources
VPN or Cloud Router routeWhich private next hop carries a destination

只有第三行讲的是你网络内部的转发。

BYOIP 重叠告警覆盖的是什么

Google 的 BYOIP 文档 把通告前缀视为通告单位,并警告外部通告发生重叠的情况,包括在 Google 之外通告的子前缀。那条警告讲的是公网通告方案。它并不是对你可能添加的每一条私网路由的论断。

在导入前缀内部委派更小的分配,本身并不授予你从另一个起点通告剩余部分的权限。

把问题换成谁通告什么来问。如果 Google 通告整个导入前缀,那么第二个起点通告一个子前缀,就恰好制造了文档所警告的重叠,无论你的 VPC 路由看起来多么整齐。

私网路由决定什么

经 VPN 学到的前缀不是互联网通告,再多 BGP 也变不成通告。它是 VPC 路由表中的一条表项,说明该目的地应由哪条隧道或哪个网关承载。这条表项是否可用、是否被选中、是否真正生效,取决于 VPC 自身的路由规则。

最长前缀匹配在路由表内部生效,因此更长的 VPN 路由可以在本地胜出,而不改变公网边缘的任何东西。

拆分前缀:先要定下的是哪一个决定

如果架构要求地址块的一半从数据中心通告、一半从 Google 通告,那么在导入任何东西之前先把通告方案定下来。确认 Google 可以通告哪些范围、哪些仍在别处通告、两者是否重叠。然后为每个目的地设计私网路径及其回程路径。如果供应商不支持你想要的那种拆分,就改拆分方式,而不是指望更长的 VPN 前缀去推翻公网边缘的结论。

这个次序之所以重要,是因为第二套方案补救不了第一套。

两套方案分别验证

用 gcloud compute public-advertised-prefixes list 检查公网一侧,确认范围及其状态。用 gcloud compute routes list 和 gcloud compute routers get-status 检查私网一侧,后者显示 BGP 实际交换了什么。

一组输出告诉你互联网看到什么。另一组告诉你流量去了哪里。两者谁也替代不了谁。

相关文章