一、配置Linux Bridge
Neutron默认使用ML2作为core plugin,其配置位于/etc/neutron/neutron.conf,控制节点和计算节点都需要在各自的neutron.conf 中配置core_plugin选项。
然后需要让ML2使用linux-bridge mechanism driver,ML2的配置文件位于/etc/neutron/plugins/ml2/ml2_conf.ini。
[ml2] # ... mechanism_drivers = linuxbridge,l2population
mechanism_drivers选项指明当前节点可以使用的mechanism driver,这里可以指定多种driver,ML2会负责加载,上面的配置指明我们只使用linux-bridge driver,控制节点和计算节点都需要在各自的ml2_conf.ini中配置mechanism_drivers选项。
Neutron服务正常启动后,所有节点上都会运行neutron-linuxbridge-agent。
二、初始网络状态
在我们的实验环境中,当前节点上只存在物理网卡设备ethX,还没有bridge和tap,状态如下:
Controller:
Compute:
三、Network Type
linux-bridge支持local, flat, vlan和vxlan 四种network type,目前不支持gre。
1、local
local network的特点是不会与宿主机的任何物理网卡相连,也不关联任何的VLAN ID。
对于每个local netwrok,ML2 linux-bridge会创建一个bridge,instance的tap设备会连接到bridge。位于同一个local network的instance会连接到相同的bridge,这样instance之间就可以通信了。
因为bridge没有与物理网卡连接,所以instance无法与宿主机之外的网络通信,同时因为每个local network有自己的bridge,bridge之间是没有连通的,所以两个local network之间也不能通信,即使它们位于同一宿主机上。
下图是local network的示例:
创建了两个local network,分别对应两个网桥brqXXXX和brqYYYY。
VM0和VM1 通过tap0和tap1连接到brqXXXX。
VM2通过tap0和tap2 连接到brqYYYY。
VM0与VM1在同一个local network中,它们之间可以通信。
VM2位于另一个local network,由于brqXXXX和brqYYYY没有联通,所以VM2无法与VM0和VM1通信。
要想开启local功能,只需在ML2配置文件type_drivers包含local即可,如:
type_drivers = local,flat,vlan,gre,vxlan
普通用户和admin都可以通过CLI或者Web GUI创建网络,但只有amdin才能指定网络的type,所以需要用tenant_network_types告诉ML2当普通用户在自己的Tenant(Project)中创建网络时,默认创建哪种type的网络,这里type是local。
tenant_network_types = local
tenant_network_types可以指定多种type,比如:
tenant_network_types = vlan, local
其作用是先创建vlan网络,当没有vlan可创建时(比如vlan id用完),便创建local网络。
2、Flat Network
flat network是不带tag的网络,要求宿主机的物理网卡直接与linux bridge连接,这意味着:
每个flat network都会独占一个物理网卡。
上图中eth1桥接到brqXXX,为instance提供flat网络。
如果需要创建多个flat network,就得准备多个物理网卡,如下图所示。
因为flat网络与物理网卡一一对应,一般情况下租户网络不会采用flat,接着需要指明flat网络与物理网卡的对应关系。
在[ml2_type_flat]中通过flat_networks定义了一个flat网络,label为“default”。
在[linux_bridge]中通过physical_interface_mappings指明default对应的物理网卡为eth1。
3、VLAN Network
vlan network是带tag的网络,是实际应用最广泛的网络类型。三个 instance 通过 TAP 设备连接到名为 “brqXXXX” linux bridge。
在物理网卡 eth1 上创建了 eth1.100 的 vlan interface,eth1.100 连接到 brqXXXX。
instance 通过 eth1.100 发送到 eth1 的数据包就会打上 vlan100 的 tag。
如果再创建一个 network vlan101,eth1 上会相应的创建 vlan interface eth1.101,并且连接的新的 lingux bridge “brqYYYY”。
每个 vlan network 有自己的 bridge,从而也就实现了基于 vlan 的隔离。
因为物理网卡eth1上面可以走多个vlan的数据,那么物理交换机上与eth1相连的的port要设置成trunk模式,而不是access模式。
不同VLAN的设备怎么才可以通信呢,那就需要Router来提供数据转发服务,如下图。
参考:主要来源于《每天五分钟玩转OpenStack》,书籍很不错,欢迎大家去购买!
本文出自 “运维点滴记录” 博客,请务必保留此出处http://wzlinux.blog.51cto.com/8021085/1963447
OpenStack —— 网络进阶Linux Bridge(七)
原文地址:http://wzlinux.blog.51cto.com/8021085/1963447