NFV基础
neutron是对二层物理网络的抽象与管理,实例的网络功能由连接到vSwitch的端口上的vNIC共同实现,再通过物理服务器的物理网卡访问外部的物理网络。
NFV实现
网卡虚拟化:tap、tun、veth;
交换机虚拟化:linuxbridge、ovs、ovn;
网络隔离:network namespace;
tap:模拟二层网络设备,实现数据帧交换;
tun:模拟三层网络设备,实现数据包转发;
veth pair:成对出现,一端连接着协议栈、一端连接着对端,常用来连接不同的虚拟网络组件,形成网桥;
linuxbridge
tap0和tap1接入了br0,在操作系统中查看对应2各ethx,但是对于hypervisor的网络协议栈上层来说,只能看到br0,并不会关心桥接的细节。
物理机接收数据包时,会交给br0决定数据包的去向,br0会根据mac地址与端口的映射关系进行转发。
由于bridge工作在二层,tap0与tap1没有ip地址。对于上层路由器来说,tap0与tap1位于同一子网,因此只有br0需要ip地址。
即使物理服务器的eth0原本有ip地址,但是在被桥接到br0后,其ip地址会失效,用户程序不能接收到这个ip地址的数据。
# 创建网桥br0
brctl addbr br0
# 将eth0添加到网桥br0
brctl addif br0 eth0
linuxbridge适用于小规模、内部通信。
ovs
由于ovs支持vlan,可以用作隔离,还支持NetFlow、sFlow等标准管理接口协议,用作流量监控,所以适用于大规模、主机间通信。
ovs-vsctl add-br br0ovs-vsctl add-port eth0ovs-vsctl show br0
# 显示网桥br0下所有端口的描述信息
ovs-vsctl dump-ports-desc br0
# 显示网桥br0上所有的OpenFlow,流表项决定了流量如何被转发、处理
ovs-ofctl dump-flows br0
ovn
ovn在ovs的基础上增加了编排功能。
network namespace
network namespace,能够创建多个隔离的命名空间,拥有独立的虚拟设备、路由表、iptables。
ip netns listip netns add red
ip netns delete red
# 查询某个进程(PID)属于哪个网络命名空间。
ip netns identify <pid>
# 查询red命名空间有哪些进程
ip netns pids red
# 切换到red命名空间执行命令
ip netns exec red <command>
# 实时监控网络命名空间
ip netns monitor
openstack中的NFV
qbr:linux bridge创建的网桥,通过iptables实现security group功能;
br-int:openvswitch创建的网桥,综合网桥,实现二层交换;
br-tun:openvswitch创建的网桥,隧道网桥,通过隧穿封装,连接br-int形成通道,实现三层转发;
qvb:veth pair虚拟以太对,qbr是由inux bridge创建的网桥,故使用qvb作为虚拟接口;
qvo:veth pair,br-int是由ovs创建的网桥,故使用qvo作为虚拟接口;
br-ex:ovs创建的网桥,绑定物理网卡,负责南北向流量,通过iptables实现nat转换;
local:实例只能与位于同一物理节点上的同一网络的其他实例相通;
flat:平面网络,实例只能能与位于同一网络的其他实例相通,可以跨节点;
vlan:使用802.1q协议,同一vlan的实例通信方式为二层交换,不同vlan的实例通信需要借助三层转发,可以跨节点;
vxlan:基于隧道封装技术的overlay网络,按照vni(segmentation ID)进行划分,数据包会通过vni封装成udp包进行传输;
gre:与vxlan类似,主要区别在于使用ip包进行封装而非udp;