一 背景
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:
此时可以看到通过BGP,VPC2和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-east1 DEST_RANGE TYPE NEXT_HOP_REGION PRIORITY STATUS 10.2.1.0/24 SUBNET_PEERING_ROUTE asia-east1 1000 accepted 10.2.2.0/24 SUBNET_PEERING_ROUTE asia-east1 1000 accepted 10.2.3.0/24 SUBNET_PEERING_ROUTE asia-east1 1000 accepted 10.3.1.0/24 DYNAMIC_PEERING_ROUTE 100 accepted 10.3.2.0/24 DYNAMIC_PEERING_ROUTE 100 accepted 10.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-east1 DEST_RANGE TYPE NEXT_HOP_REGION PRIORITY STATUS 10.2.1.0/24 SUBNET_PEERING_ROUTE asia-east1 1000 accepted 10.2.2.0/24 SUBNET_PEERING_ROUTE asia-east1 1000 accepted 10.2.3.0/24 SUBNET_PEERING_ROUTE asia-east1 1000 accepted 10.3.1.0/24 STATIC_PEERING_ROUTE asia-east1 1000 accepted 10.3.2.0/24 DYNAMIC_PEERING_ROUTE 100 accepted 10.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共同使用。
文章版权归作者所有,未经许可不得转载。
评论