OpenStack学习 (6) - Neutron

Linux Bridge

这是学习Neutron的基础,如何使硬件上的每台虚拟机都能连上外部网络呢?

我们使用的就是Linux Bridge

多个网络设备可以连接到同一个Linux Bridge,当某个设备收到数据包时,Linux Bridge 会将数据转发给其他设备。
OpenStack学习 (6) - Neutron_第1张图片
当有数据到达 eth0 时,br0 会将数据转发给 vnet0,这样 VM1 就能接收到来自外网的数据;
反过来,VM1 发送数据给 vnet0,br0 也会将数据转发到 eth0,从而实现了 VM1 与外网的通信。


VLAN

LAN 表示 Local Area Network,本地局域网,一般来说,两台计算机连入同一个 Hub 或者 Switch 时,它们就在同一个 LAN 中。
一个 LAN 表示一个广播域。其含义是:LAN 中的所有成员都会收到任意一个成员发出的广播包。

VLAN 表示 Virtual LAN。一个带有 VLAN 功能的switch 能够将自己的端口划分出多个 LAN。计算机发出的广播包可以被同一个 LAN 中其他计算机收到,但位于其他 LAN 的计算机则无法收到。
简单地说,VLAN 将一个交换机分成了多个交换机,限制了广播的范围,在二层将计算机隔离到不同的 VLAN 中。
OpenStack学习 (6) - Neutron_第2张图片
这样虚拟交换机就有两个 VLAN 了,VM1 和 VM2 分别属于 VLAN10 和 VLAN20。
对于新创建的虚机,只需要将其虚拟网卡放入相应的 Bridge,就能控制其所属的 VLAN。


Linux Bridge + VLAN = 虚拟交换机

现在对 KVM 的网络虚拟化做个总结。

物理交换机存在多个 VLAN,每个 VLAN 拥有多个端口。
同一 VLAN 端口之间可以交换转发,不同 VLAN 端口之间隔离。
所以交换机其包含两层功能:交换与隔离。

Linux 的 VLAN 设备实现的是隔离功能,但没有交换功能。
一个 VLAN 母设备(比如 eth0)不能拥有两个相同 ID 的 VLAN 子设备,因此也就不可能出现数据交换情况。

Linux Bridge 专门实现交换功能。
将同一 VLAN 的子设备都挂载到一个 Bridge 上,设备之间就可以交换数据了。

总结起来,Linux Bridge 加 VLAN 在功能层面完整模拟现实世界里的二层交换机。


Neutron

OpenStack学习 (6) - Neutron_第3张图片

ML2 Core Plugin
ML2 Core Plugin解决了传统Core Plugin访问数据库代码重复和多种 network provider 无法共存的问题,使用最广泛的 L2 agent 是 linux bridage 和 open vswitch。

Seriver Plugin
Service Plugin及其 Agent 提供更丰富的扩展功能,包括路由,load balance,firewall等

Type Driver
Neutron 支持的每一种网络类型都有一个对应的 ML2 type driver。 type driver 负责维护网络类型的状态,执行验证,创建网络等。 ML2 支持的网络类型包括 local, flat, vlan, vxlan 和 gre。

Mechanism Driver
Neutron 支持的每一种网络机制都有一个对应的 ML2 mechanism driver。 mechanism driver 负责获取由 type driver 维护的网络状态,并确保在相应的网络设备(物理或虚拟)上正确实现这些状态。

Agent
agent 位于各个节点,负责实现网络服务。plugin 解决的是 What 的问题,即网络要配置成什么样子?而至于如何配置 How 的工作则交由 agent 完成。

plugin,agent 和 network provider 是配套使用的,比如上例中 network provider 是 linux bridge,那么就得使用 linux bridge 的 plungin 和 agent;如果 network provider 换成了 OVS 或者物理交换机,plugin 和 agent 也得替换。

你可能感兴趣的:(OpenStack)