1. 方案模型
对等连接网络模型如下图所示:
一些技术要点如下:
- 从VPC的每个子网预留一个Neutron Port(1对IP/MAC地址)。
- 在DVR实例里,在已有的子网策略路由表中增加对等路由规则,其中下一跳为预留的IP。
- 在VM所在计算节点的ovs br-tun网桥增加精确识别对等连接流量的流表,将之以负载均衡的方式引向VPC对等网关集群。
- VPC对等网关集群上通过OVS流表执行MAC地址、VXLAN ID的转换,之后以负载均衡的方式引向对端VPC DVR集群。
对等连接流量到达VPC DVR实例后,直接匹配直连路由到达目标VM。
2. Peering Port
对于建立对等连接的VPC,从每一个子网下创建一个Neutron Port,其device_owner设计为”network:peering”,简称Peering Port。修改原生Neutron Port分配MAC的机制,对于Peering Port而言(通过匹配device_owner为”network:peering”),定制以fa:17:02:00:00:00为固定前缀。
预留Peering Port有如下几个作用:
- 预留Peering Port会分配一个IP地址,会用于在DVR实例里配置对等路由规则,其下一跳即为这个预留的IP。
- 预留Peering Port会分配一个MAC地址,以fa:17:02:00:00:00为固定前缀,其目的就是为了在ovs网桥上通过编排流表的方式,匹配此MAC地址前缀,实现对等连接流量的精确识别。同时,采用固定前缀匹配,还能够大量减少流表的配置数量。
3. VPC对等网关分组
设计要点如下所示:
- 将VPC对等网关节点(服务器)进行分组管理,1组可以只包含1个网关节点,也可以包含>=2个网关节点。
- 1组网关节点可以承载多条对等连接。在创建对等连接时,会选择最空闲(即:承载对等连接数最少)的组为这条对等连接的网关集群。组及其承载的对等连接数量会记录在数据库中。
- 可以根据业务量的变化灵活扩缩容组内的网关节点。
- 通过监控组内的网关成员的工作状态,若发现某成员出现故障时,可自动将之置为”禁用”状态。于此同时,管理员也可以通过命令行方式强制将组内某成员置为”禁用”状态。处于”禁用”状态的成员将不再参与对等连接流量的转发,待恢复为”可用”状态后,又继续承载流量转发。
- 组本身也有一个状态,默认创建的时候为”可用”,处于”可用”状态的组会参与分配与调度。管理员可通过命令行的方式将之置为”禁用”状态,处于”禁用”状态的组将不会参与分配与调度。
可以将某条对等连接以组的粒度从一个组迁移到另外一个组。
4. DVR对等路由
表中所列举的为当前DVR实例里包含的策略路由表及其各表包含的路由规则。为了实现对等连接,在本地子网这个策略路由表里,配置对等路由规则,其下一跳为该子网对应预留的Peering Port IP地址(参见表格中红色字体所示)。
5. VPC对等网关网络模型
上图为VPC对等网关节点里抽象的虚拟网络模型,分为几个部分:
- 两个OVS网桥,分别为br-conjoin、br-south。
- br-south上会创建VXLAN子接口,与VM所在的计算节点建立VXLAN隧道。
- br-south和br-conjoin之间会为对等连接的每一个VPC建立Veth Pair,分别桥接与两个OVS网桥。
网络模型的设计基于如下几点考虑:
- 采用2个OVS网桥而非只用1个OVS网桥的原因:避免出现流量从某个VXLAN子接口进入,经流表处理后再从相同的VXLAN子接口出去,即:源端口进源端口出,最终导致OVS丢包问题。
- 2个OVS网桥之间为每一个VPC建立Veth Pair的原因:在br-south网桥接收到对等连接流量,能够提取出tun_id值,进而通过匹配tun_id值实现不同VPC对等连接流量的区分。然而tun_id并不会继续传递到br-conjoin网桥,即br-conjoin网桥无法看到tun_id值。因此,通过建立Veth Pair,直接匹配对应的IN_PORT来实现不同VPC对等连接流量的区分。