[转]OpenStack Neutron运行机制解析概要
转载自:http://panpei.net.cn/2013/12/04/openstack-neutron-mechanism-introduce/
自从开学以来,玩OpenStack
也已经3个月了,这段时间主要把精力投在了OpenStack
的安装部署和网络组件Neutron
的研究上了。这期间零零散散在安装部署和Neutron
运作原理上来回切换,有点在实践中学习的味道,虽然在安装部署的过程遇到了不少的问题,也一一都给解决了。然而,总是觉得对于Neutron
的机制理解的还是不够透彻。前一阵子刚刚部署好一套Havana
版本的系统,并开始投入使用。这阵子又开始投入OpenStack
的IPv6的试验中,因为需要对底层的路由机制进行彻底的了解,所以不得不又开始重新捋了一遍这方面的知识,在网上Google了一把资料,这次算是彻底的把Neutron
的运作机制彻底的理清楚了,之前那些半懂不懂的东西,现在也是觉得豁然开朗了。
这次在RDO找到了想要的资料,至少这篇资料对于之前的那些零散的知识做了一个很好的连贯,对于自己而言,算是把Neutron
讲解彻底明了,现在把那篇材料翻译下再糅合点自己的理解吧。
借用原资料上的一张架构图为开篇:
从这张架构图中,我们可以明显的看到有两个物理主机,计算节点和网络节点,这是因为采用了网络节点集中式的部署方式。至于为什么采用这种部署方式,那是因为自从E版之后,OpenStack
开始把network
功能从Nova
中分离出来,使之成为独立的Neutron
组件。而坑爹的是,分离后的版本,反而不支持网络分布式部署的特性了,所以目前的Grizzly
和Havana
版本都是只能使用网络集中式部署方案的,或者说,集群中只能存在一个部署网络功能的节点。
计算节点:虚拟机实例的网络
从图中看,这段网络包含了A、B、C这三段的流程。A就是虚拟机test0
的虚拟网卡,这块没什么好讲的。和它相连的B倒是值得好好讲一下。B是一个TAP
设备,通常是以tap
开头的一段名称,它挂载在Linux Bridge qbr
上面。那什么又是TAP
设备呢?Linux 中的虚拟网络中给出了这样的解释:
TAP是一个虚拟网络内核驱动,该驱动实现Ethernet设备,并在Ethernet框架级别操作。TAP驱动提供了Ethernet “tap”,访问Ethernet框架能够通过它进行通信。
总而言之,TAP
设备其实就是一个Linux内核虚拟化出来的一个网络接口。OK,我们明白了TAP
设备了,如果还是不明白可以查看TAP
的具体定义。接下来就是qbr
,这之前就说了,是一个Linux Bridge
,很是奇怪,我们在这个架构中,使用的OpenvSwitch
实现虚拟交换设备的,为什么会出现Linux Bridge
呢?OpenStack Networking Administration Guide给出了这样的解释:
Ideally, the TAP device vnet0 would be connected directly to the integration bridge, br-int. Unfortunately, this isn’t possible because of how OpenStack security groups are currently implemented. OpenStack uses iptables rules on the TAP devices such as vnet0 to implement security groups, and Open vSwitch is not compatible with iptables rules that are applied directly on TAP devices that are connected to an Open vSwitch port.
其实就是说,OpenvSwitch
不支持现在的OpenStack
的实现方式,因为OpenStack
是把iptables
规则丢在TAP
设备中,以此实现了安全组功能。没办法,所以用了一个折衷的方式,在中间加一层,用Linux Bridge
来实现吧,这样,就莫名其妙了多了一个qbr
网桥。在qbr
上面还存在另一个设备C,这也是一个TAP
设备。C通常以qvb
开头,C和br-int
上的D连接在一起,形成一个连接通道,使得qbr
和br-int
之间顺畅通信。
计算节点:集成网桥(br-int)的网络
刚才说到D(这也是一个TAP
设备)在br-int上面,现在轮到br-int
出场了,br-int
是由OpenvSwitch
虚拟化出来的网桥,但事实上它已经充当了一个虚拟交换机的功能了。br-int
的主要职责就是把它所在的计算节点上的VM都连接到它这个虚拟交换机上面,然后利用下面要介绍的br-tun
的 穿透功能,实现了不同计算节点上的VM连接在同一个逻辑上的虚拟交换机上面的功能。这个似乎有点拗口,其实就是在管理员看来,所有的VM都是连接在一个虚 拟交换机上面的,但事实上这些VM又都是分布在不同的物理主机上面。OK,回到D上面,D通常以qvo开头。在上面还有另一个端口E,它总是以patch-tun
的形式出现,从字面就可以看出它是用来连接br-tun
的。
计算节点:通道网桥(br-tun)的网络
br-tun
在上面已经提及了,这同样是OpenvSwitch
虚拟化出来的网桥,但是它不是用来充当虚拟交换机的,它的存在只是用来充当一个通道层,通过它上面的设备G与其他物理机上的br-tun
通信,构成一个统一的通信层。这样的话,网络节点和计算节点、计算节点和计算节点这样就会点对点的形成一个以GRE
为基础的通信网络,互相之间通过这个网络进行大量的数据交换。这样,网络节点和计算节点之间的通信就此打通了。而图中的G、H正是描画这一通信。
网络节点:通道网桥(br-tun)的网络
正如前面所说,网络节点上也是存在一个br-tun
,它的作用同计算节点上的br-tun
如出一辙,都是为了在整个系统中构建一个统一的通信层而存在的。所以,这一部分的网络同计算节点上的网络的功能是一致的,因此,也就没有必要多说了。
网络节点:集成网桥(br-int)的网络
网络节点上的br-int
也是起了交换机的作用,它通过I、J与br-tun
连接在一起。最终的要的是,在这个虚拟交换机上,还有其他两个重要的tap
设备M、O,它们分别同N、P相连,而N、P作为tap
设备则是分别归属两个namespace
router和dhcp,没错,正如这两个namespace
的名称所示,它们承担的就是router和dhcp的功能。这个router是由l3-agent
根据网络管理的需要而创建的,然后,该router就与特定一个子网绑定到一起,管理这个子网的路由功能。router实现路由功能,则是依靠在该namespace
中的iptables
实现的。dhcp则也是l3-agent
根据需要针对特定的子网创建的,在这个namespace
中,l3-agent
会启动一个dnsmasq
的进程,由它来实际掌管该子网的dhcp功能。由于这个两个namespace
都是针对特定的子网创建的,因而在现有的OpenStack
系统中,它们常常是成对出现的。
网络节点:外部网桥(br-ex)的网络
当数据从router中路由出来后,就会通过L、K传送到br-ex
这个虚拟网桥上,而br-ex
实际上是混杂模式加载在物理网卡上,实时接收着网络上的数据包。至此,我们的计算节点上的VM就可以与外部的网络进行自由的通信了。当然,前提是我们要给这个VM已经分配了float-ip
。
关于OpenStack Neutron的分析大致描述这些吧,后续的话会详细的写一些文章来详细介绍整个的详细流程和相关的实现方式。
[转]OpenStack Neutron运行机制解析概要的更多相关文章
- cocos2d-x C++ 原始工程引擎运行机制解析
新建一个工程,相信感兴趣的同学都想知道cocos引擎都是如何运行的 想知道是如何运行的,看懂四个文件即可 话不多说,上代码: 1.首先解释 AppDelegate.h #ifndef _APP_DEL ...
- Openstack neutron学习
最近在学习openstack neutron的东西,记录下自己的一些理解. 网络基础知识 Switches & Vlan交换机的作用是来连接设备,实现互通的.network host之间通过交 ...
- [转]OpenStack Neutron解析
1.为什么还需要linux bridge的部署方式? 2.哪一个网桥起着交换机的作用? 3.neutron如何实现私有网络的隔离 =================================== ...
- (十三)Maven插件解析运行机制
这里给大家详细说一下Maven的运行机制,让大家不仅知其然,更知其所以然. 1.插件保存在哪里? 与我们所依赖的构件一样,插件也是基于坐标保存在我们的Maven仓库当中的.在用到插件的时候会先从本地仓 ...
- PULL解析XML的运行机制详解
PULL解析简单易上手,基本上看一遍,基本上就会解析啦,但总是感觉对PULL解析的运行机制不是很了解,就总结了以下事件驱动到底是怎么执行的.. PULL: Android内置了PULL解析器.PULL ...
- 源码深度解析SpringMvc请求运行机制(转)
源码深度解析SpringMvc请求运行机制 本文依赖的是springmvc4.0.5.RELEASE,通过源码深度解析了解springMvc的请求运行机制.通过源码我们可以知道从客户端发送一个URL请 ...
- 深入解析java虚拟机-jvm运行机制
转自oschina 一:JVM基础概念 JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现.编译虚拟机的指令集与编译微处理器的指令集非常类似.Java虚拟机包括一套字 ...
- [Spark內核] 第42课:Spark Broadcast内幕解密:Broadcast运行机制彻底解密、Broadcast源码解析、Broadcast最佳实践
本课主题 Broadcast 运行原理图 Broadcast 源码解析 Broadcast 运行原理图 Broadcast 就是将数据从一个节点发送到其他的节点上; 例如 Driver 上有一张表,而 ...
- grunt源码解析:整体运行机制&grunt-cli源码解析
前端的童鞋对grunt应该不陌生,前面也陆陆续续的写了几篇grunt入门的文章.本篇文章会更进一步,对grunt的源码进行分析.文章大体内容内容如下: grunt整体设计概览 grunt-cli源码分 ...
随机推荐
- C# ListView控件使用简介
ListView控件在各类程序中,具有数据显示直观,操作方便的特点.所以使用率极高,但控件的各类参数众多,很多初学者不易掌握,在此列举该控件的一些常用方法,属性,希望对初学者有一定帮助. //2005 ...
- Eclipse安装图形JFrame,Jswing编程界面
打开eclipse,选择help--->install new software 来源http://www.cnblogs.com/xiaobo-Linux/p/7954274.html 打开网 ...
- 安卓开发笔记——Broadcast广播机制(实现自定义小闹钟)
什么是广播机制? 简单点来说,是一种广泛运用在程序之间的传输信息的一种方式.比如,手机电量不足10%,此时系统会发出一个通知,这就是运用到了广播机制. 广播机制的三要素: Android广播机制包含三 ...
- 软件设计模式之适配器模式(JAVA)
什么是适配器模式? 在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的.适配器能将因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存 ...
- 2. 自动化运维系列之Cobbler给Openstack节点安装操作系统。
preface 我们在一篇博文知道了如何搭建Cobbler,那么下面就通过Cobbler来安抓Openstack所有节点吧. 服务器配置信息如下: 主机名 IP 角色 Cobbler.node.com ...
- PHP文本操作
1. 用PHP获取文件指定行或者随机行 <?php /*** * 功能: 随机获取一个文件里的某一行 * 实现: 先将文件读进一个数组: 随机获取0~数组长度-1之间的一个随机数:以这个随机数做 ...
- 自动构建工具Gulp
摘要: gulp与grunt一样,都是自动构建工具.和grunt相比它更突出一个流的概念,任务是一个接一个执行的.今天就分享如何用gulp做自动化. 安装: gulp也是基于node环境,所以安装g ...
- HTML标签嵌套规则
摘要: 最近在整理项目时发现有些同事写的页面代码嵌套的太多,而且有些嵌套不对,比如<a><div>内容</div></a>.虽然功能实现了,但是对于浏 ...
- 给树莓派安装看门狗的两种方法,二代B
树莓派的CPU是保护有硬件看门狗的,可以通过安装模块和值守程序来实现看门狗防止树莓派死机. 安装方法一:watchdog.sh的源码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- 如何关闭Struts2的webconsole.html
出于安全目的,在禁用了devMode之后,仍然不希望其他人员看到webconsole.html页面,则可以直接删除webconsole.html 的源文件, 它的位置存在于: 我们手工删除 strut ...