openstack集中式虚拟路由场景下,NAT网关是VPC跟外网通信的核心虚拟设备,VPC南北向流量都需要通过NAT网关进行限速和流量整形,原本一个VPC独享一个NAT网关,一个NAT网关需要消耗外网IP和较多的CPU、内存资源,随着业务增长,VPC和NAT网关规模必定越来越大,VPC开通太多会导致大量物理资源占用,物理机整体服务性能下降,无法提供更多的资源超配比。大量NAT网关也会导致交换机学习大量的ARP,ARP表项容量达到极限会导致整个资源池网络瘫痪。
本文针对openstack集中式虚拟路由的VPC通过独享NAT网关进行南北向数据交互场景中,大量闲置低活VPC独享NAT网关占用大量物理资源并且使用大量外网IP导致交换机ARP表项爆满而致使资源池网络瘫痪问题,提出一种可以多VPC同时接入的共享NAT网关实现闲置带宽等网络资源优化整合的方案。NAT网关是openstack集中式虚拟路由场景必备的网络设备,VPC南北向流量都需要通过NAT网关进行限速和流量整形,原方案中一个闲置低活的VPC也独享一个NAT网关,一个NAT网关需要消耗外网IP和较多的CPU、内存资源。本文通过开发新增共享NAT网关,同时修改原DVR路由表和端口,实现多VPC共享NAT网关进行南北向流量通信的功能,大大降低了CPU、内存等物理资源的占用,也极致压缩外网IP使用从而大幅降低了交换机ARP表项规模,在生产中取得了很好的经济效益。数据流向跟原来方案类似,但虚拟设备需要修改或新增,VPC内虚机出去报文进行南北向通信时,先从本地DVR的qr口进来,再从新增的sh口出来做snat后路由引流到共享NAT网关的新增qr口,在共享NAT网关中经过二次snat后从qg口出来到外部网络。
图1 原方案设计图
如图1所示,原openstack集中式虚拟路由虚机南北向流量通信的方案里,每个闲置低活VPC也独享一个NAT网关,每个NAT网关qg口挂载一个外网ip地址,每个NAT网关占用较多的网络节点物理机CPU、内存等资源,虚机进行南北向流量通信时,数据包先到达本地DVR的qr口,再从qr口做策略路由出来经隧道到达自己的独享NAT网关的sg口,在NAT网关的qg口做snat后出去外部网络。
图2 本方案设计图
如图2所示,本文针对上述方案不足之处,实现一种共享的NAT网关,该共享NAT只需要一个外网IP,允许多达上百个VPC接入到共享NAT网关进行南北向流量通信,我们将闲置低活的VPC删除底层占用的实际资源后接入到共享NAT中,减少大量独享NAT网关以减少物理资源消耗,从而支撑更多的资源超配比。同时从根源上减少外网IP的消耗,从而大幅降低交换机ARP表项规模。当vpc不再闲置低活时再将其从共享NAT中移除。
开发新增共享NAT网关,每个共享NAT网关会新建一个9.192.0.0/10的特殊VPC,闲置低活的VPC接入到共享NAT网关时原VPC的DVR会新增sh端口,共享NAT网关只有qr端口和qg端口,sh口和qr口均从特殊网段9.192.0.0/10中分配地址,共享NAT的qr口只需要配置一个地址即可,共享NAT的qg口分配一个外网IP。每个接入到共享NAT的VPC可以从该特殊VPC大网段中的9.192.0.0/21-9.192.0.0/21网段中取一个唯一网段进行内部地址分配,所用地址段不冲突,不影响原VPC之间的地址重叠。
虚机数据包进行南北向流量通信时,报文从本地DVR的qr口进来后做策略路由引流到sh口出来然后做一次snat成sh端口地址,经隧道转到共享NAT网关的qr口后做二次snat从qg口出来到目标网络。
本文提供的方案可以极大程度降低CPU、内存等资源消耗,提高资源超配比,同时极大程度降低了交换机ARP表项规模,避免交换机ARP表达到容量极限导致的整个资源池网络瘫痪,提高网络性能。