neutron的基本原理


常見三網絡划分

 

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 ns
2

##分別給兩個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

https://www.cnblogs.com/bakari/p/10494773.html

https://blog.csdn.net/chengqiuming/article/details/79840092


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM