基于 Linux Bridge 的 Neutron 多平面网络实现原理
2019-02-07 17:14 云物互联 阅读(1039) 评论(0) 编辑 收藏 举报目录
前言
本文是在 CloudMan 的《每天五分钟学习 OpenStack》系列博文的基础之上进行学习记录和总结的,感谢 CloudMan 的整理付出,特此说明。
前文列表
多平面网络
Neutron 作为一个成熟的 SDN 项目,实现了「多平面混合的租户私有网络模型」。在 Neutron 中,Network(网络)的定义是一个隔离的二层广播域。Neutron 支持多种类型的 Network,也就是常说的 “多平面网络”。
- Local
- Flat
- VLAN
- VxLAN
- GRE
Local(本地网络)
Local 类型网络的特点是与其他网络和节点隔离。Local 网络中的 instance 只能与位于同一节点上的同一网络中的 instance 通信。Local 网络主要用于单机测试,在生产环境中基本不会看见。
Local Network 是不会与宿主机的任何物理网卡相连的,对于每个 Local Netwrok,ML2 linux-bridge 都会为其创建一个 bridge(虚拟网桥)设备,Instance 的 tap(虚拟网卡)设备会连接到 bridge。位于同一个 Local Network 的 Instance 会连接到相同的 bridge。这样就相当于有多台 Hosts 接入了同一台交换机上,Hosts 之间只要处于同于 IP 逻辑网络,就可以互相通信。
但因为物理网卡并没有 Attached 到 bridge 上,所以 Instances 也就无法与宿主机之外的网络通信了。同时又因为每个 Local Network 有自己的 bridge,且 bridge 之间没有连通,所以两个 Local Network 之间也不能通信,即使它们位于同一宿主机上。
Local Network 的网络模型:
Flat(扁平网络)
Flat 类型网络的特点是无 VLAN Tagging。Flat 网络中的 Instance 能与位于不同节点上的同一网络的 Instance 通信。Flat 网络常见于 All-In-One 开发环境,在生产环境中也基本不会看见。
Flat Network 要求宿主机的物理网卡 Attached 到 Linux Bridge 上,这意味着每个 Flat Network 都会独占一个物理网卡,也意味着 Flat Network 是可以连通外网的。
Flat Network 的网络模型:
NOTE:物理网卡接口设备(e.g. eth1、eth2)Attached 到 Bridge 之后其 IP 地址会无效(NO IP ADDR),所以一般的会将原来 eth1 的 IP 地址配置到 brqXXXX 上,并且开启 eth1 的混杂模式。
可见 Flat 与 Local 的主要区别在于 “是否能够连通外部网络(是否 Attached 物理网卡设备)”。如果 Instances 希望访问外部网络,那么就要求 Instances、Bridge、外部网络处于同一个 IP 逻辑网络。很明显的,这一限制使得 Flat 只能应用在简单的实验环境中,而且就算是在实验环境中也只有 ext-net 会创建为 Flat 类型。ten-net 不会直接采用 Flat,而是通过 Router 和 Floating IP 进行外网访问。
配置 Flat 网络
vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
tennat_network_type=local
type_drivers=local,flat,
mechanism_drivers=linuxbridge
...
[ml2_type_flat]
flat_networks=default
[linux_bridge]
physical_interface_mappings=default:eth1
- 在
[ml2_type_flat]
中通过flat_networks
定义了一个 flat 网络,label 为default
。 - 在
[linux_bridge]
中通过physical_interface_mappings
指明 default label 对应的物理网卡为 eth1。
label 是 Flat Network 的唯一标识,可以是任意字符串,在创建 Flat Network 时需要指定 label,通过指定 label 来分配 Flat Network 占用的物理网卡接口设备。Flat Network 是可以跨节点的,只要确保各节点间 ml2_conf.ini 配置文件中的 label 命名一致就可以了。需要注意的是,各节点中同一 label(Flat Network)与物理网卡的对应关系可能并不相同,因为各个节点可以被分配的物理网卡也不尽相同。
NOTE:支持多个 Flat Network 的配置方式
[ml2_type_flat]
flat_networks = flat1,flat2
[linux_bridge]
physical_interface_mappings = flat1:eth1,flat2:eth2
VLAN
VLAN 网络是具有 802.1q Tagging(基于 802.1.q VLAN 协议) 的网络。每个 VLAN 都是一个二层的广播域,同一 VLAN 中的 instance 可以通信,不同 VLAN 间的 instances 需要通过 Router 通信。VLAN 网络是应用最广泛的网络类型,适合中小型网络拓扑。
VLAN Network 的网络模型:
- eth1.100 和 eth1.101 俗称为物理网卡 eth1 的子网卡设备,又称为 Linux VLAN 设备。
- 同一张物理网卡可以通过创建多个不同子设备来划分多个不同的 VLAN。
- Instances 通过 eth1.100 发送到 eth1 的数据包就会打上 vlan100 的 tag。
- 具有相同 VLAN ID 的数据包才能通过对应的 VLAN 设备。
- 每个 VLAN Network 有自己专属的 Bridge,以此实现了基于 VLAN 的隔离。
NOTE:VLAN 实现了隔离,Bridge 实现了转发,VLAN + Bridge == vSwitch(隔离&转发)
配置 VLAN 网络
vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
tennat_network_type=vlan
type_drivers=local,flat,vlan,
mechanism_drivers=linuxbridge
...
[ml2_type_vlan]
network_vlan_ranges=default:3001:4000
[linux_bridge]
physical_interface_mappings=default:eth1
- 定义了 label 为
default
的 VLAN Network,VLAN ID 的范围是 3001~4000。这个范围是针对普通用户创建 VLAN 类型租户网络时的范围。普通用户创建 VLAN 类型网络时并不能指定 VLAN ID,Neutron 会按顺序自动从这个范围中取值。 - 对于 admin 用户则没有 VLAN ID 的限制,admin 可以创建 1~4094 范围(全范围)内的 VLAN 网络。
- 同样需要指明 VLAN Network 与物理网卡的对应关系
VxLAN
VxLAN 是基于隧道(Tunnel)技术的 Overlay 覆盖网络。VxLAN 网络通过唯一的 Segmentation ID(VNI)来进行划分,VxLAN 中的数据包会通过 VNI 封装成 UDP 包进行传输。所谓 Overlay 就是覆盖在三层网络之上的自定义网络,从用户的角度来看,它屏蔽了底层网络的复杂性。VxLAN 将二层的数据帧封装在三层数据包进行传输,从而克服 VLAN 和物理网络基础设施的限制。
NOTE:VxLAN 的实现原理请查阅 https://blog.csdn.net/Jmilk/article/details/85169871#VxLAN_Tunnel_Endpoint_579,这里不再赘述。
配置 VxLAN 网络
vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
tennat_network_type=vxlan
type_drivers=local,flat,vlan,vxlan
mechanism_drivers=linuxbridge,l2population
...
[ml2_type_vxlan]
vni_ranges=1001:2000
NOTE:VxLAN 的运行原理是不需要特别指定 “物理网络(网卡)” 的,因为 VxLAN 依赖于 VTEP 端点的 IP,只要这两端的 IP 能通就可以了。
控制节点的 VxLAN Section:
[VXLAN]
enable_vxlan=True
l2_population=True
local_ip=<control_ip>
计算节点的 VxLAN Section:
[VXLAN]
enable_vxlan=True
l2_population=True
local_ip=<compute_ip>
vni_ranges
的意义与 VLAN 网络的network_vlan_ranges
配置项目的意义类似,是针对普通租户的配置。admin 同样没有 vni 范围的限制,admin 可以创建 1~16777216 的 VxLAN Network。- l2population 是 Neutron 实现了 “大二层控制平面”,直接通过数据库记录生成 IP 与 MAC 的映射关系,以此来完成 ARP 协议的工作内容,避免广播风暴的问题。在大型的网络中作用巨大。
GRE
CRE 与 VxLAN 类似,也是一种 Overlay 网络,主要区别在于使用的隧道技术不同,GRE 是通过 gre key 进行划分的,并且使用了 IP 包而非 UDP 来进行封装。这里不再赘述。