网桥
br-ex
连接外部(external)网络的网桥
br-int
集成(integration)网桥,所有 instance 的虚拟网卡和其他虚拟网络设备都将连接到该网桥
br-int 上各个 port 每个port相当于交换机上面的端口
br-tun
隧道(tunnel)网桥,基于隧道技术的 VxLAN 和 GRE 网络将使用该网桥进行通信
使用的是 Open vSwitch 而非 Linux Bridge,brctl show 命令却看不到它们
-
tap interface 命名为 tapXXXX。 一般是代表虚拟机的虚拟网卡
-
linux bridge 命名为 qbrXXXX。
-
veth pair 命名为 qvbXXXX, qvoXXXX veth pair 是一种成对出现的特殊网络设备,它们象一根虚拟的网线连接两个网络设备
- OVS provider bridge 命名为 br-ethX(X 为 interface 的序号)
- patch port ovs独有的虚拟网线设备
veth pair 和 patch port的区别:
patch port 是 ovs bridge 自己特有的 port 类型,只能在 ovs 中使用
如果是连接两个 ovs bridge,优先使用 patch port,因为性能更好
连接两个 ovs bridge,优先使用 patch port.技术上veth pair 也能实现,但性能不如 patch port
连接 ovs bridge 和 linux bridge,只能使用 veth pair
连接两个 linux bridge,只能使用 veth pair
local network网络模型
local network 不会与宿主机的任何物理网卡连接 流量只被限制在宿主机内 同时也不关联任何的 VLAN ID
1.每个蓝色的框代表一个local network 每个网络有独立的网络命名空间 用命名空间隔离每个dhcp服务
2.每个虚拟机通过tap设备连接到对应到自己Linux Bridge上 这个Linux Bridge主要用来实现自己的防火墙规则
3.Linux Bridge设备通过veth pair 虚拟网线连接到 ovs 创建的br-int
4.所有的虚拟机都会连接到br-int设备上 每个虚拟机通过tag这个虚拟vlan来做数据包的隔离
5.只有属于同一个local 网络的虚拟机才能相互ping通 不同local网络之间的虚机是不能通信的
6.所有的虚拟机是不能和外界通信的
flat network网络模型
flat network 是不带 tag 的网络,宿主机的物理网卡通过网桥与 flat network 连接,每个 flat网都会占用一个物理网卡 每个网络与物理网卡一一对应
每创建一个flat network需要占用一张独立的物理网卡 所有属于这个flat 网络下的虚拟机都是通过这个被占用的物理网卡进行跨主机通信
如果没有跨越主机之间的虚拟机进行通信就相当于一个local 网络通信 下图创建的 flat网络 占用每个物理机的eth1网卡
vlan网络模型
vlan network 是带 tag 的网络
在 Open vSwitch 实现方式下,不同 vlan instance 的虚拟网卡都接到 br-int 上. 这一点与 linux bridge 非常不同,linux bridge是不同 vlan 接到不同的网桥上.
收发 vlan 数据的物理网卡为 eth1,上面可以走多个 vlan.所以物理交换机上与 eth1 相连的的 port 要设置成 trunk 模式,而不是 access 模式
cirros-vm1 位于控制节点,属于 vlan100
cirros-vm2 位于计算节点,属于 vlan100
cirros-vm3 位于计算节点,属于 vlan101
cirros-vm1 与 cirros-vm2 都在 vlan100,它们之间能通信 cirros-vm3 在 vlan101,不能与 cirros-vm1 和 cirros-vm2 通信
OVS 如何实现 vlan100 和 vlan101 的隔离:
与 Linux Bridge不同,Open vSwitch并不通过 eth1.100, eth1.101 等 VLAN interface 来隔离不同的 VLAN.所有的 instance 都连接到同一个网桥 br-int
Open vSwitch 通过 flow rule(流规则)来指定如何对进出 br-int 的数据进行转发,进而实现 vlan 之间的隔离
当数据进出 br-int 时,flow rule 可以修改,添加或者剥掉数据包的 VLAN tag,Neutron 负责创建这些 flow rule 并将它们配置到 br-int,br-eth1 等 Open vSwitch 上
数据包在物理网络中通过 VLAN 100 和 VLAN 101 隔离,在计算节点 OVS br-int 中则是通过内部 VLAN 1 和 VLAN 5 隔离
两个OVS桥的作用:
br-eth1桥
实现当虚拟机向物理机网卡发送数据包的时候 把数据包中的ovs内部vlan tag修改成物理网络对应的vlan tag 然后再转发给物理机网卡
br-eth1 跟 VLAN 相关的 flow rule
priority=4,in_port=2,dl_vlan=1 actions=mod_vlan_vid:100,NORMAL
priority=4,in_port=2,dl_vlan=5 actions=mod_vlan_vid:101,NORMAL
第一条的含义是: 从 br-eth1 的端口 phy-br-eth1(in_port=2)接收进来的包,如果 VLAN ID 是 1(dl_vlan=1)那么需要将 VLAN ID 改为 100(actions=mod_vlan_vid:100)
从上面的网络结构我们可知,phy-br-eth1 连接的是 br-int,phy-br-eth1 的 inbound(接收) 包实际上就是 instance 通过 br-int 发送给物理网卡的数据
br-int 通过 tag 隔离不同的 port,这个 tag 可以看成内部的 VLAN ID
从 qvo4139d09b-30(对应 cirros-vm2,vlan100)进入的数据包会被打上 1 的 VLAN tag
从 qvo98582dc9-db(对应 cirros-vm3,vlan101)进入的数据包会被打上 5 的 VLAN tag
因为 br-int 中的 VLAN ID 跟物理网络中的 VLAN ID 并不相同,所以当 br-eth1 接收到 br-int 发来的数据包时,需要对 VLAN 进行转换.Neutron 负责维护 VLAN ID 的对应关系,并将转换规则配置在 flow rule 中.
br-int桥
实现当物理机网卡向虚拟机发送数据包的时候 把数据包中的物理网络vlan tag 修改成ovs内部的虚拟vlan tag 然后再转发给虚拟机
priority=3,inport=1,dl_vlan=100 actions=mod_vlan_vid:1,NORMAL
priority=3,inport=1,dl_vlan=101 actions=mod_vlan_vid:5,NORMAL
port 1 为 int-br-eth1,那么这两条规则的含义就应该是:
1. 从物理网卡接收进来的数据包,如果 VLAN 为 100,则改为内部 VLAN 1
2. 从物理网卡接收进来的数据包,如果 VLAN 为 101,则将为内部 VLAN 5
数据包在物理网络中通过 VLAN 100 和 VLAN 101 隔离,在计算节点 OVS br-int 中则是通过内部 VLAN 1 和 VLAN 5 隔离