具体描述
内容简介
本书共8章。第1章讲解Neutron概况。第2章介绍了Linux的虚拟网络知识。第3章讲述了Neutron的实现模型。第4章讲述的Neutron的资源模型。第5章讲述了Neutron的基本架构,以及架构中所涉及的Web机制、通信机制、并发机制等。第6章深入介绍Neutron启动服务的流程、通信机制与实现等。第7章深入分析了Neutron插件的驱动、消息处理机制。第8章详细讲解了Neutron代理(OVS与L3)的实现。 作者简介
李宗标,华为研发工程师,业界第壹个 SDN+NFV Orchestrator 开源架构师(OPEN-O),对SDN/NFV 颇有研究,并且有丰富的市场项目经验。 目录
目 录?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 前言/序言
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)。
感谢你的支持、帮助和鼓励,我才能坚持到今天!
《云端织网:OpenStack Neutron 深度解析与实践》 书籍简介 在云计算浪潮席卷全球的今天,构建一个稳定、高效、灵活且可扩展的网络基础设施,是支撑现代企业IT服务运行的基石。OpenStack Neutron,作为OpenStack项目中的网络组件,扮演着至关重要的角色,它为云环境中的虚拟机、容器以及其他计算资源提供了强大的网络连接能力。然而,理解Neutron的内在机制,掌握其复杂的配置与优化技巧,以及应对实际生产环境中可能遇到的各种挑战,并非易事。 本书——《云端织网:OpenStack Neutron 深度解析与实践》,旨在为广大从事OpenStack云平台搭建、运维、开发以及网络架构设计的专业人士,提供一本全面、深入且实用的Neutron技术指南。我们不仅会详细剖析Neutron的核心架构、工作原理,更将聚焦于其在实际应用中的落地,从基础概念到高级特性,从原理洞察到故障排查,力求让读者在理解“是什么”的基础上,更深刻地掌握“为什么”和“怎么做”。 本书内容亮点 第一部分:OpenStack Neutron 概览与核心概念 现代数据中心网络演进与Neutron的定位: 回顾传统数据中心网络面临的挑战,阐述SDN(软件定义网络)的出现及其对云网络的影响,明确OpenStack Neutron在SDN架构中的关键作用,以及其与OpenStack其他组件(如Nova, Keystone, Glance等)的紧密协作关系。 Neutron 核心架构深度解析: 详细介绍Neutron 的宏观架构,包括API 层、RPC 通信层、核心插件(Core Plugin)、服务插件(Service Plugin)以及驱动(Driver)等关键组成部分。深入剖析各组件之间的交互流程,理解Neutron 如何通过插件机制实现高度的灵活性和可扩展性。 Neutron 基本概念精讲: 清晰阐释Neutron 中诸如Network, Subnet, Port, Router, Floating IP, Security Group, Agent 等核心概念。通过丰富的图示和实际案例,帮助读者建立对这些基本元素的直观认知,为后续的深入学习打下坚实基础。 Neutron 扩展性与插件化设计: 深入讲解Neutron 的插件化设计理念,以及不同类型的插件(如ML2 插件、L3 插件、DHCP 插件、Meter 插件等)的功能与作用。理解Neutron 如何通过不同的插件组合,支持多种网络技术的实现,如VLAN, VXLAN, GRE 等Overlay 网络。 第二部分:Neutron 核心组件与工作流程 Neutron Server (API 层) 的职责与实现: 详细介绍Neutron Server 如何接收来自API 的请求,进行认证、授权,并将请求转发给相应的插件和代理。分析Neutron API 的设计哲学,以及常用的API 调用方式。 RPC 通信机制: 深入理解Neutron Server 与各个Agent 之间的RPC(远程过程调用)通信机制。阐述消息队列(如RabbitMQ)在Neutron 中扮演的角色,以及数据在不同组件间传递的流程。 核心插件(Core Plugin)详解: 重点剖析ML2(Modular Layer 2)插件,这是Neutron 中最常用的核心插件。深入讲解ML2 插件如何管理层2网络(Network, Subnet, Port),以及其与Type Driver 和Mechanism Driver 的配合。 服务插件(Service Plugin)剖析: 详细介绍L3 插件(负责网络路由和Floating IP)、DHCP 插件(负责IP 地址分配)、Meter 插件(负责网络流量计量)等服务插件的功能、实现原理以及与核心插件的交互方式。 Neutron Agent 的工作原理: 深入解析Neutron 各类Agent 的职责,包括: OVS Agent (Open vSwitch Agent): 详解OVS Agent 如何在宿主机上创建虚拟交换机(OVS Bridge),配置流表,实现虚拟机之间的二层互联以及与外部网络的连通。 L3 Agent: 讲解L3 Agent 如何在宿主机上创建Linux Bridge 或OVS Bridge,以及如何通过配置Linux Router 来实现跨子网路由和Floating IP 的转换。 DHCP Agent: 阐述DHCP Agent 如何为虚拟机提供IP 地址分配、DNS 解析等服务。 Metadata Agent: 介绍Metadata Agent 如何为虚拟机提供元数据信息,供虚拟机内部使用。 其他Agent(如Meter Agent, FW-Agent 等): 根据实际需求,简要介绍其他Agent 的功能。 第三部分:Neutron 关键技术与网络场景实现 Overlay 网络技术详解 (VXLAN, GRE): 深入剖析Overlay 网络(如VXLAN, GRE)的工作原理,包括封装、解封装过程。解释Neutron 如何利用这些技术构建大规模、跨物理网络二层互联的虚拟网络,解决传统VLAN 数量限制的问题。 SDN Controller 集成: 探讨Neutron 如何与外部SDN Controller(如OpenDaylight, ONOS 等)进行集成,实现更高级的网络功能和策略控制。介绍集成模式和API 接口。 Neutron Security Group 原理与实践: 详细阐述Security Group 的实现机制,包括规则的匹配逻辑、iptables 的应用。指导读者如何设计和配置高效的Security Group 策略,保障云环境的安全。 Floating IP 的分配与管理: 深入讲解Floating IP 的工作原理,以及其与Router、SNAT、DNAT 的关系。指导读者如何为虚拟机提供公网访问能力。 Multi-tenancy 网络隔离: 阐述Neutron 如何实现多租户网络隔离,确保不同租户之间的网络互不影响。分析Network Namespace, Linux Bridge, OVS 等技术在多租户隔离中的作用。 第四部分:Neutron 实践、优化与故障排查 OpenStack Neutron 部署与配置: 提供详细的Neutron 部署指南,涵盖控制节点和计算节点的配置要点。重点讲解ML2 插件、L3 插件、DHCP 插件的配置,以及与MySQL, RabbitMQ 等依赖服务的集成。 网络性能优化: 针对实际生产环境中的网络瓶颈,提供一系列性能优化建议,包括OVS 流表优化、CPU 绑定、SR-IOV 集成、NUMA 架构感知等。 网络高可用性设计: 探讨Neutron 的高可用性方案,包括L3 Agent 和DHCP Agent 的高可用部署,以及控制节点的高可用。 Neutron 常见故障排查: 总结Neutron 部署和运维过程中遇到的常见问题,并提供系统性的排查思路和方法。涵盖网络不通、IP 分配失败、路由问题、Floating IP 失效等典型场景。 日志分析与监控: 指导读者如何有效利用Neutron 的日志信息进行故障定位,以及如何集成第三方监控工具(如Prometheus, Grafana)来实时监控Neutron 的运行状态。 Neutron 与容器网络集成 (可选): 简要探讨Neutron 如何与Kubernetes 等容器编排平台集成,实现容器网络的服务发现和管理。 本书特色 深度与广度兼备: 不仅覆盖Neutron 的基本概念和工作原理,更深入到各个组件的实现细节和高级功能。 实践导向: 结合大量实际部署、配置和故障排查的案例,帮助读者将理论知识转化为实践能力。 图文并茂: 使用大量的架构图、流程图和配置截图,使复杂的技术概念更加易于理解。 语言通俗易懂: 避免使用过于晦涩的专业术语,力求用清晰、简洁的语言阐述技术要点。 面向实战: 关注生产环境中可能遇到的问题,提供切实可行的解决方案。 《云端织网:OpenStack Neutron 深度解析与实践》将是您在OpenStack Neutron 技术领域深入探索的得力助手,助您构建和管理更加强大、可靠、灵活的云网络基础设施。无论您是初涉OpenStack 的网络工程师,还是经验丰富的云平台架构师,都能从中获益。