Quantum中的L3模型實戰

2021-08-27 07:36:08 字數 3633 閱讀 6220

截止到openstack folsom版,quantum中的物件模型有以下幾個:network, subnet, port, router, floatingip。前三個在我之前的部落格已有所分析,今天來看下router和floatingip。

以官方文件中給出的乙個quantum部署示例為例:

這個圖是使用者視角的虛擬機器網路部署。每個租戶可以建立自己的router,並把自己的private network與router關聯。同時,可以把router與乙個external network關聯,在這個external network上建立公網ip池(即建立subnet,subnet裡的ip是公網ip)。更進一步,可以建立floatingip並將其與虛擬機器的port繫結,這樣就可以從公網訪問虛擬機器。

下面使用quantum命令列來從無到有完成上述的網路模型。注意,實際執行命令時,將尖括號內的內容替換成實際內容,我都是以管理員角色執行的命令,實際執行時,可以根據需要在命令引數中新增--tenant-id。

1. 建立

network

為租戶a建立網路tenanta_privatenet:

quantum net-create --tenant-id tenanta_privatenet --provider:network_type vlan --provider:physical_network physnet1 --provider:segmentation_id 1024

(我的ovs_quantum_plugin.ini中有如下配置:tenant_network_type=vlan;network_vlan_ranges = physnet1:1:4094)

為租戶c建立網路tenantc_privatenet1和tenantc_privatenet2:

quantum net-create --tenant-id tenantc_privatenet1 --provider:network_type vlan --provider:physical_network physnet1 --provider:segmentation_id 1025

quantum net-create --tenant-id tenantc_privatenet2 --provider:network_type vlan --provider:physical_network physnet1 --provider:segmentation_id 1026

建立外部網路external_net:

quantum net-create external_net --router:external=true

2. 為網路新增

subnet

在租戶a的網路上新增subnet:

quantum subnet-create --tenant-id tenanta_privatenet 10.0.0.0/24

在租戶c的網路上分別新增subnet:

quantum subnet-create --tenant-id tenantc_privatenet1 10.0.0.0/24

quantum subnet-create --tenant-id tenantc_privatenet2 10.0.1.0/24

(注意設定配置項

quantum subnet-create external_net --gateway 30.0.0.1 30.0.0.0/22 --enable_dhcp=false

3. 指定網路建立虛擬機器

虛擬機器的建立不屬於本篇範疇,略去。假設:

租戶a在tenanta_privatenet網路上建立兩個虛擬機器a_vm1和a_vm2,這樣,在quantum上就對應的建立了兩個port,a_port1和

a_port2.

同樣的,租戶c建立虛擬機器:c_vm1, c_vm2, c_vm3, c_vm4,對應的port:c_port1, c_port2, c_port3, c_port4

4. 建立

router

為租戶a建立路由routera:

quantum router-create --tenant-id routera

為租戶c建立路由routerc:

quantum router-create --tenant-id routerc

router

建立完後,其實什麼也沒做,只在資料庫新增了一條記錄。

5. 將租戶a和c的router與外部網路關聯

quantum router-gateway-set routera external_net

quantum router-gateway-set routerc external_net

上述命令,其實是在external_net上面建立了兩個port,port的屬性中device_owner=network:router_gateway,device_id=router_id。在建立port的同時,分別分配了公網ip(因為外部網路的子網是公網ip)。

6. 將租戶a和c的虛擬機器繫結到各自的

router

quantum router-inte***ce-add routera

quantum router-inte***ce-add routerc

quantum router-inte***ce-add routerc

上述命令,其實是在各自subnet所對應的network內建立port,port的屬性中device_owner=network:router_inte***ce,device_id=router_id,

fixed_ip=

需要注意的是,在同乙個router內,ip位址是不能重複的。

7. 給虛擬機器關聯公網

ip首先建立四個floatingip:

quantum floatingip-create external_net

quantum floatingip-create external_net

quantum floatingip-create external_net

quantum floatingip-create external_net

上述命令執行後,其實是在external_net分配了四個port,port的屬性中

device_owner=network:floatingip

然後關聯floatingip和虛擬機器port:

quantum floatingip-associate

quantum floatingip-associate

quantum floatingip-associate

quantum floatingip-associate

至此,完成了上述的網路模型。

當然,邏輯上的網路模型只是為了方便應用,其實並不能說明什麼,底層的實現才是關鍵。quantum的安裝部署中,有乙個l3 agent程序(可以是乙個或多個),這個程序指令碼其實就是個死迴圈,不停的呼叫quantumapi獲取router和floatingip的資訊,然後通過底層的網路命令實現上層的模型(主要還是iptable命令)。這樣,在大規模部署時,如果系統中存在多個router和floatingip,將會對l3 agent造成較大的負載,雖然可以通過增加迴圈間隔的方式緩解,但這樣又會造成資訊的延遲生效。所以,需要尋求兩外的方式來滿足規模部署的需求。

Scatter Gather I O在L3中的應用

a 圖中,第乙個sk buff跟不支援scatter gather i o的情況一樣,而當再次追加資料時,情況則不同。kernel會申請乙個page buffer,將新的資料填入這個page,同時讓sk buff skb shingo frags指向這個page,並置上正確的偏移。frags 0 的...

3 TinkPHP中的模型

資料庫的連線配置項可以在系統的主配置檔案中 模型是mvc 三大組成部分的 m,作用是負責與資料表達額互動 crud 命名規範 不帶字首的標明並且首字母大寫 model class.php 引入父類model.class.php 宣告模型並且繼承父類模型 obj new usermodel obj d...

Linux安全模型中的3A

uid user id gid group id 建立使用者時會自動建立同名的使用者組 乙個程式訪問乙個檔案,需要看執行程式的使用者身份來決定是否可以訪問該檔案。根據規定,普通使用者的uid必須大於499且不能和已存在的uid重複。但是我們通過看useradd 選項可以發現 o,non unique...