数据中心传统网络
传统数据中心有机架,机架上是一台台服务器,服务器没有计算虚拟化,机架上还有接入交换机,接入交换机连接到汇聚层,汇聚层连接到核心层,核心层再通过路由出去。传统数据中心网络研究的东西就是接入交换机接口密度,需要几层,层和层怎么连接,vlan怎么隔离,三层终止于哪里,运行什么路由协议,流量出口在哪里等等,学问很深,但这些都不是我想说的重点,我想说的重点是接入交换机连接服务器的口要配置成access口,需要互通的服务器配置相同的access vlan,不需要互通的配置不同的access vlan,一台服务器的一个网卡连接接入交换机一个口,不考虑bond。接入交换机的上行口要配置成trunk,不考虑接入层终结vlan走三层转发。
计算虚拟化之后的网络
有了计算虚拟化之后服务器上跑的是一个个虚拟机VM,同一台服务器上的VM需要流量隔离和互通,不同服务器上的VM之间也需要流量隔离和互通,VM是动态的,随时可以创建和删除,也可以从一台服务器迁移到另一台服务器,此时就对网络提出了更大的挑战,有很多问题需要考虑,这些问题回答了,云计算网络就具备基本条件了。
- 网络如何配置管理?
原先上线一些服务器,统计服务器网卡的MAC,协调网络管理员分配交换机接口,增加vlan,配置交换机,规划IP段,配置网关和路由,如果还要加负载均衡和防火墙,工作量是非常大的,难度也很大,一点差错网络就不通,排查起来困难。现在VM是动态的,VM的MAC和IP是VM的创建者配置的,VM要被调度到那台服务器上事先也是不知道的,VM随时创建和删除,再要求网络管理员像原先那样提供网络服务显然已经是不可能的了。现在要求网络和VM联动,VM用的MAC,IP,vlan,网关,路由,LB和FW都交给VM的创建者来配置和管理,那么由VM的创建者配置管理硬件厂商的物理交换机现实吗?目前不太现实,硬件交换机没有API,没有能力上报,如支持多少vlan,有多少口,各个厂商的交换机都不同,所以硬件交换机还得由网络管理员配置和管理,网络管理员得想办法把交换机的能力,如支持的vlan和交换机连接的服务器上的具体的网卡暴露给VM的创建者,VM流量出服务器时带什么vlan从哪个网卡出来由VM的创建都来决定。
- VM有几个网卡,网卡如何连接网络,流量怎么隔离和互通
VM的网卡数是创建者指定的,大部分网卡是virtio虚拟网卡,还可以用pci passthrough和SRIOV中的VF passthrough。如果用virtio类型的网卡VM要连接网络仿照原来的服务器连接网络的方式,得给服务器上创建一个虚拟交换机vswitch,把这些virtio类型的网卡连接到虚拟交换机上,再把服务器上硬件网卡加到vswitch上当作一个口,相当于从virtio拉了一根网络到vswitch上,在vswitch上配置vlan就可以达到流量隔离和互通的功能了。相当于把原先的接入层硬件交换机的功能下移到服务器里了,那么硬件交换机就没有access口了,必须配置成trunk口。SRIOV相当于网卡上内嵌了一个交换芯片,分为PF和VF,PF连接到vswitch,VF passthrough到VM,通过PF给VF配置vlan和MAC,也可能达到流量隔离和互通,而且能和virtio网卡互通。pci passthrough就麻烦了,要么硬件交换机像好早那样配置access口,要么把vlan进一步下称到VM里面,外面交换机统一配置。
- VM迁移保持IP和MAC不变,网络怎么才能继续通
VM迁移后IP和MAC是保持不变的,迁移到新服务器后,还能和其它VM互通,那么就要求所有服务器外面的网络都是二层vlan互通的。假如机架交换机终结vlan进行三层转发,那边VM迁移到新机架后肯定就不通了。所以现在对数据中心网络的要求就是大二层和扁平化。
- VM的流量如何出数据中心
首先VM的IP是创建者定义的,那么创建者还需要一个虚拟网关vgw,流量先到网关,再出数据中心。数据中心的公网地址,运行的路由和出口,只有物理网络的管理员知道。虚拟网关也是灵活创建和删除的,最终落实到了服务器上,那么物理网络的管理员需要告诉VM的创建者,那些服务器上的那些网卡用那些公网IP可以直达外网,VM的创建者创建一个虚拟网关到这些服务器,虚拟网关vgw上两个口,一个虚拟机的默认网关地址,另一个口连接通外网的服务器网卡,配置一个公网地址,做SNAT转换,VM就流量就可以出数据中心了。
- VM如何对外提供服务
如果VM要对外提供服务器,必须提供一个可以被公网路由到的地址,必须给虚拟机分配一个公网地址floating ip或者public ip。把public ip配置到虚拟网关上,访问到了虚拟网关再做DNAT交给VM。
overlay
VM迁移要求物理交换机都必须二层互通,第一,要支持足够的vlan,第二MAC表的容量要足够大。vlan总共4096个,数量是有限,VM太多了流量就没法隔离了,VM太多了,MAC地址太多,交换机的MAC表容量有限放不下。所以有个想法就是既然VM和网关都在服务器上,物理网络只需要把流量从源服务器上投递到对应的服务器上就行了,流量隔离由服务器上实现,物理网络就只需要区分服务器,不用再负责VM之间流量隔离了,也不需要学习VM的MAC地址,物理网络只需要保证服务器之间可达就行了,不管是二层还是三层,至少把物理交换机要学习的MAC量从VM数量级降低到了服务器数量级。有了这种思路物理网络又回到了原来的样子,物理的只管物理的了,不再需要把vlan等信息暴露给VM的创建者了,虚拟的只管虚拟的,只管服务器上的vswitch和vgw。问题就是VM的流量出服务器时得做手脚了让物理网络不感知,借用VPN的思想,对报文做封装,把原来的报文封装在内部,再加一个流量隔离的头部,最外部用服务器之间能通的方式,这样vlan只需要在服务器内部隔离用,出服务器时vlan 1对应隔离头一个值,到了另一台服务器,隔离头中的这个值转换成一个vlan值,这样vlan就在服务器内局部起作用了,一个服务器上VM不可能超了4096个vlan的上限。这一招两个问题都解决了,非常高明。物理网络就是underlay,虚拟网络就是overlay,独自运行,互不干扰,物理的由原来的网络管理员负责,方式不变,虚拟的由VM的创建者配置和管理。只要underlay能三层互通,overlay就可以二层互通了,VM迁移再也不受物理网络限制了,可以跨公网跨数据中心。当然VM跨数据中心迁移问题还是很多,假如从北京迁移到上海,但VM的public ip还在北京,public ip是可路由的,运营商肯定不好搞定,只能换public ip了,换了public要重新配置DNS,DNS还有缓存,还有存储怎么办?跨数据中心迁移不太现实。
总结
云计算就是资源池化然后灵活调度。计算虚拟化就是计算资源CPU和内存池化,然后灵活调度,假如服务器1上有1个CPU和9G内存,服务器2上有9个CPU和1G内存,池里有10个CPU,10G内存,想创建一台VM要5个CPU和5G内存,要考虑池里的资源和物理资源怎么对应,不允许overcommit,永远创建不出这个的VM,因为要考虑池里资源之间的关系。资源肯定是分散的,分散的就得考虑资源之间的关系,不可能把这两台服务器合并成一台服务器有10个CPU和10G内存。网络是提供位置连接服务的,路径太长,中间设备太多,是共享的,流量不可预见,一直在动态变化,资源使用情况不好统计,分配了资源不可保证,完全就是尽力而为。云计算网络的第一目标就是打通网络能配合计算资源的灵活调度,第二目标才是有质量保证的网络,例如两个VM之间有10G流量的能力,一个VIP有25G向外提供访问的能力。网络物理资源有服务器网卡数量,交换机,交换机接口数量,网线连接关系,资源之间的关系是非常复杂的,很难池化和调度,很难直接利用硬件的能力,所以说overlay才是王道,underlay提供最基本连接功能,overlay为VM之间构建灵活的连接服务。