openstack的网络服务组件为neutron,它的设计目标是实现“网络即服务”。
设计上:遵循基于“软件定义网络(SDN)"的灵活和自动化原则
实现上:充分利用linux中各类网络相关的技术linux
Neutron最为核心的工做是对二层物理网络的抽象与管理,物理服务器虚拟化后,虚拟机的网络功能由虚拟机网卡(vnic)提供,物理交换机也被虚拟化为虚拟交换机(vswitch),各个vnic链接再vswitch的端口上,最后这些vswitch经过物理服务器的物理网卡访问外部的物理网络。后端
网络虚拟化主要由分为三个部分:
网卡虚拟化:TAP,TUN,VETH
交换机虚拟化:linux bridge,open vswitch
网络隔离:network-namespaceapi
TAP设备:模拟一个二层的网络设备,能够接收和发送二层网络数据包
TUN设备:模拟一个三层的网络设备,能够接收和发送三层网络数据包
VETH:虚拟ethernet接口,一般以pair的方式出现,一端发出的网络数据包会被另外一端接收,能够造成两个网桥之间的通道安全
TAP/TUN提供了一台主机内用户空间的数据传输机制,它虚拟机了一套网络接口,这套接口和物理的接口无任何区别,能够配置IP,能够路由流量,不一样的是它流量只在主机内流通服务器
veth-pari,是成对出现的网络设备,一端链接协议栈,一端链接彼此,数据从一端出,一端进。它的特性经常用来链接不一样的虚拟网络组件,构建大规模的虚拟网络拓扑,好比链接linux bridge,ovs等,用于neutron,能够构建很是复杂的网络形态。网络
linux brigde:工做于二层的网络设备,功能相似物理交换机
brigde能够绑定linux上其余网络设备,并将这些设备虚拟化为端口
当一个网络设备被绑定到bridge上,就至关于物理交换机端口插入了一条链接终端的网线。
使用brctl命令配置linux brige架构
相比linux bridge的小规模的主机内部通讯场景,open vswitch更适合大规模的多主机通讯场景负载均衡
network namespace能建立多个隔离的网络空间,他们有独立的网络配置信息,例如网络设备,路由表,iptables等。
不一样的网络空间中的虚拟机运行的时候仿佛就在本身的独立网络中。ide
network namespace一般于vrf(virtual routing fowarding虚拟路由转发)一块儿工做,vrf是一种ip技术,容许路由表的多个实例同时在同一个路由器上共存。
使用veth能够链接两个不一样的网络命名空间,使用bridge能够链接多个不一样的网络命名空间。学习
做为一种虚拟网络服务,为openstack计算提供网络连通和寻址服务。
neutron对网络进行了抽象,以下所示:
neutron支持多种类型的Network,包括local,flat,vlan,vxlan和gre
就是子网,每一个子网在neutron中须要定义ip地址和范围
subnet必须与network关联,能够附加dns,网关ip,静态路由
端口
逻辑网络交换机上的虚拟交换端口
虚拟机经过port附着到network上
port能够分配ip地址和mac地址
链接租户内同一个network或者不一样network之间的子网,以及链接内外网
固定ip,分配到每一个端口上的ip,相似于物理环境中配置到网卡上的ip
floating ip(浮动ip)是external network建立的一种特殊的port,能够将floating ip绑定到任意network中的port上,底层会进行nat转发,将发送的浮动ip流量转发到该port上的对应固定ip上,外界能够经过浮动ip访问虚拟机,虚拟机也能够经过浮动ip访问外界
pytsical network,物理网络。
在物理网络环境中链接到openstack不一样节点的网络,每一个物理网络能够支持neutron中的一个或者多个虚拟网络。
openstack必须经过physical network才能和真实物理网络通讯
由openstack管理员建立,直接对应数据中心现有物理网络的一个网段
providr network一般使用vlan或者flat模式,能够在多个租户之间共享
自助服务网络,也叫租户网络或项目网络,它是由openstack租户建立的,彻底虚拟的,只在本网络内部连通,不能在租户之间共享
self-servcie network一般使用vxlan或者gre模式,能够经过virtual router的snat与provider network通讯
不一样的self-service network中的网段能够相同,相似于物理环境中不一样公司的内部网络
self-service network若是须要和外部网络通讯,须要经过router,相似于物理环境中公司上网须要经过路由器或者防火墙。
外部网络,也叫公共网络
它是一种特殊的provider network,链接的物理网络与数据中心或者internet相通,网络中的port能够访问外网
通常将租户的virtual router链接到该网络,并建立floating ip绑定虚拟机,实现虚拟机与外网通讯
Exernal netwok相似于物理环境中直接使用公网ip网段,不一样的是,openstack中external network对应的物理网络不必定能直连internet,有可能只是数据中心的一个内部私有网络。
安全组,他的做用是在neutron port上的一组策略,规定了虚拟机入口和出口流量的规则
安全组基于linux iptables实现,默认拒绝全部流量,只有添加了放行规则的流量才容许经过
每一个openstack项目中都有一个default默认安全组,默认包含以下规则-拒绝全部入口流量,容许全部出口流量
架构图
neutron架构原则
message queue:neutron-sever经过消息列队与其余的neutron agents进行交换消息,可是这个消息列队不会用于neutron-server与其余openstack组件(如nova)进行交换消息
l2 agent:负责链接端口(ports)和设备,使他们处于共享的广播域,一般运行在hypervisor上
l3 agent:负责链接tenant网络到数据中心,或者链接到internet.在真实的部署环境中,通常都须要多个l3 agent同时运行。
dhcp agent:用于自动配置虚拟机网络
advance service:提供lb(负载均衡),防火墙等服务
neutron的架构是基于插件的,不一样的插件提供不一样的网络服务,主要包含以下组件
neutron server=apis+plugins,经过这种方式,能够自由对接不一样网络后端能力
core plugin,主要是指ml2(modular layer 2) plugin,是一个开放架构,在plugin下,能够集成各个厂家,各类后端技术支持的layer 2网络服务。
ml2 plugin的drivers主要分为如下两种:
typer driver:定义了网络类型,每种网络类型对应一个type driver
mechanism driver:对接各类二层网络技术和物理交换机设备,如ovs,linux bridge等,从typer driver获取相关的底层网络信息,确保对应的底层技术可以根据这些信息正确配置二层网络。
serivce plugin用于实现高阶网络服务,如路由,负载均衡,防火墙和***服务等
l3 service plugin主要提供路由,浮动ip服务等。
neutron agent向虚拟机提供二层和三层的网络链接,完成虚拟网络和物理网络之间的转换,提供扩展服务等
neutron支持多种网络技术和类型,能够自由组合各类网络模型。
生产中,openstack主要使用以下两种网络模型
flat网络相似于使用网线直接链接物理网络,openstack不负责网络隔离
interface 2不带vlan tag
interface 2须要多个vlan,链接的物理交换机通常配置trunk模式,并容许这些vlan经过
使用linux bridge+vlan实现 provider network,网络流量能够分为以下几种:
南北向流量:虚拟机和外部网络通讯的流量
东西向流量:虚拟机之间的流量
provider network和外部网络之间的流量,由物理网络设备负责交换和路由
如下涉及计算节点1:
如下涉及物理网络设备
计算节点1:
物理设备
计算节点2
计算节点1
物理设备
如下涉及计算节点1
vxlan是虚拟可扩展的局域网,是一种oeverlay技术,经过三层网络来搭建虚拟的二层网络。
虚拟机运行在计算节点1上,使用self-service network 1,将数据包发送给internet上的主机
计算节点1
网络节点
(直接放图吧。。。。。)
头大。。头大。。网络看来真的是要学一生的