Neutron
文章平均质量分 77
chengqiuming
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
python之定制个性化的邮件格式方法
一 点睛通过邮件传输简单的文本已经无法满足我们的需求,比如我们时常会定制业务质量报表,在邮件主体中会包含HTML、图像、声音以及附件格式等,MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)作为一种新的扩展邮件格式很好地补充了这一点,更多 MIME知识见http://zh.wikipedia.org/wiki/MIME。下面介绍几个Py...原创 2019-02-17 11:10:25 · 4284 阅读 · 0 评论 -
Core Service处理HTPP Request的基本流程
一个WSGI Application如果是一个class的实例,那么这个class必须实现一个回调函数:__call__()。当一个HTTP Request过来时,WebServer就会调用这个实例(WSGI Application)的”__call__”函数进行响应。对于class APIRouter来说,它的__call__函数,定义在它的父类class Router中,如下图所示:要想了解H...原创 2018-06-13 19:14:05 · 532 阅读 · 0 评论 -
Neutron针对Core Service的处理函数的映射
针对“查询资源列表的信息”的API请求,Neutron的函数映射关系用如下一行代码搞定:mapper.connect('index', '/', controller=Index(RESOURCES))这句话所反映的url如下图:其中Index是一个class。class Index的代码如下:class Index(wsgi.Application): def __init__(self...原创 2018-06-13 18:57:35 · 706 阅读 · 0 评论 -
class routes_mapper.Mapper的基本用法
介绍class routes_mapper.Mapper的基本用法,需要从下面这句代码入手:mapper.connect('index', '/', controller=Index(RESOURCES))代码中的三个参数的基本含义,如下表:这三个参数,其实表达了一个规则:一个HTTP Request过来时,应该执行哪个函数(或者是一个符合WSGI Application规范的class的实例)的...原创 2018-06-13 18:43:02 · 679 阅读 · 0 评论 -
Neutron资源与Service API之间的关系
Neutron的Service API,反映的都是针对Neutron资源(比如network、subnet等)的动作(比如增加、删除等)。在Neutron的Service API中都习惯把Neutron的资源写作复数,比如:networks、subnets等等。Neutron的资源与Service API之间的对应关系,以networks为例,如下图:https://developer.opens...原创 2018-06-13 18:38:50 · 610 阅读 · 0 评论 -
Core Service处理HTTP Request的函数映射
对于Core Service的WSGI Application而言,一个HTTP Request过来以后,基本的处理流程是在父类class Router中完成的。class Router处理到最后,是从它的成员变量map中查找到对应的处理函数并执行它。mapper本质上是class Router的成员变量。app=mapper[‘controller’]class Router的成员变量map是在...原创 2018-06-13 18:33:48 · 539 阅读 · 2 评论 -
Multi-Segment应用——VTEP位于TOR交换机上
VXLAN的实现模型如下图:在这个实现模型中,VTEP(VXLAN Tunnel End Point)是位于计算节点的br-tun上,但是在实际应用中,VTEP也有位于TOR交换机的情形。VTEP位于TOR上,而不是Host内的br-tun。我们把这一段组网抽象成下图:从用户视角,这是一个VXLAN网络,所以Neutron对外暴露的接口(模型)仍然是Network。但是在具体实现时,VTEP位于T...原创 2018-05-30 19:55:56 · 5969 阅读 · 0 评论 -
Multi-Segment应用——一个Network多个Subnet
这是一个土豪的故事。一般来说,一个Network对应一个Subnet,这是符合人们认知的。在这个二层网络里,大家属于一个三层子网,这样无论是从二层通还是三层通的概念来讲,都是符合常理的。但是,一个Network里面,如果虚拟机(或者Host)太多,会产生问题,比如:这个Network的二层广播风暴,网络里面交换机的ARP表项容量限制,等等。所以,一般来说,一个Network,其规划容纳的VM的数量...原创 2018-05-30 19:51:50 · 3258 阅读 · 1 评论 -
Multi-Segment的困惑
Neutron中,有几个与Multi-Segments相关的字段和模型比较令人困惑。第1点:在Network Model里有一个属性subnets,它是一个array(数组)类型,即与Network关联的subnet群。这意味着什么?如下图所示:如果没有路由器,一个Network里面的多个Subnet就不能互通。既然不能互通,那还要network干什么?大家属于一个Network,毕竟有一个强烈的...原创 2018-05-30 19:41:44 · 2790 阅读 · 0 评论 -
eventlet协程库
greenlet是一个协程库,先看一个例子from greenlet import greenletdef T1(): print("T1.1") gr2.switch() print("T1.2") def T2(): print("T2.1") gr1.switch() print("T2.2") gr1 =gre...原创 2018-06-05 21:39:44 · 578 阅读 · 1 评论 -
Core Service的WSGI Application
先看看下面这个函数: def _run(self, application, socket): """Start a WSGI server in a new green thread.""" eventlet.wsgi.server(socket, application, max_size=self....原创 2018-06-12 18:42:48 · 505 阅读 · 1 评论 -
greenlet协程库
eventlet也是一个协程库,它封装了greenlet,这个封装有两层含义:一个是封装了协程的调度,另一个含义是它是一个网络处理相关的协程库。为什么说它是一个与网络处理相关的协程库呢?先看下面这个例子。import eventletimport timedef test(s): print(s+"begin") time.sleep(1) print(s+"end")...原创 2018-06-06 19:41:17 · 566 阅读 · 0 评论 -
Web Server的启动过程
一 Neutron Server的范围先看下图:图中,加粗虚框内,自Web Server以下,从urlmap app部件开始,包括Version Filter Apps、Extension Service Filter Apps、Core Service App等,都是符合WSGI规范的Application。对于这些Application而言,最重要的事情,是将Neutron RESTful A...原创 2018-06-07 22:13:11 · 2361 阅读 · 0 评论 -
Neutron的Web Server启动过程中的关键参数
Web server启动过程的关键代码如下几句:self.pool = eventlet.GreenPool(1)self._server = self._service.pool.spawn(self._service._run,self._application,dup_sock)def _run(self, application, socket): """Start a WSG...原创 2018-06-08 21:02:44 · 539 阅读 · 0 评论 -
AMQP的几种通信模式
基于AMQP的消息转发模型,有几种通信模式:1 远程过程调用(RPC);2 发布-订阅(Publish-Subscribe);3 广播后两种的实现比较简单,发布订阅只需采用Topic Exchange消息转发模型即可,广播只需采用Fanout Exchanges消息转发模型即可。稍微复杂一点的是RPC,下面就针对RPC做一个介绍。RPC(Remote Procedure Call Protocol...原创 2018-06-01 19:54:19 · 4108 阅读 · 0 评论 -
AMQP消息转发模型
把AMQP Server暂时仍然当做一个黑盒子,如下图所示:图中,P1发送的消息,经过AMQP Server转发以后,达到Cn,Pn发送的消息,经过AMQP Server转发以后,达到C1.在这个消息转发过程中,起关键的“路由标识”作用的是一个字符串Routing Key。P1发送消息时会带上一个Routing Key rk_abc,而Cn也已经(提前)告知了AMQP Server,它希望接收消息...原创 2018-06-01 19:48:49 · 1013 阅读 · 0 评论 -
AMQP的基本概念
AMQP基本概念如下图AMQP把通信双方(发送方和接收方)分别称为Producer和Consumer。Producer1(简称P1)期望把消息发到Consumer_n(简称Cn)。但是,P1如何才能将消息发送给Cn呢?这中间需要经过Message Broker的处理和传递。AMQP中,承担Message Broken功能的就是AMQP Server。也正是从这个角度讲,AMQP的Producer和...原创 2018-06-01 19:33:38 · 1255 阅读 · 0 评论 -
Neutron的Web框架与规范
Neutron首先是一个Web Server,那么它就存在一个Web框架选型问题。Neutron选用了两种开源的Web框架。早期版本,Neutron使用了Paste+PasteDeploy+Routes+WebOb组合,作为自己的Web框架。从kilo版本开始,Neutron引入了另一个Web框架pecan。pecan相对于前者,使用起来比较简单。不过所谓的简单,在Neutron应用中也仅仅体现在...原创 2018-06-01 19:18:04 · 1076 阅读 · 0 评论 -
Neutron的并发机制
Neutron(Openstack)的编程语言是Python,这是一种解释性语言,它的解释器有几种实现版本,比如CPython、Jython、IronPython等,其中CPython最为流行。我们一般说的Python指的是CPython(Openstack选用的也是CPython)。CPython由于GIL(Global interpreter lock)的原因,一个进程内同时只能运行一个线程,...原创 2018-06-01 18:53:15 · 886 阅读 · 0 评论 -
Extension Service处理HTTP Request的基本流程
class ExtensionMiddleware是Extension Service的WSGI Application class,它的类图如下图所示。一个符合WSGI Application规范的class,最重要的一点是实现回调函数__call__.从这个类图中,可以看到,class ExtensionMiddleware重载了它的父类的__call__函数,所以它的父类基本没什么作用。cl...原创 2018-06-14 21:50:29 · 738 阅读 · 0 评论 -
Extension Service的WSGI Application
Extension Service的WSGI Application与Core Service的相比,有几个不同点。1 加载所有的Extension Service(因为Extension Service是多个,而不是1个)。2 为每一个Extension Service构建映射规则:Extension Service API(RESTful)与处理函数之间的映射规则。3 因为Extension ...原创 2018-06-14 18:46:02 · 417 阅读 · 0 评论 -
Extension Service的加载
Extension Service从字面意义上来理解,就是可扩展的Service——谁都可以扩展的Service、谁都可以写自己的Service。既然谁都可以扩展,那么Neutron必须得知道你写的代码在哪个目录,否则它到哪里加载你的代码呢?Neutron提供了两种告知Extension Service代码目录的方法。一种是在配置文件“neutron.conf”中,配置自己的Extension S...原创 2018-06-14 18:43:38 · 830 阅读 · 0 评论 -
Neutron架构分析
Neutron是Openstack的核心组件,其官网对其给出的定位是:NaaS(网络即服务)。NaaS有两层含义:1 对外接口:Neutron为Network、Subnet、Port、Router等网络资源建立了逻辑模型,并提供了这些模型的RESTful API、CLI(命令行)、GUI(图形化用户接口)。2 内部实现:利用Linux原生的以及其他厂商(或者开源)的虚拟网络功能,再加入一些硬件网络...原创 2018-05-31 21:40:45 · 10324 阅读 · 0 评论 -
Bridge的VLAN接口模式
一个Bridge可以抽象为两部分:交换模块(基于VLAN ID做报文交换)和接口,如下图所示:在此介绍接口在报文的进与出时,Bridge接口关于VLAN ID的处理方式。处理方式有三种模式:Access、Trunk、Hybrid。这三种模式都是报文在进入或者离开接口时,针对报文的VLAN ID的处理策略。一 名词介绍Tag报文:指的是报文中有VLAN ID,简称Tag。Untag:指的是报文中没有...原创 2018-05-24 18:40:03 · 18206 阅读 · 0 评论 -
VLAN aware VM引发的问题
VM能够发送和接收带有VLAN Tag的报文,这种情况叫VLAN aware VM。一个可以VLAN aware 的VM,意味着它可以接入多个Network(VLAN),如下图所示。在Neutron模型中并没有VM的概念,而是以Port指代。我们先这样简单的理解port,Port是VM的虚拟网口。在没有引入Trunk Networking特性之前,Neutron的模型设计中有这样的约束:一个Por...原创 2018-05-24 21:52:23 · 1552 阅读 · 0 评论 -
Neutron的Port详解
Port资源模型,如下表所示:Port是一个逻辑模型,但是同时我们也可以理解为其代表一个虚拟网口。所以,一个虚拟机需要绑定Port,一个路由器也需要绑定Port。既然是一个虚拟网口,那么理所当然,它就具备两个基本属性:IP地址和MAC地址。一 IP地址Port模型中,表示IP地址的是一个数组(fixed_ip),表明这个Port可以有多个IP地址。在这个数组中,每一个元组由两个字段组成:ip_ad...原创 2018-05-26 19:50:39 · 11800 阅读 · 1 评论 -
Subnet资源池
Subnet资源池(Subnet Pool)是Openstack Kilo版本加入的特性,从模型角度来说,它是一个独立的模型,模型名是subnetpool。Subnet模型中的subnetpool_id字段关联的就是这个模型字段。Subnet Pool中的Subnet与Neutron的模型Subnet不是同一个概念,为了避免混淆,后文中用子网网段表示Subnet Pool中的Subnet,用Sub...原创 2018-05-26 19:46:13 · 1800 阅读 · 0 评论 -
Trunk Networking方案内外VID的转换
Trunk Network的实现模型如下图br-trunk和br-int之间的接口和接口模式分两类:Parent Port和Sub Port,分别对应Trunk模型中的Parent Port和Sub Port。这两类接口都是Access模式。需要特别指定的是,1个需要aware VLAN的VM,对应一个Trunk Bridge,两者是1:1的关系。下面通过一个计算节点内外VLAN ID转换的示例来...原创 2018-05-25 19:30:51 · 728 阅读 · 0 评论 -
Trunk Networking
为了解决VLAN awre VM的问题,Openstack引入了Trunk Networking方案。Trunk Networking方案需解决的问题有:1 VM aware的VLAN ID,在Host内部不能冲突。2 VM aware的VLAN ID,不需要在Host之间的物理网络透传。3 不要打破原来的Network、Port的模型,否则会引发Neutron代码大修改。下面开始介绍Trunk ...原创 2018-05-25 19:28:01 · 985 阅读 · 0 评论 -
Neutron的Network资源详解
Network是Neutron的一个二层网络的资源模型,它支持的网络类型有:Local、Flat、VLAN、VXLAN、GRE、Geneve等。其中Local仅仅是主机内的网络类型,只会用于测试,不会用于生产环境。VXLAN、GRE、Geneve属于隧道类型网络,Flat和VLAN属于非隧道类型网络。Network的资源模型,如下表所示:从某种意义上说,Network是Neutron模型的一个“根...原创 2018-05-21 21:56:36 · 2021 阅读 · 0 评论 -
Neutron的租户隔离实现方案
Neutron针对数据面、管理面、故障面,分别设计了不同的隔离方案,下面逐个介绍。一 数据面的租户隔离方案Neutron在计算节点和网络节点都涉及数据转发,所以这两个节点也都涉及数据转发的租户隔离。计算节点实现模型如下图:上图中,VM1-1和VM1-2分属两个Tenant,当然,也就分属于两个Tenant Network。我们看到,涉及租户网络隔离的组件有:br-ethx/tun(1个)、br-i...原创 2018-05-20 20:28:27 · 2226 阅读 · 0 评论 -
Neutron资源的租户隔离介绍
Neutron是一个支持多租户的系统,所以租户隔离是Neutron必须支持的特性。在Neutron的资源模型中,有一个字段:tenant_id。这个字段的目的就是为了资源的租户隔离。说到租户,稍微有点尴尬,因为从Newton版本开始,tenant_id存在的意义只是为了后向兼容,变成了一个历史的印记而已。它与模型中的另外一个字段project_id的解释都是:The ID of the proje...原创 2018-05-20 16:35:21 · 1706 阅读 · 0 评论 -
Netron的网络实现模型小结
从部署的角度来看,Neutron分为三类节点:控制节点、网络节点、计算节点。网络节点和计算节点为VM构建了具体的网络,控制节点则对这些网络进行管理。Neutron的实现模型如下图:控制节点的Neutron进程与网络节点、计算节点中的各个Agent进程互相配合,对内完成对网络节点、计算节点中的虚拟网元的配置管理,对外提供RESTful等服务接口。Neutron进程与Agent进程之间的通信协议是RP...原创 2018-05-20 15:14:19 · 1734 阅读 · 0 评论 -
Neutron控制节点实现模型
计算节点与网络节点承担着Openstack中网络构建的任务,实现网络功能的是两个节点中的各个Bridge、DHCP Service、Router等虚拟网元。控制节点并没有实现具体网络功能,它只是对各种虚拟网元做管理配合的工作。控制节点部署着Openstack的各种进程,对于Neutron来说,它的进程名是neutron-server,如下图所示:图中,不仅画出了控制节点,还画出了计算节点和网络节点...原创 2018-05-20 14:56:01 · 600 阅读 · 0 评论 -
网络节点的实现模型
计算节点的实现模型构建了各种类型的二层网络。属于同一个二层网络的VM可以进行二层通信。如果一个VM想访问二层网络之外的世界怎么办?如下图场景:图中,一个VM1-1想访问www.onap.org,我们看到,它必须要能到达数据中心(DC)的网管(GW)才能访问www.onap.org。那么VM1-1如何达到GW呢?如下图所示:这里涉及了网络节点,我们暂时不看网络节点里的内容,先当做一个Host,当做一...原创 2018-05-20 14:51:37 · 5267 阅读 · 0 评论 -
Neutron的Router简介
Route的资源模型如下表:Route可以简单地抽象为三部分:端口、路由表、路由协议处理单元,如下图:如果不看内部实现细节,单从外部人们能感受到的内容来看,Router最关键的两个概念就是端口和路由表。Router中使用routes字段表示路由表,这是一个数组,每个元组的类型是[destination,nexthop],其中destination表示目的的网段(CIDR),nexthop表示下一跳...原创 2018-05-26 19:54:48 · 2526 阅读 · 0 评论 -
Router的外部网关
Router使用字段external_geteway_info表达外部网关信息,那么这个外部网关指的是什么呢?如下图:图中,位于Neutron管理的内部网络中有一个虚拟机(VM)的IP地址是10.10.10.10,它要访问位于外部网络(公网)的网站www.openstack.org,(IP地址是104.20.110.33),需要经过公网中的路由器Router_2才能到达。Router_2通过Por...原创 2018-05-26 20:02:17 · 2760 阅读 · 0 评论 -
Router小结
Neutron的Router模型中,蕴含着三种路由:直连路由、默认静态路由和静态路由。前两种路由不需要显示地增加路由表项,也不会体现在路由表(routers)中,当增加一个Port时(add_router_interface),Neutron会自动增加一个直连路由;当增加一个外部网关信息时(external_gateway_info),Neutron会增加一个默认静态路由。路由表中的路由也是静态路...原创 2018-05-29 18:35:20 · 1314 阅读 · 0 评论 -
Floating IP
Neutron将关联DNAT功能的建模放在模型Floating IP中,我们摘取其中与DANT密切相关的字段,如下表:表中字段所体现组网形式,如下图:Floating IP从模型的角度,只与Router关联(关联字段是router_id),也就是上图Router_1。图中其余部件,是为了与Router_1一起构建DNAT用例的组网图。Floating IP的字段port_id,指的是图中的Port...原创 2018-05-29 18:34:03 · 3192 阅读 · 0 评论 -
Router的路由表
Router中使用routers字段表示路由表,这是一个数组,每个元组的类型是[desnination,nexthop],其中destination表示目的网段(cidr),nexthop表示下一跳的IP,举例如下:“routes”:[ { “destination”:”10.50.10.0/24” “nexthop”:”10.50.10.1” }...原创 2018-05-29 18:32:39 · 4201 阅读 · 0 评论
分享