作为一个neutron的使用者,配置neutron是整个openstack中最繁杂的,一是因为概念众多,而是因为网络拓扑架构和网络类型的差异,几种类型一起,不熟悉网络的人会发懵,网上有很多图传播率比较高,我一直是无图模式,因为我认为看文字让图在脑海里出现才会记忆深刻。
如果亲手配过openstack的人除了对ml2,各种plugins,driver印象深刻之外(这些在前面已经讲到),另一些东西大概会是:
flat, vlan, gre, vxlan, br-ex, br-int, br-tun, router, dhcp, dnsmasq, patch-int, patch-tun等有印象, 它们有的是配置的时候指定,有的可以在ovs命令行中看到。
flat network:
记得很久之前自己搭建openstack只是,neutron才刚起步不久,当时还很不成熟,只有flat dhcp比较多的验证过,于是大多用的flat dhcp network,
印象最深的是创建一个br100网桥, 网桥是二层网络(事实上可以认为高密度的网桥就是一个交换机),采用flat 模式时候,compute node创建的虚拟机都会桥接到
br100(或者别的虚拟网桥), 而网桥则会和真正的物理端口绑定,数据流看起来是这样的:
虚机网口 --> 网桥(br100) --> 物理网口 --> external net
ps: dhcp是二层网络的服务,所以flat dhcp 可以认为在网桥上提供了dhcp服务,新建立的虚机广播获得dhcp 服务点,获得ip
btw:
这里的虚拟网口实际上是虚拟机上的一个tap设备,
tap设备不直接连到br-int上,是因为openstack的iptables是在tap设备上实现的,而openstack使用的openvSwitch,连接到ovs中port的tap设备不支持iptables,
因此加了一个qbr的linux bridge,这里的bridge是linux本身的,和下面的br-int以及br100不同,它们是由ovs虚拟出来的。
vlan network:
使用flat 网络很稳定,配置简单,但是不能做不同租户之间的隔离,也不能防止网络flood,很容易想想,所有的虚机网络上都是相通或者不相通的(可以用security group控制一些port的操作,但远远不够), 在物理网络中,我们常使用vlan来隔离不同的project,在SDN中也一样,因此vlan最容易被人想到。
vlan也是在二层的,给发送的数据包打上tag,只有同一个vlan的虚机之间才能收到数据,起到隔离的作用:
虚拟机网口 --> 网桥(打上tag,vlan的玩法很多这只是其中的一种)--> 物理网口 --> 物理交换机/router --> 另一个机器的物理网口 ---> 网桥(解tag) --> 同一个project的vm
gre network
gre什么意思,通用路由封装
vlan的tag数目是有限制的(貌似是1到1024),小范围的话还ok,但是对于云来说,vlan就显得不够了,这个时候就有了GRE的使用, tunnel id可以更多,也更灵活,
GRE不是二层的,属于三层的隧道技术,使用GRE时,网络的数据看起来是:
虚拟机网口-->br-int(qbrxxx这个网桥忽略了,刚刚提到过,它是由于使用openvswitch而存在的) --> br-tun(隧道id 封装) -> 隧道 -->......
vxlan network
这个本人没有亲自试验过,概念上:
VXLAN全称Virtual eXtensible LAN,是一种覆盖网络技术或隧道技术(也需要br-tun)。VXLAN将虚拟机发出的数据包封装在UDP中,并使用物理网络的IP/MAC作为outer-header进行封装,然后在物理IP网上传输,到达目的地后由隧道终结点解封并将数据发送给目标虚拟机。
VxLan是 L2 over UDP,可以跨 L3边界,很巧妙地解决了 GRE tunnel 和 VLAN 存在的不足,让组网变得更加灵活
到这里,我们大概可以知道br-int, br-tun在neutron的位置,DHCP在二层,我们也可以想象它在br-int上的位子。
但是还有一些东西会让你觉得模糊,比如tap,veth,qvb,qvo,patch-tun,router,br-ex。
先吃饭。
mark
http://www.opencloudblog.com/?p=460
https://developer.rackspace.com/blog/neutron-networking-vlan-provider-networks/