截止到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...