Neutron 的设计目标是实现“网络即服务”,为了到达这1目标,在设计上遵守了基于“软件定义网络”实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相干的技术。理解了 Linux 系统上的这些概念将有益于快速理解 Neutron 的原理和实现。
3节点(控制节点,计算节点,网络节点)部署模式
Vlan模式与Gre模式对照
bridge:网桥,Linux中用于表示1个能连接不同网络装备的虚拟装备,linux中传统实现的网桥类似1个hub装备,bridge相连的所有接口都可以收到数据包。而ovs管理的网桥1般类似交换机。
br-int:bridge-integration,综合网桥,经常使用于表示实现主要内部网络功能的网桥。
br-ex:bridge-external,外部网桥,通常表示负责跟外部网络通讯的网桥。
GRE:General Routing Encapsulation,1种通过封装来实现隧道的方式。在openstack中1般是基于L3的gre,即original pkt/GRE/IP/Ethernet
VETH:虚拟ethernet接口,通常以pair的方式出现,1端发出的网包,会被另外一端接收,可以构成两个网桥之间的通道。虚拟网络对VETH,实现了不同虚拟网络的联通。
qvb:neutron veth, Linux Bridge-side
qvo:neutron veth, OVS-side
TAP装备:摹拟1个2层的网络装备,可以接受和发送2层网包。
TUN装备:摹拟1个3层的网络装备,可以接受和发送3层网包。
iptables:Linux 上常见的实现安全策略的防火墙软件。
Vlan:虚拟 Lan,同1个物理 Lan 下用标签实现隔离,可用标号为1⑷094。
VXLAN:1套利用 UDP 协议作为底层传输协议的 Overlay 实现。1般认为作为 VLan 技术的延伸或替换者。
namespace:用来实现隔离的1套机制,不同 namespace 中的资源之间彼此不可见。
对Neutron来讲,在Havana版本前,支持Linux Bridge和Openvswitch两种插件。后来发现直接通过Neutron去调用插件的方式,有些不够理想。
在H版本以后,社区就推出1个Neutron插件 Modular Layer 2 (ml2) plugin,这个插件底下调用linux bridge和ovs两个Driver。
1. local
2. flat
3. vlan
4. vxlan
5. GRE (linux bridge 不支持)
那末这5种网络里,local网络,主要是用于测试,GRE网络,目前社区已基本处于保护,大家基本也能够不斟酌。所以大家只需要了解其中3种就能够。
类似于各个计算、存储节点被虚拟化为计算、存储资源池,Openstack所在的全部物理网络在Neutron中也被虚拟化为网络资源池。通过对网络资源的划分和可扩大性,Neutron能够为每一个租户提供独立的虚拟网络环境。
1)位于最上层的Neutron Server充当1个门派中的“掌门人”角色(RESTful Server),负责接受来自外部门派(项目)的API要求,比如Nova API创建网络的要求。
2)位于中间层的Neutron plugin充当1个门派中的“信使”角色,负责转达最高层指令给下面的人。
3)位于下层的Neutron Agent充当1个门派中“干活”角色,负责履行1些具体的任务和操作。
1)neutron-server作为Neutron中的唯逐一个服务进程,承当着接受用户REST API要求并分发处理的任务。
2)Exten API :L3( router)、L4(tcp/udp firewall)及L7(load balancer)
3)neutron-server(相当于REST API Server)负责将收到的REST API要求交由Plugin来进行相干处理。可以看出,这其实就是1个web服务器要完成的事情,将http要求转化为对资源的操作(通过plugin的方法调用),并返回响应。
Neutron分别提供了2层(L2)vSwitch交换和3层(L3)Router路由抽象的功能,对应于物理网络环境中的交换机和路由器实现。具体实现了以下功能:
1) Router:为租户提供路由、NAT等服务。
2)Network:对应于1个真实物理网络中的2层局域网(VLAN),从租户的的角度而言,是租户私有的。
3) Subnet:为网络中的3层概念,指定1段IPV4或IPV6地址并描写其相干的配置信息。它附加在1个2层Network上,指明属于这个network的虚拟机可以使用的IP地址范围。
Neutron中最为核心的工作便是对2层物理网络network的抽象与管理。
虚拟机的网络功能由虚拟网卡(vNIC)提供,Hypervisor可以为每一个虚拟机创建1个或多个vNIC,从虚拟机的角度动身,这些vNIC同等于物理的网卡,为了实现与传统物理网络1样的网络功能,与物理网卡1样,Switch也被虚拟化成虚拟交换机(OpenvSwitch),各个vNIC连接在vSwitch的端口(br-int)上,最后这些vSwitch通过物理服务器的物理网卡访问外部的物理网络。
对1个虚拟的2层网络结构而言,主要是完成两种网络装备的虚拟化,即物理网卡和交换装备。在Linux环境下网络装备的虚拟化主要有以下几种情势:
TAP/TUN/VETH
提到Neutron的虚拟网络功能实现,不能不先提基于Linux内核级的虚拟装备。
TAP/TUN/VETH是Linux内核实现的1对虚拟网络装备,TAP工作在2层,收发的是 MAC 层数据帧;TUN工作在3层,收发的是 IP 层数据包。Linux 内核通过TAP/TUN装备向绑定该装备的用户程序发送数据,反之,用户程序也能够像操作硬件网络装备1样,通过TAP/TUN装备接收数据。
基于TAP装备,实现的是虚拟网卡的功能,当1个TAP装备被创建时,在Linux的装备文件目录下将会生成1个对应的字符装备文件(/dev/tapX文件),而运行其上的用户程序即可以像使用普通文件1样打开这个文件进行读写。
VETH装备总是成对出现的,接收数据的1端会从另外一端发送出去,理解为1根虚拟的网线便可。
Linux Bridge
Linux Bridge(Linux内核实现的网桥)是工作在2层的虚拟网络装备,功能类似于物理的交换机。
它的实现原理是,通过将其他Linux网络装备绑定到本身的Bridge上,并将这些装备虚拟化为端口。为何我们已有了OVS,还要有Linux Bridge 呢?这是由于Linux Bridge实现了qbrxxx装备,提供了OVS没法支持的安全组(Security Group)功能。
Open vSwitch
对云计算中的虚拟网络而言,交换装备的虚拟化是很关键的1环,vSwitch负责连接vNIC与物理网卡,同时也桥接同1物理服务器内的各个VM的vNIC。
因此,我们可以像配置物理交换机1样,将接入到OpenvSwitch(需要指出的是在多个以上时,vSwitch是散布式虚拟交换机)上的各个VM分配到不同的VLAN中实现网络隔离,并且,我们也能够在OVS端口上为VM配置QOS,同时OVS也支持包括NetFlow、sFlow等标准的管理接口和协议。从而,通过这些接口可以实现VM流量监控的任务。
运行在云环境中各种或相同虚拟化平台上的多个vSwitch实现了散布式架构的虚拟交换机。1个物理服务器上的vSwitch可以透明的与其他服务器上的vSwitch连接通讯。
neutron具体技术实现
上一篇 spark之RDD