openstack的网络服务组件为neutron,它的设计目标是实现“网络即服务”。
设计上:遵循基于“软件定义网络(SDN)"的灵活和自动化原则
实现上:充分利用linux中各种网络相关的技术
Neutron最为核心的工作是对二层物理网络的抽象与管理,物理服务器虚拟化后,虚拟机的网络功能由虚拟机网卡(vnic)提供,物理交换机也被虚拟化为虚拟交换机(vswitch),各个vnic连接再vswitch的端口上,最后这些vswitch通过物理服务器的物理网卡访问外部的物理网络。
网络虚拟化主要由分为三个部分:
网卡虚拟化:TAP,TUN,VETH
交换机虚拟化:linux bridge,open vswitch
网络隔离:network-namespace
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等。
不同的网络空间中的虚拟机运行的时候仿佛就在自己的独立网络中。
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
网络节点
(直接放图吧。。。。。)
头大。。头大。。
网络看来真的是要学一辈子的
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。