常見三網絡划分
External Network/API Network:連接外網,用於調用 openstack 的 API,虛擬機訪問外網,外部ssh到虛擬機
Data Network:數據網絡,虛擬機之間的數據傳輸
Management Network:管理網絡,openstack 內部各個模塊之間的交互,連接數據庫,連接 Message Queue
Neutron中的網橋
br-int 綜合網橋,實現內部網絡功能
br-ex 外部網橋,與外部網絡通信
單節點是 openstack 的測試環境,對於復雜環境的多節點,每個機器都有自己的 br-int
對於多節點結構,可以想象 br-int 是一個大的,橫跨所有節點的二層 switch
然而 br-int 在實際環境中是物理的分隔開了,需要有一種方式將它們串聯起來,openstack 提供了多種方式,例如 GRE,VLAN,VxLAN
不同機器上的 br-int 通過 br-int 下面的網卡連接
對於虛擬機和虛擬 router,它們仍然覺得是連接到了一個大的 L2 的 br-int 上,通過這個 br-int 相互通信,它們感受不到 br-int 下面的虛擬網卡 br-tun
如果有不同的 tenant,創建了不同的 private network,為了在 Data Network 上對數據進行隔離,創建 private network 的時候,需要指定 vlanid
不同的 tenant 的 private network 上創建的虛擬機,連接到 br-int 上的時候都是帶 tag 的,所以不同 tenant 的虛擬機,即使連接到同一個 br-int 上,因為 tag 不同,也是不能相互通信
同一個機器上的 tag 計數僅在本機有效,並不使用我們創建 private network 指定的全局唯一的 vlanid
全局唯一的 vlanid 僅在 br-int 以下的虛擬網卡和物理網絡中使用
虛擬機僅能感知 br-int 以上的網絡,看不到打通 br-int 所要使用的 vlanid
neutron 組件的簡單流程圖
neutron-server:接受 api 調用,發送到對應的 neutron-plugin 上
neutron-plugin:實現網絡功能,交給對應的 neutron-agent
neutron-agent:模擬出具體設備
neutron-L2-agent:二層代理,用於管理 vlan 的插件,實現二層網絡通信的代理
neutron-L3-agent:租戶網絡和 floating ip 之間的轉換
neutron-metadata-agent:運行在網絡節點,用於響應 nova 的 metadata 請求
LBaaS agent:為多台實例和 ovs agent 提供負載均衡服務
Linux虛擬網絡基礎
虛擬網絡設備 tap/tun
tap/tun 虛擬了一套網絡接口,與物理網絡幾乎無區別
tap/tun 虛擬網絡設備的原理:
在 linux 內核中添加了一共 tap/tun 虛擬設備的驅動程序,和與之關聯的字符設備文件 /dev/tunX,協議棧可以像操作普通網卡一樣操作(read/write 設備文件) tunX 代表的虛擬網卡
tap位於數據鏈路層,與以太網協議對應
##檢查linux系統是否有tun模塊 modinfo tun ##檢查tun模塊是否已經加載 lsmod | grep tun ##如果沒有加載則執行以下命令加載 modprobe tun ##檢查是否有tun/tap的命令行操作工具tunctl tunctl help yum install tunctl
##創建一個tap設備 tunctl -f tap_test ##給tap設備配置IP地址 ip addr add 192.168.12.3/24 dev tap_test ifconfig 192.168.12.3/24 tap_test
tun是一個網絡層的點對點設備,它啟用了IP層隧道功能,Linux原生支持的三層隧道,可以通過命令行ip tunnel help查看
lsmod | grep gre modprobe gre ##加載gre模塊
##在ns1上創建tun1和gre tunnel ip netns exec ns1 ip tunnel add tun1 mode gre remote 192.168.200.2 local 192.168.100.2 ttl 255 ip netns exec ns1 ip link set tun1 up ip netns exec ns1 ip addr add 192.168.50.10 peer 192.168.60.10 dev tun1 ##在ns2上創建tun2和gre tunnel ip netns exec ns2 ip tunnel add tun2 mode gre remote 192.168.100.2 local 192.168.200.2 ttl 255 ip netns exec ns2 ip link set tun2 up ip netns exec ns2 ip addr add 192.168.60.10 peer 192.168.50.10 dev tun2
tap 和 tun 的區別:
1.tap 工作在二層,可以配置 mac 和 ip 地址
tun 工作在點對點三層,無 mac 地址
2.tap 子網掩碼為 /24,對應以太網設備
tun 子網掩碼為 /30,對應點對點設備
3.tap 用於創建網橋
tun 一般用於路由
namespace
linux namespace隔離的資源
uts_ns UTS為Unix Timesharing System的簡稱,包含內存名稱、版本、底層體系結構等信息 ipc_ns 所有與進程間通信(IPC)有關的信息 mnt_ns 當前裝載的文件系統 pid_ns 有關進程ID的信息 user_ns 資源配額的信息 net_ns 網絡信息
ip netns ##創建一個namespace ip netns add ns_test ##把虛擬設備tap_test遷移到這個namespace ip link set tap_test netns ns_test ##在ns_test里執行配置IP地址 ip netns exec ns_test ifconfig tap_test 192.168.12.3/24 up
veth pair
veth-pair 是成對出現的一種虛擬網絡設備,一端連接協議棧,一端互聯
常用於連接虛擬網絡組件,例如 linux bridge,ovs
##創建veth pair ip link add tap1 type veth peer name tap2 ##創建namespace:ns1、ns2 ip netns add ns1 ip netns add ns2
##把兩個tap分別遷移到對應的namespace中 ip link set tap1 netns ns1 ip link set tap2 netns ns2
##分別給兩個tap綁定IP地址 ip netns exec ns1 ip addr add local 192.168.50.1/24 dev tap1 ip netns exec ns2 ip addr add local 192.168.50.2/24 dev tap2
##將兩個tap設置為up ip netns exec ns1 ifconfig tap1 up ip netns exec ns2 ifconfig tap2 up
##ping ip netns exec ns2 ping 192.168.50.1 ip netns exec ns1 ping 192.168.50.2
Bridge
如果多個namespace之間需要互通,veth pair只有一對tap,無法滿足需求,這就需要用的Bridge/Switch
##Linux實現Bridge功能的是brctl模塊 yum install bridge-utils brctl
實現4個namespace通過veth pair、Bridge互聯
##創建veth pair ip link add tap1 veth peer name tap1_peer ip link add tap2 veth peer name tap2_peer ip link add tap3 veth peer name tap3_peer ip link add tap4 veth peer name tap4_peer ##創建namespace ip netns add ns1 ip netns add ns2 ip netns add ns3 ip netns add ns4 ##把tap遷移到相應namespace中 ip link set tap1 netns ns1 ip link set tap2 netns ns2 ip link set tap3 netns ns3 ip link set tap4 netns ns4 ##創建bridge brctl addbr br1 ##把相應tap添加到bridge中 brctl addif br1 tap1_peer brctl addif br1 tap2_peer brctl addif br1 tap3_peer brctl addif br1 tap4_peer ##配置相應tap的ip地址 ip netns exec ns1 ip addr add local 192.168.50.1/24 dev tap1 ip netns exec ns2 ip addr add local 192.168.50.2/24 dev tap2 ip netns exec ns3 ip addr add local 192.168.50.3/24 dev tap3 ip netns exec ns4 ip addr add local 192.168.50.4/24 dev tap4 ##將bridge及所有tap狀態設置為up ip link set br1 up ip link set tap1_peer up ip link set tap2_peer up ip link set tap3_peer up ip link set tap4_peer up ip netns exec ns1 ip link set tap1 up ip netns exec ns2 ip link set tap2 up ip netns exec ns3 ip link set tap3 up ip netns exec ns4 ip link set tap4 up ##ping測試 ip netns exec ns1 ping 192.168.50.4
Neutron的網絡實現模型
計算節點的實現模型
VLAN實現模型
qbr (quantum bridge)
常見實現載體linux bridge,引入qbr主要是利用iptables實現security group功能
br-int (integration bridge)
常見實現載體openvswitch,綜合網橋,qbr與br-int之間通過vethpair連接,vm與qbr之間通過tap連接
br-ex (bridge-ethernet-external)
常見實現載體openvswitch,負責外部通信,br-ex與br-int之間通過vethpair連接
內外VLAN ID的轉換
參考鏈接:
https://www.cnblogs.com/fish001/articles/5619132.html
https://blog.csdn.net/controllerha/article/details/78881018
https://blog.csdn.net/liuxiaoxueer/article/details/89163433
https://www.cnblogs.com/tongxiaoda/p/8862789.html
https://www.cnblogs.com/wyzhou/p/9286864.html