描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111584483
内容简介
本书共8章。第1章讲解Neutron概况。第2章介绍了Linux的虚拟网络知识。第3章讲述了Neutron的实现模型。第4章讲述的Neutron的资源模型。第5章讲述了Neutron的基本架构,以及架构中所涉及的Web机制、通信机制、并发机制等。第6章深入介绍Neutron启动服务的流程、通信机制与实现等。第7章深入分析了Neutron插件的驱动、消息处理机制。第8章详细讲解了Neutron代理(OVS与L3)的实现。
目 录
目 录?Contents
序
前 言
第1章 Neutron概述 1
1.1 Neutron的由来 1
1.2 Neutron的特性与应用 3
1.2.1 基于OpenStack的应用 4
1.2.2 基于SDN的应用 6
1.3 Neutron的扩展能力 8
1.4 本章小结 9
第2章 Linux虚拟网络基础 11
2.1 tap 11
2.2 namespace 13
2.3 veth pair 16
2.4 Bridge 17
2.5 Router 19
2.6 tun 21
2.7 iptables 24
2.7.1 NAT 27
2.7.2 Firewall 30
2.7.3 mangle 32
2.8 本章小结 32
第3章 Neutron的网络实现模型 34
3.1 Neutron的三类节点 34
3.2 计算节点的实现模型 35
3.2.1 VLAN实现模型 37
3.2.2 VXLAN实现模型 41
3.2.3 GRE实现模型 44
3.2.4 计算节点的实现模型小结 45
3.3 网络节点的实现模型 46
3.4 控制节点的实现模型 49
3.5 本章小结 49
第4章 Neutron的资源模型 51
4.1 Neutron资源的租户隔离 51
4.1.1 Neutron语境下租户隔离的
含义 52
4.1.2 Neutron在租户隔离中的无限
责任和有限责任 53
4.1.3 Neutron的租户隔离实现方案 54
4.1.4 租户隔离小结 56
4.2 Network 57
4.2.1 运营商网络和租户网络 58
4.2.2 物理网络 61
4.2.3 Network小结 64
4.3 Trunk Networking 65
4.3.1 Bridge的VLAN接口模式 65
4.3.2 VLAN aware VM与Trunk
Networking 69
4.3.3 Trunk Networking小结 78
4.4 Subnet 79
4.4.1 IP核心网络服务 80
4.4.2 Subnet资源池 81
4.5 Port 83
4.6 Router 86
4.6.1 Router的外部网关 88
4.6.2 增加Router接口 89
4.6.3 Router的路由表 91
4.6.4 Floating IP 92
4.6.5 Router小结 94
4.7 Multi-Segments 95
4.7.1 Multi-Segments的困惑 96
4.7.2 Multi-Segments的几个应用
场景 98
4.8 BGP VPN 102
4.8.1 BGP VPN的使用场景 103
4.8.2 BGP VPN的实现模型 104
4.8.3 BGP VPN的资源模型 105
4.9 本章小结 109
第5章 Neutron架构分析 112
5.1 Neutron的Web框架与规范 115
5.2 Neutron的消息通信机制 117
5.2.1 AMQP基本概念 118
5.2.2 AMQP的消息转发 118
5.3 Neutron的并发机制 122
5.3.1 协程概述 122
5.3.2 Neutron中的协程 124
5.4 通用库Oslo 131
5.5 本章小结 131
第6章 Neutron的服务 132
6.1 Neutron启动一个Web Server 133
6.1.1 Web Server的启动过程 133
6.1.2 Web Server启动过程中的
关键参数 135
6.1.3 Web Server的进程与协程 138
6.1.4 小结 142
6.2 加载WSGI Application 142
6.2.1 api-paste.ini对应的WSGI
Application 144
6.2.2 neutronapi_v2_0 section 146
6.3 Core Service API(RESTful)的
处理流程 148
6.3.1 Core Service的WSGI
Application 149
6.3.2 Core Service处理HTPP Request的基本流程 149
6.3.3 Core Service处理HTTP Request的函数映射 153
6.3.4 小结 162
6.4 Extension Service API(RESTful)的处理流程 164
6.4.1 Extension Service的类图与加载 164
6.4.2 Extension Service的WSGI Application 167
6.4.3 Extension Service处理HTTP Request的基本流程 169
6.4.4 Extension Service处理HTTP Request的函数映射 171
6.4.5 小结 176
6.5 Plugin的加载 178
6.5.1 Core Service Plugin的加载 179
6.5.2 Extension Services Plugin的加载 180
6.6 RPC Consumer的创建 181
6.6.1 Neutron Plugin创建RPC Consumer的接口 182
6.6.2 Neutron Server启动RPC Consumer 183
6.7 本章小结 187
第7章 Neutron的插件 190
7.1 核心插件 191
7.1.1 ML2插件简介 193
7.1.2 类型驱动 193
7.1.3 机制驱动 202
7.1.4 ML2插件create_network函数剖析 224
7.1.5 ML2插件create_subnet函数剖析 229
7.1.6 ML2插件create_port函数剖析 240
7.2 业务插件 249
7.2.1 Router Plugin的create_router函数分析 250
7.2.2 Router Plugin的add_router_interface代码分析 257
7.3 Neutron Plugin的消息发布和订阅 260
7.3.1 Neutron Plugin中的Callbacks Module机制 261
7.3.2 Neutron Plugin中的RPC机制 265
7.4 本章小结 266
第8章 Neutron的代理 268
8.1 OVS Agent 270
8.1.1 三类关键的Bridge 270
8.1.2 内外VID的转换 288
8.1.3 OVS Agent代码分析 295
8.1.4 OVS Agent小结 309
8.2 L3 Agent 311
8.2.1 class OVSInterfaceDriver分析 312
8.2.2 class RouterInfo分析 317
8.2.3 L3 Agent代码分析 326
8.2.4 L3 Agent小结 351
8.3 本章小结 352
序
前 言
第1章 Neutron概述 1
1.1 Neutron的由来 1
1.2 Neutron的特性与应用 3
1.2.1 基于OpenStack的应用 4
1.2.2 基于SDN的应用 6
1.3 Neutron的扩展能力 8
1.4 本章小结 9
第2章 Linux虚拟网络基础 11
2.1 tap 11
2.2 namespace 13
2.3 veth pair 16
2.4 Bridge 17
2.5 Router 19
2.6 tun 21
2.7 iptables 24
2.7.1 NAT 27
2.7.2 Firewall 30
2.7.3 mangle 32
2.8 本章小结 32
第3章 Neutron的网络实现模型 34
3.1 Neutron的三类节点 34
3.2 计算节点的实现模型 35
3.2.1 VLAN实现模型 37
3.2.2 VXLAN实现模型 41
3.2.3 GRE实现模型 44
3.2.4 计算节点的实现模型小结 45
3.3 网络节点的实现模型 46
3.4 控制节点的实现模型 49
3.5 本章小结 49
第4章 Neutron的资源模型 51
4.1 Neutron资源的租户隔离 51
4.1.1 Neutron语境下租户隔离的
含义 52
4.1.2 Neutron在租户隔离中的无限
责任和有限责任 53
4.1.3 Neutron的租户隔离实现方案 54
4.1.4 租户隔离小结 56
4.2 Network 57
4.2.1 运营商网络和租户网络 58
4.2.2 物理网络 61
4.2.3 Network小结 64
4.3 Trunk Networking 65
4.3.1 Bridge的VLAN接口模式 65
4.3.2 VLAN aware VM与Trunk
Networking 69
4.3.3 Trunk Networking小结 78
4.4 Subnet 79
4.4.1 IP核心网络服务 80
4.4.2 Subnet资源池 81
4.5 Port 83
4.6 Router 86
4.6.1 Router的外部网关 88
4.6.2 增加Router接口 89
4.6.3 Router的路由表 91
4.6.4 Floating IP 92
4.6.5 Router小结 94
4.7 Multi-Segments 95
4.7.1 Multi-Segments的困惑 96
4.7.2 Multi-Segments的几个应用
场景 98
4.8 BGP VPN 102
4.8.1 BGP VPN的使用场景 103
4.8.2 BGP VPN的实现模型 104
4.8.3 BGP VPN的资源模型 105
4.9 本章小结 109
第5章 Neutron架构分析 112
5.1 Neutron的Web框架与规范 115
5.2 Neutron的消息通信机制 117
5.2.1 AMQP基本概念 118
5.2.2 AMQP的消息转发 118
5.3 Neutron的并发机制 122
5.3.1 协程概述 122
5.3.2 Neutron中的协程 124
5.4 通用库Oslo 131
5.5 本章小结 131
第6章 Neutron的服务 132
6.1 Neutron启动一个Web Server 133
6.1.1 Web Server的启动过程 133
6.1.2 Web Server启动过程中的
关键参数 135
6.1.3 Web Server的进程与协程 138
6.1.4 小结 142
6.2 加载WSGI Application 142
6.2.1 api-paste.ini对应的WSGI
Application 144
6.2.2 neutronapi_v2_0 section 146
6.3 Core Service API(RESTful)的
处理流程 148
6.3.1 Core Service的WSGI
Application 149
6.3.2 Core Service处理HTPP Request的基本流程 149
6.3.3 Core Service处理HTTP Request的函数映射 153
6.3.4 小结 162
6.4 Extension Service API(RESTful)的处理流程 164
6.4.1 Extension Service的类图与加载 164
6.4.2 Extension Service的WSGI Application 167
6.4.3 Extension Service处理HTTP Request的基本流程 169
6.4.4 Extension Service处理HTTP Request的函数映射 171
6.4.5 小结 176
6.5 Plugin的加载 178
6.5.1 Core Service Plugin的加载 179
6.5.2 Extension Services Plugin的加载 180
6.6 RPC Consumer的创建 181
6.6.1 Neutron Plugin创建RPC Consumer的接口 182
6.6.2 Neutron Server启动RPC Consumer 183
6.7 本章小结 187
第7章 Neutron的插件 190
7.1 核心插件 191
7.1.1 ML2插件简介 193
7.1.2 类型驱动 193
7.1.3 机制驱动 202
7.1.4 ML2插件create_network函数剖析 224
7.1.5 ML2插件create_subnet函数剖析 229
7.1.6 ML2插件create_port函数剖析 240
7.2 业务插件 249
7.2.1 Router Plugin的create_router函数分析 250
7.2.2 Router Plugin的add_router_interface代码分析 257
7.3 Neutron Plugin的消息发布和订阅 260
7.3.1 Neutron Plugin中的Callbacks Module机制 261
7.3.2 Neutron Plugin中的RPC机制 265
7.4 本章小结 266
第8章 Neutron的代理 268
8.1 OVS Agent 270
8.1.1 三类关键的Bridge 270
8.1.2 内外VID的转换 288
8.1.3 OVS Agent代码分析 295
8.1.4 OVS Agent小结 309
8.2 L3 Agent 311
8.2.1 class OVSInterfaceDriver分析 312
8.2.2 class RouterInfo分析 317
8.2.3 L3 Agent代码分析 326
8.2.4 L3 Agent小结 351
8.3 本章小结 352
前 言
Preface?前 言为什么写作本书2016年1月16号,我在微信公众号(标哥说天下)发表了Neutron系列的第壹篇文章,当时计划是半年写完,没想到写了一年半。也许是由于冲动吧,那天我决定写一系列有关Neutron的文章。
手里拎个锤子,认为满世界都是钉子,这是一种要命的思维逻辑。写Neutron系列,初的原因,不是因为需要用它做什么,而是想要说明它不能做什么。这对于从事云计算的人来说,可能根本就不是问题,因为Neutron的适用范围也恰好在他们的工作范围之内,没有逾越半步。
对于那些从事非云计算行业,却又与Neutron有着千丝万缕的联系的人来说,这可能也不是问题。但是如果领导与“专家”太多,这可能就是问题了。
然而在写作的过程中,我逐步放弃了想说明“Neutron能做什么,不能做什么”的想法,慢慢改变为现在的思路:努力描述Neutron原本是什么!
本书首先从Linux虚拟网络知识讲起,步步推进,后深入到Neutron的代码。当剥开Neutron代码的面纱以后,Linux虚拟网络既是构建Neutron网络的基础,也是构建Neutron代码的基础。Neutron的代码写到后,不过是调用Linux的命令行而已(也包括调用OVS的命令行)。
这么说,当然对Neutron不公平,调用命令行只是Neutron代码的后一步,在这之前,Neutron还需知道调用什么命令行。这不是是否熟练掌握各种命令行的问题,而是能否正确分配逻辑资源的问题。举个简单的例子,为一个端口配置一个IP地址,在调用命令行之前,Neutron需要通过各种机制和算法为这个端口分配一个正确的IP地址。
Neutron不仅需要具备分配逻辑资源的机制,还需要创建相应的虚拟网元(物理资源),并将这些虚拟网元正确地连接和配置,构建成正确的网络。Neutron所能支持的二、三层网络特性,不仅体现在它的代码中,也体现在它的资源模型中,并且以RESTful接口的形式对外提供服务。
如何阅读本书总体来说,Neutron并不神秘,也不深奥,却比较庞大。如果你对Neutron的代码细节比较感兴趣,本书会有大量的篇幅进行代码剖析。如果你仅仅想了解Neutron的基本原理,本书的前几章也正是这个目的,希望能对你有些帮助。
Neutron是一个关于网络的系统,本书第1章介绍了一些背景知识。在阅读本书之前,读者首先得具备一定的网络知识,也正是出于这样的目的,第2章介绍了Linux的虚拟网络知识。限于主题和篇幅的原因,本书没法再过多介绍其他内容。本书假设你对基本的TCP/IP协议、VXLAN、OVS等有一定的了解。当然,如果要阅读代码剖析那些章节,那么还需要对Python有一定的了解,因为Python的编程语言就是Python。第3章讲述了Neutron的实现模型。第4章讲述的是Neutron的资源模型。第5章讲述了Neutron的基本架构,以及架构中所涉及的Web机制、通信机制、并发机制等,这些都是Neutron的基本原理。第6章主要讲述Neutron如何启动Web Server,并通过WSGI Pipeline机制调用合适的 WSGI Application,以及WSGI Application如何巧妙地寻址到正确的Plugin。第7章主要讲述Plugin 如何如何处理Neutron的RESTful请求,如何进行逻辑资源分配,如何调用Agent。第8章主要讲述Agent如何配置(虚拟)网元,以构建Neutron网络。
但是无论多么细节的代码剖析,也没法做到将Neutron的每一行代码都讲述到。所以本书在每一个代码剖析的章节,尽可能地给出相关的类图和顺序图。如果你对Neutron代码还不是很熟悉,笔者强烈建议,你一边看着代码,一边看着本书,两相对照阅读,并且自己尝试着画出这些类图和顺序图,这将起到事半功倍的作用。
Neutron代码下载的网址是:https://releases.openstack.org/,截至笔者定稿时的版本是Ocata。笔者还建议你阅读这个网址的内容:https://developer.openstack.org/api-ref/networking/v2/index.html,它讲述了Neutron的RESTful API,是非常重要的参考资料。
致谢在写作的过程中,遇到了很多难题,幸亏得到陈苍老师许多热情而又无私的帮助,我才能越过一道道坎。陈苍老师是我的同事,安静、幽默、智慧。
风河的杨斌先生同样给予了我很多无私的帮助,他纠正了我原稿中的很多错误。
黄朝义、胡玉刚两位先生也很耐心地解答了我很多问题。我还向Oslo项目的PTL郭先生请教了有关Oslo的问题。
OpenStack资深专家(人称大师兄)、九州云CTO龚永生先生牺牲宝贵的国庆中秋双节假期,为本书审稿并作序,深感荣幸和不安。
感谢机械工业出版社华章公司的高婧雅的指导与帮助,我才能将这一系列文章集结付梓。
这一路走来,我自己受益良多,学习了很多知识,认识了很多朋友!微信里,大家给我留言,跟我交流,给我信心。欢迎大家与我交流或者指正我的错误,可以关注我的微信公众号“标哥说天下”(bgstx001)。
感谢你的支持、帮助和鼓励,我才能坚持到今天!
手里拎个锤子,认为满世界都是钉子,这是一种要命的思维逻辑。写Neutron系列,初的原因,不是因为需要用它做什么,而是想要说明它不能做什么。这对于从事云计算的人来说,可能根本就不是问题,因为Neutron的适用范围也恰好在他们的工作范围之内,没有逾越半步。
对于那些从事非云计算行业,却又与Neutron有着千丝万缕的联系的人来说,这可能也不是问题。但是如果领导与“专家”太多,这可能就是问题了。
然而在写作的过程中,我逐步放弃了想说明“Neutron能做什么,不能做什么”的想法,慢慢改变为现在的思路:努力描述Neutron原本是什么!
本书首先从Linux虚拟网络知识讲起,步步推进,后深入到Neutron的代码。当剥开Neutron代码的面纱以后,Linux虚拟网络既是构建Neutron网络的基础,也是构建Neutron代码的基础。Neutron的代码写到后,不过是调用Linux的命令行而已(也包括调用OVS的命令行)。
这么说,当然对Neutron不公平,调用命令行只是Neutron代码的后一步,在这之前,Neutron还需知道调用什么命令行。这不是是否熟练掌握各种命令行的问题,而是能否正确分配逻辑资源的问题。举个简单的例子,为一个端口配置一个IP地址,在调用命令行之前,Neutron需要通过各种机制和算法为这个端口分配一个正确的IP地址。
Neutron不仅需要具备分配逻辑资源的机制,还需要创建相应的虚拟网元(物理资源),并将这些虚拟网元正确地连接和配置,构建成正确的网络。Neutron所能支持的二、三层网络特性,不仅体现在它的代码中,也体现在它的资源模型中,并且以RESTful接口的形式对外提供服务。
如何阅读本书总体来说,Neutron并不神秘,也不深奥,却比较庞大。如果你对Neutron的代码细节比较感兴趣,本书会有大量的篇幅进行代码剖析。如果你仅仅想了解Neutron的基本原理,本书的前几章也正是这个目的,希望能对你有些帮助。
Neutron是一个关于网络的系统,本书第1章介绍了一些背景知识。在阅读本书之前,读者首先得具备一定的网络知识,也正是出于这样的目的,第2章介绍了Linux的虚拟网络知识。限于主题和篇幅的原因,本书没法再过多介绍其他内容。本书假设你对基本的TCP/IP协议、VXLAN、OVS等有一定的了解。当然,如果要阅读代码剖析那些章节,那么还需要对Python有一定的了解,因为Python的编程语言就是Python。第3章讲述了Neutron的实现模型。第4章讲述的是Neutron的资源模型。第5章讲述了Neutron的基本架构,以及架构中所涉及的Web机制、通信机制、并发机制等,这些都是Neutron的基本原理。第6章主要讲述Neutron如何启动Web Server,并通过WSGI Pipeline机制调用合适的 WSGI Application,以及WSGI Application如何巧妙地寻址到正确的Plugin。第7章主要讲述Plugin 如何如何处理Neutron的RESTful请求,如何进行逻辑资源分配,如何调用Agent。第8章主要讲述Agent如何配置(虚拟)网元,以构建Neutron网络。
但是无论多么细节的代码剖析,也没法做到将Neutron的每一行代码都讲述到。所以本书在每一个代码剖析的章节,尽可能地给出相关的类图和顺序图。如果你对Neutron代码还不是很熟悉,笔者强烈建议,你一边看着代码,一边看着本书,两相对照阅读,并且自己尝试着画出这些类图和顺序图,这将起到事半功倍的作用。
Neutron代码下载的网址是:https://releases.openstack.org/,截至笔者定稿时的版本是Ocata。笔者还建议你阅读这个网址的内容:https://developer.openstack.org/api-ref/networking/v2/index.html,它讲述了Neutron的RESTful API,是非常重要的参考资料。
致谢在写作的过程中,遇到了很多难题,幸亏得到陈苍老师许多热情而又无私的帮助,我才能越过一道道坎。陈苍老师是我的同事,安静、幽默、智慧。
风河的杨斌先生同样给予了我很多无私的帮助,他纠正了我原稿中的很多错误。
黄朝义、胡玉刚两位先生也很耐心地解答了我很多问题。我还向Oslo项目的PTL郭先生请教了有关Oslo的问题。
OpenStack资深专家(人称大师兄)、九州云CTO龚永生先生牺牲宝贵的国庆中秋双节假期,为本书审稿并作序,深感荣幸和不安。
感谢机械工业出版社华章公司的高婧雅的指导与帮助,我才能将这一系列文章集结付梓。
这一路走来,我自己受益良多,学习了很多知识,认识了很多朋友!微信里,大家给我留言,跟我交流,给我信心。欢迎大家与我交流或者指正我的错误,可以关注我的微信公众号“标哥说天下”(bgstx001)。
感谢你的支持、帮助和鼓励,我才能坚持到今天!
评论
还没有评论。