1. 当前机制
上图为现有Openstack VPC网络模型中跨子网(三层)访问VIP的数据流量模型:
1) 通常会选择VPC下某个子网创建对应的Neutron Port,其分配的IP地址则作为VIP。
2) 在DVR里配置的VIP静态ARP,其中的MAC地址为VIP对应Neutron Port的MAC地址。
3) 跨子网访问VIP时,执行三层转发,流量先送达默认网关(即DVR),在DVR里查询VIP的静态ARP配置,更改目的MAC为记录的MAC,再送至OpenvSwitch转发到目的(可能在同节点也可能在不同节点)。
存在的问题:
1) DVR里记录的VIP静态ARP配置,其映射的MAC地址并非是VIP所绑定的VM MAC地址,同时更不会随着VIP的漂移而及时更新准确的静态ARP配置,进而导致无法跨子网(三层)访问VIP 。
2 改进方案
上图为改进后的Openstack VPC网络模型中跨子网(三层)访问VIP的数据流量模型:
1) 通常会选择VPC下某个子网创建对应的Neutron Port,其分配的IP地址则作为VIP。
2) VIP绑定到主虚拟机后,主动发出免费ARP报文,在计算节点OpenvSwitch网桥上增加拦截VIP的免费ARP(简称GARP)报文的流表,其动作上送控制器。控制器捕获到VIP的免费ARP报文,提取出源IP(即VIP)、源MAC(即VIP所绑定虚拟机的MAC)并通知至Neutron Server。
3) 在Neutron Server端会更新VIP所关联的所有Neutron Port的Allow_address_pair属性,最后通知计算节点上的DVR更新VIP的静态ARP配置。
4) 在DVR里配置的VIP静态ARP,其中的MAC地址为VIP所绑定的VM MAC,当VIP出现漂移时,也能够及时刷新正确的VM MAC。
5) 跨子网访问VIP时,执行三层转发,流量先送达默认网关(即DVR),在DVR里查询VIP的静态ARP配置,更改目的MAC为VIP所绑定的VM MAC,再送至OpenvSwitch转发到目的(可能在同节点也可能在不同节点)。
改进后:
1) 能够在DVR里准确地配置VIP的静态ARP,同时还能够支持VIP的漂移,最终实现跨三层访问VIP的能力。