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;