OpenStack网络管理-neutron
物理网络与虚拟网络区别

Switch:物理交换机
vSwitch:虚拟交换机
NIC:网络接口卡、网络适配器、网卡
vNIC:虚拟网卡
Switch有很多品牌:cisco、华为
vSwitch有很多软件:linuxbridge、ovs、ovn
Neutron最为核心的工作是对二层物理网络的抽象与管理,物理服务器虚拟化后,虚拟机的网络功能由
虚拟网卡(vNIC)和虚拟交换机提供,各个vNIC连接在vSwitch的端口上,最后这些vSwitch通过物理服
务器的物理网卡访问外部的物理网络。
Linux网络虚拟化技术
网卡虚拟化:
- TAP
- TUN
- VETH PAIR
交换机虚拟化:
- linux bridge
- open vswitch
网络隔离:
- network namespace
Linux网卡虚拟化TAP/TUN/VETH

TAP设备:模拟一个二层的网络设备,可以接收和发送二层网包
TUN设备:模拟一个三层的网络设备,可以接收和发送三层网包
VETH:虚拟ethernet接口,通常以pair的方式出现,一端发出的网包,会被另一端接收,可以形成两个
网桥之间的通道
- TAP/TUN提供了一台主机内用户空间的数据传输机制。它虚拟了一套网络接口,这套接口和物理的接口
无任何区别,可以配置IP,可以路由流量,不同的是,它的流量只在主机内流通。 - TAP/TUN有些许的不同,TUN只操作三层的IP包,而TAP操作二层的以太网帧。
- Veth-Pair是成对出现的一种虚拟网络设备,一端连接着协议栈,一端连接着彼此,数据从一端出,从另
一端进。它的这个特性常常用来连接不同的虚拟网络组件,构建大规模的虚拟网络拓扑,比如连接Linux
Bridge、OVS、LXC容器等。一个很常见的案例就是它被用于OpenStack Neutron,构建非常复杂的网络
形态。
Linux bridge

Linux bridge:工作于二层的网络设备,功能类似于物理交换机
Bridge可以绑定Linux上的其他网络设备,并将这些设备虚拟化为端口
当一个设备被绑定到bridge时,就相当于物理交换机端口插入了一条连接着终端的网线
使用brctl命令配置Linux bridge:
brctl addbr BRIDGE
brctl addif BRIDGE DEVICE
- Linux Bridge结构如上图所示,Bridge设备br0绑定了实际设备eth0与虚拟设备tap0和tap1,但是对于
Hypervisor的网络协议栈上层来说,只能看到br0,并不会关心桥接的细节。 - 当这些设备接收到数据包时,会将其提交给br0决定数据包的去向,br0会根据MAC地址与端口的映射关
系进行转发。 - 因为Bridge工作在二层,所以绑定在br0上的从设备eth0、tap0与tap1均不需要再设置IP地址,对于上
层路由器来说,它们都位于同一子网,因此只需为br0设置IP地址。因为br0具有自己的IP地址,br0可以被加入路由表,并利用它来发送数据,但是最终实际的发送过程则是由某个从设备来完成。 - 即使eth0原本具有自己的IP地址,但是在被绑定到br0上后,它的IP地址会失效,用户程序不能接收到这个IP地址的数据。只有目的地址为br0的IP地址的数据包才会被Linux接收。
- brctl addbr BRIDGE:表示添加BRIDGE。
- brctl addif BRIDGE DEVICE:表示添加接口到bridge。
OVS

Open vSwitch是产品级的虚拟交换机
Linux bridge更适用于小规模,主机内部间通信场景
Open vSwitch更适合于大规模、多主机间通信场景
华为的FusionCompute用的就是DVS(基于EVS,EVS基于OVS)
Open vSwitch常用的命令:
- ovs-vsctl add-br BRIDGE
- ovs-vsctl add-port PORT
- ovs-vsctl show BRIDGE
- ovs-vsctl dump-ports-desc BRIDGE
- ovs-vsctl dump-flows BRIDGE
- Open vSwitch负责连接vNIC与物理网卡,同时桥接同一物理Server内的各个vNIC。其实Linux Bridge已经能够很好地充当这样的角色,为什么我们还需要Open vSwitch?
- 因为Open vSwitch的引入使得云环境中对虚拟网络的管理及对网络状态和流量的监控变得更容易。
- 我们可以像配置物理交换机一样,将接入Open vSwitch的各个VM分配到不同的VLAN中以实现网络的隔离。我们也可以在Open vSwitch端口上为VM配置QoS,同时Open vSwitch也支持包NetFlowsFlow
等很多标准的管理接口和协议,我们可以通过这些接口完成流量监控等工作。 - Open vSwitch在云环境中的各种虚拟化平台(如Xen与KVM)上实现了分布式的虚拟交换机
(Distributed Virtual Switch),一个物理Server上的vSwitch可以透明地与另一个物理Server上的
vSwitch连接在一起。
Neutron功能概述
从今天开始,我们将学习 OpenStack 的 Networking Service,Neutron。
Neutron 的难度会比前面所有模块都大一些,内容也多一些。为了帮助大家更好的掌握 Neutorn,也会
分析地更详细一些。
Neutron 概述
传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备;而云环境下的网络已
经变得非常复杂,特别是在多租户场景里,用户随时都可能需要创建、修改和删除网络,网络的连通性
和隔离不已经太可能通过手工配置来保证了。
如何快速响应业务的需求对网络管理提出了更高的要求。传统的网络管理方式已经很难胜任这项工作,
而"软件定义网络(software-defined networking, SDN)"所具有的灵活性和自动化优势使其成为云时代
网络管理的主流。Neutron 的设计目标是实现"网络即服务(Networking as a Service)"。为了达到这一目标,在设计上
遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术。
在这一章,我们将讨论 Neutron 的功能和它的各个组件,学习部署和配置 OpenStack 网络的不同方
法,会涉及软件和硬件设备多个层面。
Neutron 功能
Neutron 为整个 OpenStack 环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和 VPN
等。Neutron 提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功
能。
二层交换 Switching
Nova 的 Instance 是通过虚拟交换机连接到虚拟二层网络的。Neutron 支持多种虚拟交换机,包括
Linux 原生的 Linux Bridge 和 Open vSwitch。 Open vSwitch(OVS)是一个开源的虚拟交换机,它支
持标准的管理接口和协议。
利用 Linux Bridge 和 OVS,Neutron 除了可以创建传统的 VLAN 网络,还可以创建基于隧道技术的
Overlay 网络,比如 VxLAN 和 GRE(Linux Bridge 目前只支持 VxLAN)。在后面章节我们会学习如何使
用和配置 Linux Bridge 和 Open vSwitch。
三层路由 Routing
Instance 可以配置不同网段的 IP,Neutron 的 router(虚拟路由器)实现 instance 跨网段通信。
router 通过 IP forwarding,iptables 等技术来实现路由和 NAT。我们将在后面章节讨论如何在
Neutron 中配置 router 来实现 instance 之间,以及与外部网络的通信。
负载均衡 Load Balancing
Openstack 在 Grizzly 版本第一次引入了 Load-Balancing-as-a-Service(LBaaS),提供了将负载分发到
多个 instance 的能力。LBaaS 支持多种负载均衡产品和方案,不同的实现以 Plugin 的形式集成到
Neutron,目前默认的 Plugin 是 HAProxy。我们会在后面章节学习 LBaaS 的使用和配置。
防火墙 Firewalling
Neutron 通过下面两种方式来保障 instance 和网络的安全性。