第1篇 初识Neutron 2
第1章 Neutron是什么 2
1.1 什么是云 2
1.2 什么是OpenStack 3
1.3 Neutron的发展与介绍 4
1.4 分层思想与Neutron组件架构 5
1.5 Neutron 中的服务 7
1.5.1 Neutron二层网络服务 7
1.5.2 Neutron三层网络服务 9
1.5.3 Neutron高级网络服务 9
1.5.4 其他服务 10
1.6 Neutron支持的部署拓扑 12
1.6.1 单一平面网络 12
1.6.2 多平面网络 13
1.6.3 混合平面私有网络 13
1.6.4 通过私有网络实现运营商路由功能 14
1.6.5 通过私有网络实现每个租户创建自己专属的网络区段 14
1.7 爱上Neutron的理由 15
1.7.1 北向API,框架结构与微内核 15
1.7.2 大规模高性能,L2的控制平面L2 population(L2pop) 15
1.7.3 大规模高性能,改善东西南北向流量之分布式虚拟路由(DVR) 16
1.7.4 大规模高性能,L3高可用VRRP(Virtual Router Redundancy Protocol) 17
1.8 小结 17
第2章 Neutron二层网络服务实现原理 18
2.1 二层网络基本原理 18
2.2 大二层变革综述 19
2.2.1 大二层多路径技术 20
2.2.2 大二层互联技术 20
2.3 二层网络的实现——ML2插件 21
2.4 二层网络在Linux中的实现 22
2.4.1 veth path演示用例 23
2.4.2 Linux网桥演示用例 24
2.5 Openvswitch中二层网络的实现 26
2.6 虚拟机部署与二层网络的绑定(Port Binding) 28
2.7 小结 30
第3章 Neutron三层网络服务实现原理 31
3.1 路由原理 31
3.2 三层路由在Linux中的实现 32
3.3 Neutron的三层网络实现 33
3.4 通过实验夯实路由基础 33
3.4.1 环境准备 33
3.4.2 同一节 点上的两台虚拟机如何互访 35
3.4.3 不同节点上的两台虚拟机如何互访 36
3.4.4 虚拟机如何访问外网(SNAT) 36
3.4.5 外网如何访问虚拟机(DNAT) 36
3.4.6 VLAN 36
3.4.7 VxLAN 40
3.4.8 GRE 40
3.5 FLAT、VLAN、GRE、VxLAN 网络拓扑 41
3.6 小结 43
第4章 OpenStack的部署与Neutron之Hello World 44
4.1 OpenStack部署方式简介 44
4.2 使用Devstack部署OpenStack开发环境 44
4.2.1 系统环境 45
4.2.2 部署Devstack环境 45
4.2.3 自动化脚本一键自动部署OpenStack 47
4.3 创建第一个网络 49
4.4 小结 59
第2篇 Neutron进阶 61
第5章 Neutron中的网络安全 61
5.1 iptables基础 61
5.2 Neutron中的安全组 66
5.2.1 Neutron中的自定义链 67
5.2.2 每个虚拟机的链和规则 68
5.2.3 配置使用Neutron 中的Security Group 69
5.2.4 Allowed Address Pairs扩展 69
5.3 Neutron中的防火墙 69
5.4 有状态的防火墙和基于OVS流规则的防火墙 71
5.4.1 什么是有状态的防火墙 71
5.4.2 有状态防火墙在iptables中的实现 72
5.4.3 从数据流向看iptables对TCP、UDP及ICMP报文的支持 73
5.4.4 Openvswitch中对有状态防火墙的支持 73
5.5 多层防火墙应用实例 74
5.6 Group Based Policy 75
5.7 小结 76
第6章 高级网络服务 77
6.1 网络服务模型与用例 77
6.1.1 Routed/Embedded网络服务 78
6.1.2 Floating/In-Path网络服务 78
6.1.3 Out-of-Path网络服务 78
6.1.4 网络服务插入点 79
6.1.5 L3层的网络服务用例 79
6.1.6 L2层的网络服务用例 80
6.1.7 Bump-in-the-Wire网络服务用例 80
6.1.8 TAPaaS网络服务用例 81
6.2 ServiceType框架 81
6.2.1 ServiceType种类 81
6.2.2 如何配置ServiceType使用高级网络服务 82
6.2.3 重构后的高级服务代码实现 83
6.3 其他高级网络服务特性 84
6.3.1 Neutron Flavor框架 84
6.3.2 Service Insertion 84
6.3.3 Service Chain(服务链) 86
6.3.4 Traffic Steering特性 87
6.3.5 Huawei Service Chain特性 87
6.4 LBaaS服务原理与实现 88
6.4.1 LBaaS代码结构 88
6.4.2 LBaaS应用场景及实现要点 89
6.4.3 LBaaS示例 90
6.5 IPSec VPNaaS服务原理与实现 91
6.5.1 隧道协议的本质与分类 91
6.5.2 VPN的本质与分类 92
6.5.3 IPSec理论 93
6.5.4 Neutron openSwan/strongSwan VPNaaS驱动架构 95
6.5.5 运行Neutron strongSwan VPNaaS 96
6.5.6 Neutron strongSwan VPNaaS配置与排错 102
6.6 基于MPLS的VPNaaS服务原理与实现 106
6.6.1 MPLS原理与路由信息传递 106
6.6.2 Neutron VPNaaS数据模型演进 109
6.6.3 Neutron MPLS VPN实现原理 110
6.7 小结 111
第7章 网络性能调优 112
7.1 通用操作系统与传统Hypervisor的网络性能瓶颈 112
7.1.1 网络性能瓶颈在哪儿 112
7.1.2 virtio 113
7.1.3 vhost 115
7.1.4 vhost-user与snabbswitch 115
7.1.5 openonload 116
7.2 Neutron性能的评价指数 117
7.3 API Server的调优 118
7.4 MySQL、Rabbitmq调优 119
7.5 计算节点及13-agent的调优 119
7.6 网络中的MTU问题对性能的影响 120
7.7 启用L2pop特性提高性能 121
7.8 通过分布式虚拟路由器改善网络节点性能 122
7.8.1 实例分析 123
7.8.2 命名空间 126
7.8.3 配置使用Neutron DVR 126
7.8.4 环境演示 127
7.8.5 内幕分析 128
7.8.6 DVR定制OVS Flow 138
7.9 网络节点的高可用性 139
7.9.1 通过pacemaker/corosync实现的Neutron L3 高可用性 140
7.9.2 支持Neutron L3高可用性和扩展性 145
7.9.3 VRRP高可用性 156
7.10 小结 163
第3篇 Neutron实战 165
第8章 Neutron实战开发 165
8.1 Neutron的数据模型介绍 166
8.1.1 核心实体(L2) 167
8.1.2 L3层的实体 167
8.1.3 高层服务实体 168
8.2 Neuron的API及其实现机制介绍 168
8.3 使用eclipse+pydev插件建立开发环境 170
8.4 如何开发新的Plugin 173
8.5 为新二层设备开发MechanismDriver实战 179
8.6 小结 183
第9章 贡献Neutron社区 184
9.1 加入OpenStack社区 184
9.2 注册BP与neutron-spec 185
9.3 如何提交代码 191
9.4 Neutron CI测试 195
9.5 代码及代码风格 198
9.6 小结 199
第10章 Neutron中的测试 200
10.1 单元测试 201
10.1.1 assert_has_calls实例 203
10.1.2 assert_called_once_with实例 204
10.2 功能测试 205
10.3 Tempest集成测试 208
10.4 小结 217
第4篇 Neutron杂谈与展望 219
第11章 软件定义网络(SDN) 219
11.1 软件定义网络(SDN)简介 219
11.2 OpenFlow 中的L3层路由与跨数据中心的SDN 221
11.3 RouteFlow 222
11.4 SDN Neutron的集成 223
11.5 NFV 224
11.6 小结 226
第12章 IPv6与Neutron 227
12.1 基础知识 227
12.1.1 IPv6地址的3种配置方式 227
12.1.2 IPv6 Privacy Extensions 228
12.1.3 Radvd软件路由器 228
12.1.4 IPv6地址类型 228
12.2 IPv6在Neutron 中的实现 229
12.2.1 Neutron中的IPv6地址支持 229
12.2.2 Neutron 中的IPv6前缀代理(PrefixDelegation,PD)机制 233
12.2.3 Neutron网络中的IPv6路由 233
12.3 IPv6在管理网络中的实现 233
12.3.1 配置Radvd 234
12.3.2 配置Keystone 234
12.3.3 配置glance 238
12.3.4 配置Nova 239
12.3.5 配置neutron-server 242
12.3.6 配置swift 244
12.3.7 配置swift-storage 245
12.3.8 配置corosync 246
12.3.9 配置cinder 247
12.3.10 配置RabbitMQ 249
12.3.11 IPv6 novarc 250
12.3.12 实验结果验证 251
12.4 小结 254
附录 256
附录A Openstack网络的故障排除 256
A.1 虚拟机获取不到IP的问题 256
A.2 虚拟机无法访问外网的问题 256
A.3 无法重建GRE隧道的问题 257
附录B 调试代码时可能遇到的问题 258
B.1 服务状态不一致的问题 258
B.2 在eclipse 中调试OpenStack代码时,模块动态替换的问题 258
B.3 Devstack环境中切换代码分支的问题 259
附录C Devstack环境代码升级的问题 260
参考链接 264