一、前言
介绍前,首先讲一下网络中underlay和overlay的概念。underlay指的是物理网络层,overlay是指在物理网络层之上的逻辑网络或者又称为虚拟网络。overlay是建立在underlay的基础上,需要物理网络中的设备两两互联,overlay的出现突破了underlay的物理局限性,使得网络的架构更为灵活。以vlan为例,在underlay环境下不同网络的设备需要连接至不同的交换机下,如果要改变设备所属的网络,则要调整设备的连线。引入vlan后,调整设备所属网络只需要将设备加入目标vlan下,避免了设备的连线调整。
二、云环境下vlan的痛点
- vlan id数量不足
vlan header由12bit组成,理论上限为4096个,可用vlan数量为1~4094个,无法满足云环境下的需求。 - vm热迁移
云计算场景下,传统服务器变成一个个运行在宿主机上的vm。vm是运行在宿主机的内存中,所以可以在不中断的情况下从宿主机A迁移到宿主机B,前提是迁移前后vm的ip和mac地址不能发生变化,这就要求vm处在一个二层网络。毕竟在三层环境下,不同vlan使用不同的ip段,否则路由器就犯难了。 - mac表项有限
普通的交换机mac表项有4k或8k等,在小规模场景下不会成为瓶颈,云计算环境下每台物理服务器上运行多台vm,每个vm有可能有多张vnic,mac地址会成倍增长,交换机的表项限制则成为必须面对的问题。三、针对痛点vxlan的解决方法
- 以多取胜
vxlan header由24bit组成,所以理论上VNI的数量为16777216个,解决了vid数量不足的问题。
此处需要说明的是:在openstack中,尽管br-tun上的vni数量增多,但br-int上的网络类型只能是vlan,所有vm都有一个内外vid(vni)转换的过程,将用户层的vni转换为本地层的vid。
细心的你可能会有这样的疑问:尽管br-tun上vni的数量为16777216个,但br-int上vid只有4096个,那引入vxlan是否有意义?答案是肯定的,以目前的物理机计算能力来说,假设每个vm属于不同的tenant,1台物理机上也不可能运行4094个vm,所以这么映射是有意义的。
上图是2计算节点间vm通信的示意图,图中所有的vm属于同一个tenant,尽管在用户层同一tenant的vni一致,但在本地层,同一tenant由nova-compute分配的vid可以不一致,同一宿主机上同一tenant的相同subnet之间的vm相互访问不需要经过内外vid(vni)转换,不同宿主机上相同tenant的vm之间相互访问则需要经过vid(vni)转换。如果所有宿主机上vid和vni对应关系一致,整个云环境最多只能有4094个tenant,引入vxlan才真的没有意义。 - 暗渡陈仓
前面说过,vm的热迁移需要迁移前后ip和mac地址不能发生管改变,所以需要vm处于一个二层网络中。vxlan是一种overlay的技术,将原有的报文进行再次封装,利用udp进行传输,所以也称为mac in udp,表面上传输的是封装后的ip和mac,实际传播的是封装前的ip和mac。 - 销声匿迹
在云环境下,接入交换机的表项大小会成为瓶颈,解决这个问题的方法无外乎两种:
1.扩大表项 : 更高级的交换机有着更大的表项,使用高级交换机取代原有接入交换机,此举会增加成本。
2.隐藏mac地址: 在不增加成本的前提下,使用vxlan也能达到同样的效果。前文得知,vxlan是对原有的报文再次封装,实现vxlan功能的vetp角色可以位于交换机或者vm所在的宿主机,如果vtep角色位于宿主机上,接入交换机只会学习经过再次封装后vtep的mac地址,不会学习其上vm的mac地址。