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