基于 Linux Bridge 的 Neutron 多平面网络实现原理
目录
前言
本文是在 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 来进行封装。这里不再赘述。
基于 Linux Bridge 的 Neutron 多平面网络实现原理的更多相关文章
- 理解 neutron(15):Neutron linux-bridge-agent 创建 linux bridge 的简要过程
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
- Neutron 理解(14):Neutron ML2 + Linux bridge + VxLAN 组网
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
- 理解 neutron(15):Neutron Linux Bridge + VLAN/VXLAN 虚拟网络
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
- Neutron VxLAN + Linux Bridge 环境中的网络 MTU
1. 基础知识 1.1 MTU 一个网络接口的 MTU 是它一次所能传输的最大数据块的大小.任何超过MTU的数据块都会在传输前分成小的传输单元.MTU 有两个测量层次:网络层和链路层.比如,网络层 ...
- Netruon 理解(12):使用 Linux bridge 将 Linux network namespace 连接外网
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
- 4..部署场景2:带有遗留的Linux Bridge
此场景描述了使用Linux bridge的ML2插件实现OpenStack网络服务的遗留(基本)实现. 遗留实现通过为常规(非特权)用户提供一种方法来管理一个项目中的虚拟网络,并包含以下组件:提供了自 ...
- ebtables和iptables与linux bridge的交互
本文为翻译文,不一定是逐字逐句的翻译,而且中间会加上自己的一点见解,如有理解错误的地方,还请大家指出,我定虚心学习.原文见链接 其中斜体字是自己的理解,建议和ebtables手册和iptables手册 ...
- 【转载】基于Linux命令行KVM虚拟机的安装配置与基本使用
基于Linux命令行KVM虚拟机的安装配置与基本使用 https://alex0227.github.io/2018/06/06/%E5%9F%BA%E4%BA%8ELinux%E5%91%BD%E4 ...
- 基于Linux平台的libpcap源码分析和优化
目录 1..... libpcap简介... 1 2..... libpcap捕包过程... 2 2.1 数据包基本捕包流程... 2 2.2 libpcap捕包过程... ...
随机推荐
- Docker从0开始之部署一套2048
创建容器并运行程序 [root@localhost ~]# docker run -d -p 8888:80 daocloud.io/daocloud/dao-2048:master-a2c564e ...
- HDU - 6087 Rikka with Sequence (可持久化treap+倍增+重构)
题目链接 感谢Dream_Lolita的题解,经过无数次失败的尝试之后终于AC了... 线段树是维护区间信息的强大工具,但它的形态是固定的,只支持修改和删除操作,不支持插入.反转.复制.分裂合并等操作 ...
- C#使用BinaryReader类读取二进制文件
Close():关闭BinaryReader对象: Read():从指定流读取数据,并将指针迁移,指向下一个字符. ReadDecimal():从指定流读取一个十进制数值,并将在流中的位置向前 ...
- QT:如何重新生成makefile文件
- CSS的Animation&Transition&gradients属性
㈠Animation&Transition&gradients 代码示例 圆形,渐变颜色,旋转,当鼠标放在圆上,圆旋转变大 <!DOCTYPE html> <html ...
- css3之3D 旋转立方体与哆啦A梦
主要记录两个css3 3D转换的示例 ㈠哆啦A梦 三个哆啦A梦的图片,分别让其围绕X轴,Y轴,Z轴旋转60度,鼠标放上开始发生变化. 具体代码如下图所示: <!DOCTYPE html> ...
- Visual Stdio C++ 编译器、链接器常用命令
概览: cmd常用命令配合使用: del 删除指定文件 同erase cls 清屏 rd 删除空目录文件夹 dir 显示目录 cd 在当前盘符跳转指定目录(不同盘符跳转用盘符号)(分别表示根目录 上一 ...
- BZOJ 3940 Censoring ( Trie 图 )
题目链接 题意 : 中文题.点链接 分析 : 直接建 Trie 图.在每一个串的末尾节点记录其整串长度.方便删串操作 然后对于问询串.由于可能有删串操作 所以在跑 Trie 图的过程当中需要拿个栈记录 ...
- hdu 1796 How many integers can you find 容斥第一题
How many integers can you find Time Limit: 12000/5000 MS (Java/Others) Memory Limit: 65536/32768 ...
- AbpUser 扩展
AbpUser表存放的信息比较少,现扩展一下信息 1.在Core层添加UserExtend 类,继承 AbpUser<User>,写入以上各项属性字段,并添加Discriminator 字 ...