1.为什么还需要linux bridge的部署方式?
2.哪一个网桥起着交换机的作用?
3.neutron如何实现私有网络的隔离

==================================================

很久之前写了一篇关于OpenStack Neutron解析的文章,那时只是粗略的写了一下把Neutorn的整体架构分析了一下,后来一直忙于其他事情,也就忘了去详细分析一下Neutron的架构。这次这篇算是完成未完之事,同时也是对之前的一个知识的总结及恢复。

OpenStack的Neutron自从由nova-network从Nova中分离出来之后,一直感觉十分的不稳定,而且初期其结构也是十分的复杂。很
多人刚刚接触Neutron,甚至刚刚接触OpenStack的时候,都是被困在Neutron异常复杂的机制。尤其当我们部署了一套由Neutron管
理网络的OpenStack环境时,会发现很多时候都是在解决各种莫名奇妙的问题,但我们纠察问题时,总是会涉及Neutron。所以,我总是一直认为在
实际的生产环境中,如果不是对于网络真的有着很特殊的需求,直接部署OpenStack的Essex版本,别人问我,我也是如是的回答。但是,我们如果是
想研究OpenStack的话,Neturon的可玩性还是很大的,尤其是其支持SDN等一些很前瞻性的特性。所以,对于Neturon我们有必要深入的
研究一番。
接着上次的那篇
章,我们再来重新回顾一下Neutron的架构,从物理上划分的话,我们的Neutron主要部署在两类节点上:Compute节点和Network节
点,而至于Controller节点,那不是主要的所在,因为几乎所有的组件都要在部署一个server服务在Controller节点上。从网络分层上
来看,主要分为二层网络L2-Agent,三层网络L3-Agent,以及DHCP-Agent。借用官网上几张图片,按照物理划分的方式,大致分析一下
Neutron架构。

Compute节点

这张图摘自官网,为Compute节点的网络架构及流程分析图。这张图中,我们可以清楚的看到网络相关的一些设备(其实就是一些进程或者系统接口)被分为
四类:TAP device,veth pair,Linux Bridge,Open vSwitch,这里其实用的Open
vSwitch的方式部署Neutron,而我之前也一直使用Open vSwitch部署的,但是这里却也是有着Linux
Bridge的,正如之前文章所言,这个是为了实现安全组功能,但Open vSwitch暂不支持OpenStack的实现方式,所以只好用Linux
Bridge实现qbr网桥作为一个折衷方案。接下来就是最为大头的Open
vSwitch,它在Neutron中构建了一个虚拟的交换机,而这个虚拟交换机由L2-Agent控制着,最终所有Compute节点中的虚拟交换机统
一构成一个巨大的虚拟交换机,统一控制虚拟机在二层网络的数据交换和接入功能。从图中我们可以看出每个Compute节点有两个Open
vSwitch网桥,其实br-int才是真正扮演交换机角色的,而br-eth1则是通过GRE通道在所有节点之间构成一个统一的通信层,实现各个
Compute节点上虚拟机之间的通信。

Network节点
接下来就是看看Network节点上的情况,下面的是Network节点的原理图:

这张图上,我们可以清楚看到Network节点被分为三大部分:Configured by L2-Agent,Configured by
L3-Agent,Configured by
DHCP-Agent,而L2-Agent那部分和我们在Compute节点讨论的是一致的,所以此处就忽略了。接着我们看L3-Agent,在
Neutron中,出现了私有网络这一概念,当然也是实际存在的。而依据以前的nova-network,是无法实现这一功能的,nova-
network顶多能使用VLAN技术实现网络隔离,而无法实现真正的私有网络。在物理网络中,我们要想实现一个私有网络,那么就必须有个路由器才行,而
L3-Agent正是Neutron中实现这个路由器而存在的(事实上,我们在Havana版本中部署的环境中,网络拓扑图中就很形象的显示了这些
routers),L3-Agent的底层实现采用的是Linux系统自带的iptables技术,通过动态的生成配置iptables规则,实现网络的
路由功能以及floatip功能。而每个用户都要一个私有网络的话,一个路由肯定是不够用的,接着就是Linux中namespace技术的用武之地了,
事实上,Neutron为每个私有网络都配置一个router和dnsmasq,而这个就是依靠namespace进行规则和配置的隔离。如下图所示:

现在,每个私有网络可以建立了,但是我们总不能为每个虚拟机手动配置私有ip的,所以这时候DHCP-Agent就显示了其用处,DHCP-Agent通过控制dnsmasq实现了DHCP功能,这样每个虚拟机在启动的时候就可以动态获取私有ip了。

