vlan network 是带 tag 的网络,是实际应用最广泛的网络类型。
下图是 vlan100 网络的示例。
1. 三个 instance 通过 TAP 设备连接到名为 brqXXXX 的linux bridge。
2. 在物理网卡 eth1 上创建了 eth1.100 的 vlan interface,eth1.100 连接到 brqXXXX。
3. 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模式
首先在 /etc/neutron/plugins/ml2/ml2_conf.ini 中设置 vlan network 相关参数。
指定普通用户创建的网络类型为 vlan。
然后指定 vlan 的范围:
上面配置定义了 label 为default的 vlan network,vlan id 的范围是 3001 - 4000。 这个范围是针对普通用户在自己的租户里创建 network 的范围。 因为普通用户创建 network 时并不能指定 vlan id,Neutron 会按顺序自动从这个范围中取值。
对于 admin 则没有 vlan id 的限制,admin 可以创建 id 范围为 1-4094 的 vlan network。
接着需要指明 vlan network 与物理网卡的对应关系:
如上所示: 在 [ml2_type_vlan] 中定义了 lable default,[linux_bridge] 中则指明 default 对应的物理网卡为 eth1。
这里 label 的作用与前面 flat network 中的 label 一样,只是一个标识,可以是任何字符串。
配置完成,重启 Neutron 服务后生效。
在dashboard创建vlan network
其中 Segmentation ID 即 VLAN ID
在控制节点上执行 brctl show,查看当前网络结构。
Neutron 自动新建了三个设备:
1. vlan100 对应的网桥 brq3fcfdb98-9d。
2. vlan interface eth1.100。
3. dhcp 的 tap 设备 tap1180bbe8-06。
eth1.100 和 tap1180bbe8-06 已经连接到了 brq3fcfdb98-9d,VLAN 100 的二层网络就绪。
此时 vlan100 结构如图所示:
创建虚拟机连接vlan network,测试连通性
cirros-vm1 被 schedule 到控制节点,对应的 tap 设备为 tap238437b8-50,并且连接到 bridge。
当前 vlan100 的结构如下。
cirros-vm2 被 schedule 到计算节点,对应的 tap 设备为 tapac94e0e8-2b,并且连接到 bridge。
因为计算节点上没有 hdcp 服务,所以没有相应的 tap 设备。 另外,bridge 的名称与控制节点上一致,都是 brq3fcfdb98-9d,表明是同一个 network。
当前 vlan100 的结构如下:
cirros-vm1(172.16.100.3) 与 cirros-vm2(172.16.100.4) 位于不同节点,通过 vlan100 相连,测试连通性,可以ping通
不同vlan间通信,需要通过三层路由转发才能通信
路由服务(Routing)提供跨 subnet 互联互通功能。
例如前面我们搭建了实验环境:
cirros-vm1 172.16.100.3 vlan100
cirros-vm3 172.16.101.3 vlan101
这两个 instance 要通信必须借助 router。 可以是物理 router 或者虚拟 router。
物理 router
使用物理 router,如下图所示:
接入的物理 router 有两个 interface ip:
172.16.100.1 对应 vlan100 的网关。
172.16.101.1 对应 vlan101 的网关。
当 cirros-vm1 要跟 cirros-vm3 通信时,数据包的流向是这样的:
1. 因为 cirros-vm1 的默认网关指向 172.16.100.1,cirros-vm1 发送到 cirros-vm3 的数据包首先通过 vlan100 的 interface 进入物理 router。
2. router 发现目的地址 172.16.101.3 与 172.16.101.1 为同一个 vlan,则从 vlan101 的 interface 发出。
3. 数据包经过 brq1d7040b8-01 最终到达 cirros-vm3。
虚拟 router
虚拟 router 的路由机制与物理 router 一样,只是由软件实现。
Neutron 两种方案都支持。
如果要使用虚拟 router,需要启用 L3 agent。
L3 agent 会在控制节点或者网络节点上运行虚拟 router,为 subnet 提供路由服务。