一 背景

Google Cloud 的 VPC 是网络租户的单元,一个 VPC 代表一个网络租户,不同网络租户间默认不通。在多个 VPC 间互通的方式,可以采用 VPN 连接,或者 VPC Peering 等方式。

但在 VPC Peering 中,VPC Peering 的路由是不能传递的,比如下面的拓扑:

VPC1 和 VPC2 可以通讯,VPC2 和 VPC3 可以通讯,但 VPC1 和 VPC3 间是不能通讯的。
目前 Google Cloud 支持 Custom routes advertisement for VPC peering,支持动态路由在 VPC Peering 中传递,如下图:

VPC1 和 VPC2 通过 VPC Peering 实现互联,VPC2 和右边的网络(VPC3 或 On-Prem 的网络)通过VPN 或 Interconnect 实现互通,并通过 BGP 传递了路由。此时通过 Custom routes advertisement for VPC peering 的功能,可以实现把 VPC3/On-Prem 的路由传递给 VPC1。

用户多个 Project 的多个 VPC 需要共享一根 VPN/Interconnect 的线路时,可以采用这种方式实现。如下图:

本文将讨论本功能的具体实现方式。

二 实现

1 创建 VPC

手工创建三个 VPC,如下图:

2 创建 VPN

在 VPC2 和 VPC 间创建 VPN Tunnel

此时可以看到通过 BGPVPC2 和 VPC3 的路由已经互相学习到:

3 调整 BGP 广播路由

考虑到在创建 VPC Peering 后,VPC1 到路由需要传送到 VPC3,所以在 VPC2 和 VPC3 的 BGP 宣告中,需要增加 VPC1 的网段:

可以看到,除了 VPC2 Subnets 的网段,还增加了 VPC1 的网段到 Custom ranges 中。
在路由表中可以查看到 VPC3 接收到了这三条路由:

4 创建 VPC Peering

创建 vpc1 peering vpc2 的两个 peering

其中 Import Customer Routes 这里选中,表示接受从 VPC2 传过来的动态路由。

同样的,VPC2 peering VPC1 的配置中,在 Export Customer Routes 的地方选中,表示这里学到的动态路由传递给 Peering 的对方。
可以看到创建好的 Peering

5 查看路由并检测

查看路由:
VPC1 的路由中,可以看到 VPC Peering 的路由包含 VPC2 的路由,但并没有包含 VPC3 的路由

通过 gcloud 命令行可以看到 VPC3 的路由:

gcloud beta compute networks peerings list-routes vpc1peer2 --direction=incoming --network=vpc1 --region=asia-east1DEST_RANGE   TYPE                  NEXT_HOP_REGION  PRIORITY  STATUS10.2.1.0/24  SUBNET_PEERING_ROUTE  asia-east1       1000     accepted10.2.2.0/24  SUBNET_PEERING_ROUTE  asia-east1       1000     accepted10.2.3.0/24  SUBNET_PEERING_ROUTE  asia-east1       1000     accepted10.3.1.0/24  DYNAMIC_PEERING_ROUTE                  100      accepted10.3.2.0/24  DYNAMIC_PEERING_ROUTE                  100      accepted10.3.3.0/24  DYNAMIC_PEERING_ROUTE                  100      accepted

通过 VPC1 内的 VM,ping 在 VPC3 内的 VM


可以 ping 通。说明两边的网络已经通了。

6 对静态路由的支持

Custom routes advertisement for VPC peering 同时也支持静态路由的 Peering 间路由广播。
在 VPC3 到 VPC2 的 BGP session 中,做路由控制,10.3.1.0/24网段不被 BGP 广播,参考下面的左图,同时在 VPC2 中创建静态路由,10.3.1.0/24指向 VPN Tunnel,参考下面的右图:

10.3.1.0/24的路由是静态路由了。检查 VPC1 收到的 Peering 路由:

gcloud beta compute networks peerings list-routes vpc1peer2 --direction=incoming --network=vpc1 --region=asia-east1DEST_RANGE       TYPE              NEXT_HOP_REGION  PRIORITY  STATUS10.2.1.0/24      SUBNET_PEERING_ROUTE  asia-east1    1000    accepted10.2.2.0/24      SUBNET_PEERING_ROUTE  asia-east1    1000    accepted10.2.3.0/24      SUBNET_PEERING_ROUTE  asia-east1    1000    accepted10.3.1.0/24      STATIC_PEERING_ROUTE  asia-east1    1000    accepted10.3.2.0/24      DYNAMIC_PEERING_ROUTE               100     accepted10.3.3.0/24      DYNAMIC_PEERING_ROUTE               100     accepted

可以看到是 STATIC_PEERING_ROUTE 的类型路由。
同样在10.1.1.2的 VM 上 ping 10.3.1.2,可以 ping 通。

三 总结

通过 VPC Peering 的 Custom routes advertisement for VPC peering 的功能,用户可以实现一根VPN/Interconnect 线路给多个 Project 的多个 VPC 共同使用。

文章版权归作者所有,未经许可不得转载。

相关推荐