Linux Bridge
最经典的网桥实现,基本上参考一个传统硬件交换机的功能来实现,自学习转发表,支持 STP。
物理网卡可以绑定到 LB 上,通过混杂模式将所有包转发到 LB 上,LB 按照传统二层交换机功能进行转发。
LB 也支持 Vlan 隔离,以及常见封装协议。
MacVLan
首先,不要被名字误导,其实跟 vlan 没啥关系。
在一个物理网卡 ethX 上可虚拟出多个 MacVLan 设备,系统看到的是类似 xxx@ethX 命名格式的虚拟网卡。相对网桥来说更加轻量级。
每个 MacVLan 设备拥有不同的 mac 地址和 IP 地址,只有匹配到某个 MacVLan 设备的地址的流量才会发给该设备,模拟 vlan 隔离效果。
创建方式(忽略 mac 地址则会自动随机创建):
# ip li add link eth0 macvlan0 address 9a:cb:eb:26:a7:8d type macvlan mode bridge
一共支持四种模式:VEPA、Private、Bridge 和 Passthrough。前三种都是参考 EVB 标准。
VEPA (Virtual Ethernet Port Aggregator)
默认模式,需要外部交换机支持 VEPA/802.1Qbg。多个虚拟机指定同一个接口(例如 eth0),通过该接口连接到外部的物理网络。本地之间的访问需要先绕到外部的物理(也可以配置为软交换机)交换机,然后由外部交换机进行转发,再绕回来。是 EVB标准的一种。
注:VEPA/802.1Qbg,即需要外部交换机支持 Reflective Relay,或者发夹(Hairpin)模式,即从一个接口发上来的流量还能扔回去。
Private
类似 VEPA,但本地几个 MacVLan 接口之间不能相互访问,即使外部交换机支持 Reflective Relay 也不成。除非虚机处在不同的子网,经过外面网关的转发再绕回来。要求源和目的都配置为 private 模式。这种模式是不是很眼熟?多租户的公有云里面应该用处挺大。
Bridge
通过一个虚拟的网桥来连通本地的多个 MacVLan 接口,本地通信不需要发送到外部交换机。这种情况下,虚拟网桥知道每个接口的 Mac 地址,不需要实现学习和 STP 功能,比传统网桥简单且高效。
当然,要求源和目的虚机都配置为 bridge 模式。
Passthrough
独占物理网卡,并配置为 promiscuous 模式。一般一个网卡上只允许绑定一个 MacVlan 设备。本地无法直接交换,得靠外面交换。
MacvTap
如果把 MacVLan 设备再关联上一个 tap 设备,从物理网卡到达的网包不交给内核网络栈处理,而直接发给 tap 文件,就叫做 MacVTap,方便用户态应用直接处理网络流量。
OpenvSwitch
除了拥有 LB 的传统二层交换机功能,OpenvSwitch 最强大的是对 SDN 的支持:独立的 ovsdb,复杂的流表控制,支持外部控制器,基于 Linux TC 实现的 QoS 等。
SR-IOV
硬件虚拟化,网卡支持 SR-IOV,则一个物理网卡 PF,可以直接虚拟为多个 VF。网卡内自带嵌入式交换机,功能简单,但性能高。通过 PCI-passthrough 可以直接把 VF 挂载到虚拟机中作为网卡,也可以通过 macvtap 的 passthrough 模式再加一层桥接。
No comments:
Post a Comment