-----------------

转载自:

http://www.aboutyun.com/thread-8716-1-1.html

http://panpei.net.cn/2014/05/22/openstack-neutron-analyse/

[转]OpenStack Neutron解析的更多相关文章

  1. [转]OpenStack Neutron运行机制解析概要

    转载自:http://panpei.net.cn/2013/12/04/openstack-neutron-mechanism-introduce/ 自从开学以来,玩OpenStack也已经3个月了, ...

  2. Openstack Neutron OVS ARP Responder

    ARP – Why do we need it? In any environment, be it the physical data-center, your home, or a virtual ...

  3. Openstack Neutron L2 Population

    Why do we need it, whatever it is? VM unicast, multicast and broadcast traffic flow is detailed in m ...

  4. 深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(一)

    VPC的概念与基于vxlan的overlay实现很早就有了,标题中的"新"只是一个和传统网络的相对概念.但从前年开始,不同于以往基础网络架构的新一代SDN网络才真正越来越多的走进国 ...

  5. openstack neutron中涉及的网络设备

    一.openstack neutron网络设备介绍 Bridge(网桥) 用于将两个LAN连接起来,主要靠的MAC地址学习机制.当网桥的Port收到包时会将包的源mac和port ID关联起来记入ma ...

  6. OpenStack Neutron配置虚拟机访问外网

    配置完成后的网络拓扑如下: 当前环境: X86服务器1台 Ubuntu 16.04 DevStack搭建OpenStack 网络拓扑: 外部网络:192.168.98.0/24 内部网络:10.0.0 ...

  7. openstack neutron L3 HA

    作者:Liping Mao  发表于:2014-08-20 版权声明:能够随意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 近期Assaf Muller写了一篇关于Neutro ...

  8. openstack Neutron分析(3)—— neutron-dhcp-agent源码分析

    1.neutron dhcp3个主要部件分别为什么?2.dhcp模块包含哪些内容?3.Dnsmasq配置文件是如何创建和更新的?4.DHCP agent的信息存放在neutron数据库的哪个表中? 扩 ...

  9. OpenStack Neutron 之 Load Balance

    OpenStack Neutron 之 Load Balance 负载均衡(Load Balance)是 OpenStack Neutron 支持的功能之一.负载均衡能够将网络请求分发到多个实际处理请 ...

随机推荐

  1. Spring集成线程池

    自己在程序中手动New很容易造成线程滥用,创建线程也是比较消耗资源的操作,所以建议如果有此需求,将线程池统一交给Spring框架进行管理. 如下: <!--Spring 集成线程池,不允许自己开 ...

  2. idea出现插件突然失灵解决方案

    File -> Settings  -> Plgins  把失效的插件重新去掉打钩并重新打钩即可

  3. 配置IDEA Scala环境

    http://snglw.blog.51cto.com/5832405/1634595

  4. SharePoint PowerShell创建一个GUID

    在编辑SharePoint后台XML架构时常需要在ID属性上填写一个GUID (Globally Unique Identifiers 全局唯一标识的简称): 我们可以打开SharePoint管理控制 ...

  5. 在C++中实现不可继承的类

    逛下bbs,“在C++中实现不可继承的类”,瞒有意思的. class NoInherite { friend class Seal; private: NoInherite(void) {} ~NoI ...

  6. iview框架select默认选择一个option的值

    给select加v-model,绑定的值为默认要显示的option的value值,展示的则为option的标签之间的内容,并且如果option的value是双引号,这里绑定的值也要双引号,否则不能正常 ...

  7. 4. Beego 框架之cookie与session

    what is cookie? cookie是存储在客户端的,用于标识客户身份的! what is session session 是存储在服务端,也是用于客户身份标识,用于跟踪用户会话. BeeGo ...

  8. python unittest 1

    今天开始研究python的unittest模块,为我们当前做的项目定制测试方案,包括unittest和自动化流程测试. python的unittest的基本使用方法如下:   1.import uni ...

  9. Android开发学习笔记-自定义组合控件

    为了能让代码能够更多的复用,故使用组合控件.下面是我正在写的项目中用到的方法. 1.先写要组合的一些需要的控件,将其封装到一个布局xml布局文件中. <?xml version="1. ...

  10. jQuery easyUI的datagrid,如何在翻页以后仍能记录被选中的行

    1.先给出问题解决后的代码 <%@ page language="java" import="java.util.*" pageEncoding=&quo ...