前言
OpenStack計算管理
Nova作爲OpenStack的核心項目,提供大規模可擴展、按需彈性和自助服務的計算資源是整個OpenStack中最核心的項目。
OpenStack計算服務Nova簡介
OpenStack計算服務是什麼
- Nova
計算服務
首次出現在OpenStack的“Austin”版本中。 - 簡介
Nova提供大規模、可擴展、按需自助服務的計算資源。
Nova支持管理裸機,虛擬機和容器。 - 依賴的OpenStack服務
OpenStack最初幾個版本中,計算、存儲、網絡都由Nova實現,後面逐步拆分出存儲和網絡。
目前Nova專注提供計算服務,依賴Keystone的認證服務,Neutron的網絡服務Glance的鏡像服務。
Nova在OpenStack中的位置和作用
- Nova是什麼?
OpenStack中提供計算資源服務的項目 - Nova負責什麼?
- 虛擬機生命週期管理
- 其他計算資源生命週期管理
- Nova不負責什麼?
- 承載虛擬機的物理主機自身的管理
- 全面的系統狀態監控
- Nova是OpenStack事實上最核心的項目
- 歷史最長:OpenStack首批兩個項目之一
- 功能最複雜,代碼量最大
- 大部分集成項目和Nova之間都存在合作關係
- 貢獻者在社區中的影響力最大
Nova架構
Nova架構圖
Nova內部服務使用REST調用,Nova和其他OpenStack服務交互時,使用消息隊列。
Nova運行架構
Nova服務各組件可分佈式部署,且可通過virtDriver對接不同的虛擬化平臺。
Nova資源池管理架構
Region>Availability Zone>Host Aggregate
Nova組件詳細講解
Nova組件
API
Nova API功能
- 對外提供REST接口,接收和處理請求。
- 對傳入參數進行合法性校驗和約束限制。
- 對請求的資源進行配額的校驗和預留。
- 資源的創建、更新、刪除查詢等。
- 虛擬機生命週期管理的入口。
WSGI:Web Server Gateway Interface
Conductor
Nova-Conductor功能
- 數據庫操作,解耦其他組件(Nova-Compute)數據庫訪問。
- Nova複雜流程控制,如創建,冷遷移,熱遷移,虛擬機規格調整,虛擬機重建。
- 其他組件的依賴,如nova-compute需要nova-conductor啓動成功後才能啓動。
- 其他組件的心跳定式寫入。
引入Nova-Conductor的好處
- 安全性上考慮
之前每個nova-compute都是直接訪問數據庫的。如果由於某種原因,某個計算節點被攻陷了,那攻擊者就可以獲取訪問數據庫的全部權限,肆意操作數據庫。 - 方便升級
將數據庫和nova-compute解耦,如果數據庫模式改變,nova-compute就不用升級了。 - 性能上考慮
之前數據庫的訪問在nova-computer中直接訪問且數據庫訪問的是阻塞性的,由於nova-compute只有一個OS線程,所以當一個綠色線程去訪問數據庫的時候會阻塞其他綠色線程,導致綠色線程無法併發。但是nova-conductor是通過rpc調用,rpc調用是綠色線程友好的,一個rpc call的執行返回前不會阻塞其他綠色線程的執行。這樣就提高了操作的併發。
Scheduler
Nova-Scheduler功能
- 篩選和確定將虛擬機實例分配到哪一臺物理機
- 分配過程主要分爲兩步,過濾和權重:
- 通過過濾器選擇滿足條件的計算節點
- 通過權重選擇最優的節點
Compute
- Nova-Compute框架
- Manager
- Driver
- 對接不同的虛擬化平臺
- KVM
- VMware
- Xen
- LXC
- QEMU
- 虛擬機各生命週期操作的真正執行者(會調用對應的hypervisor的driver)
- 底層對接不同虛擬化的平臺(KVM/VMware/Xen/Ironic等)
- 內置週期性服務,完成資源刷新,虛擬機狀態同步等功能。
- 資源管理模塊(resource_tracker)配合插件機制,完成資源的統計。
Nova服務示例
列出Nova服務
$ openstack compute service list
Nova典型操作
Nova主要操作對象
虛擬機狀態介紹
- 虛擬機狀態介紹
- vm_state:數據庫中記錄的虛擬機狀態
- task_state:當前虛擬機的任務狀態,一般是中間態或者None。
- power_state:從hypervisor獲取的虛擬機的真實狀態。
- Statue:對外呈現的虛擬機狀態。
- 狀態之間的關係
- 系統內部只記錄vm_state和task_state,power_state
- Status是由vm_state和task_state聯合生成的
- 舉例
- vm_state爲active,task_state爲rebooting,則status爲REBOOT
- vm_state爲building,則status爲BUILD
虛擬機狀態組合
虛擬機狀態變遷圖
Nova典型工作流程
Nova創建虛擬機流程
- step1
用戶通過Dashboard/CLI申請創建虛擬機,並以REST API方式來請求KeyStone授權
Keystone鑑定後送回auth-token(用來通過REST-call向其他組件發送請求) - step2
Dashboard或者CLI將創建虛擬機請求轉換成REST API形式併發送給nova-api - step3
nova-api收到請求後向Keystone發送請求驗證auth-token並獲取權限
keystone驗證token併發送角色和權限更新的認證報頭 - step4
nova-api聯繫nova-database,爲新的實例創建初始數據庫條目(此時虛擬機狀態開始變成building) - step5
nova-api發送請求給nova-scheduler,以獲得適合安裝虛擬機的主機 - step6
nova-scheduler從queue中拿到請求 - step7
nova-scheduler聯繫nova-database通過過濾與權衡來查找最合適的主機- nova-scheduler在過濾與權衡後返回最合適安裝虛擬機的主機的ID
- nova-scheduler發送請求給nova-compute,請求創建虛擬機
- step8
nova-compute從queue中拿到請求,發送請求給nova-conductor以獲取選定主機的信息,如規格(ram,cpu,disk) - step9
nova-compute從queue中拿到請求,聯繫nova-db,返回選定主機的信息- nova-conductor將信息發送到queue中
- nova-compute從queue中得到選定主機的信息
- step10
nova-compute通過傳遞auth-token給glance-api進行REST調用,向glance請求使用鏡像服務 - step11
glance-api與keystone驗證auth-token,nova-compute得到鏡像元數據 - step12
nova-compute通過傳遞auth-token給Neutron-api進行REST調用,以獲取網絡服務 - step13
Neutron-api與keystone驗證auth-token,nova-compute得到網絡信息 - step14
nova-compute通過傳遞auth-token給Cinder-api進行REST調用,以獲取塊存儲服務 - step15
cinder-api與keystone驗證auth-token,nova-compute得到塊存儲信息 - step16
nova-compute生成驅動數據,驅動hypervisor生成虛擬機,完成虛擬機創建。
Nova調度過程
Nova規律調度器
Live Migration原理
- 遷移成功後會清除源節點的信息。
- 遷移失敗後會回滾,清除目標節點的信息。
OpenStack動手實驗:Nova操作
- 命令help
- 主機組管理
- 規格管理
- 祕鑰對管理
- 計算實例管理
OpenStack存儲
OpenStack提供多種類型的存儲服務,用戶可以根據業務需求,自由選擇存儲服務。
OpenStack存儲概述
OpenStack中有哪些存儲類型
OpenStack存儲可以分爲兩類
- Ephemeral Storage,臨時存儲
- 如果只部署了Nova服務,則默認分配給虛擬機的磁盤是臨時的,當虛擬機終止後,存儲空間也會被釋放。
- 默認情況下,臨時存儲以文件的形式放置在計算節點的本地磁盤上。
- Persistant Storage,持久性存儲
- 持久化存儲設備的生命週期獨立於任何其他設備或者資源,存儲的數據一直可用,無論虛擬機是否運行。
- 當虛擬機終止運行後,持久性存儲上的數據仍然可用。
目前OpenStack支持三種類型的持久性存儲:塊存儲、對象對出和文件系統存儲。
OpenStack持久化存儲簡介
- 塊存儲
操作對象是磁盤,直接掛載到主機,一般用於主機的直接存儲空間和數據庫應用,DAS和SAN都可以提供塊存儲 - 對象存儲
操作對象是對象(object),一個對象的名稱就是一個域名地址,可以直接通過REST API的方式訪問對象。 - 文件存儲
操作對象是文件和文件夾,在存儲系統上增加了文件系統,在通過NFS或CIFS協議進行訪問。
OpenStack存儲類型對比
塊存儲Cinder
Cinder簡介
OpenStack塊存儲服務是什麼?
- Cinder
塊存儲服務
首次出現在OpenStack的“Folsom”版本中 - 簡介
Cinder提供塊存儲服務,爲虛擬機實例提供持久化存儲。
Cinder調用不同存儲接口驅動,將存儲設備轉化成塊存儲池,用戶無需瞭解實際部署的位置或者設備類型。 - 依賴的OpenStack服務
Keystone
Keystone在OpenStack中的位置和作用
Cinder的核心功能是對卷的管理,允許對卷、卷的類型、卷的快照、卷備份進行處理。它爲後端不同的存儲設備提供了統一的接口,不同的塊設備服務廠商在Cinder中實現其驅動,可以被OpenStack整合管理。
Cinder架構
- Cinder Client封裝Cinder提供的rest接口,以CLI形式供用戶使用。
- Cinder API對外提供rest API,對操作需求進行解析,對API進行路由尋找相應的處理方法。包含卷的增刪改查(包括從源卷、鏡像、快照創建)、快照增刪改查、備份、volume type管理、掛載/卸載(Nova調用)等。
- Cinder Scheduler負責收集backend上報的容量、能力信息,根設定的算法完成捲到指定cinder-volume的調度。
- Cinder Volume多節點部署,使用不同的配置文件、接入不同的backend設備,由各存儲廠商插入driver代碼與設備交互完成設備容量和能力信息收集、卷操作。
- Cinder Backup實現將卷的數據備份到其他存儲介質(目前SWIFT/Ceph/TSM提供了驅動)
- SQL DB提供存儲卷、快照、備份、service等數據,支持Mysql、PG、MSSQL等SQL數據庫。
Cinder架構說明
Cinder架構部署:以SAN存儲爲例
- Cinder-api,Cinder-Scheduler,Cinder-Volume可以選擇部署到一個節點上,也可以分別部署。
- API採用AA模式,Haproxy作爲LB,分發請求到多個Cinder API。
- Scheduler也採用AA模式,有rabbitmq以負載均衡模式向3個節點發放任務,並同時從rabbitmq收取Cinder volume上報的能力信息,調度時,Scheduler通過在DB中預留資源從而保證數據一致性。
- Cinder Volume也採用AA模式,同時上報一個backend容量和能力信息,並同時接受請求進行處理。
- RabbitMQ,支持主備或集羣。
- MySQL,支持主備或集羣。
- Cinder可以避免單點故障。
Cinder組件詳細講解
API
Cinder API對外提供REST API,對操作需求進行解析,並調用處理方法:
- 卷create/delete/list/show
- 快照create/delete/list/show
- 卷attach/detach(Nova調用)
- 其他:
- Volume types
- Quotas
- Backups
Scheduler
- Cinder scheduler負責收集後端上報的容量、能力信息,根據設定的算法完成捲到制定cinder-volume的調度。
- Cinder Scheduler通過過濾和稱權,篩選出合適的後端:
根據後端的能力進行篩選: - Drivers定期報告後端的能力和狀態
- 管理員創建的卷類型(Volume type)
- 創建卷時,用戶指定卷類型
Volume
Cinder Vlomue多節點部署,使用不同的配置文件、接入不同的後端設備,由各存儲廠商插入Driver代碼與設備交互,完成設備容量和能力信息收集、卷操作等。
Cinder默認的後端驅動是LVM。
Cinder典型工作流程
Cinder創建卷流程
創建卷類型的目的是爲了篩選不同的後端存儲,例如SSD、SATA、高性能、低性能等,通過創建不同的自定義卷類型,創建卷時自動篩選出合適的後端存儲。
Cinder API
- 檢查參數合法性(用戶輸入,權限,資源是否存在等)。
- 準備創建的參數字典,預留和提交配額。
- 在數據庫中創建對應的數據記錄。
- 通過消息隊列將請求和參數發送到Scheduler。
Cinder Scheduler
- 提取接收到的請求參數
- 通過配置的filter和輸入參數對後端進行過濾
- Availability_zone_filter
- Capacity_filter
- Capabilities_filter
- Affinity_filter(SameBackendFilter/DifferentBackendFilter)
- ……
- Weigher計算後端進行權重
- CapacityWeigher/AllocatedCapacityWeigher
- ChanceWeigher
- GoodnessWeigher
- ……
- 選取最優的Backend並通過消息隊列將請求發送到指定的後端
Cinder Volume
- 提取接收到的請求參數
- 調用對應的Driver在後端創建實際的卷
- 使用Driver返回的模型更新數據庫中的記錄
Cinder掛載卷流程
掛載流程:掛卷是通過Nova和Cinder的配合最終將遠端的卷連接到虛擬機所在的Host節點上,並最終通過虛擬機管理程序映射到內部的虛擬機中。
- Cinder調用Cinder API創建卷,傳遞主機的信息,如hostname,iSCSI initiator name,FC WWPNs
- Cinder API將該信息傳遞給Cinder Volume
- Cinder Volume通過創建卷時保存的host信息找到對應的Cinder Driver
- Cinder Driver通知存儲允許該主機訪問該卷,並返回該存儲的連接信息(如iSCSI iqn,portal,FC target WWPN,NFS path等)
- Nova調用針對於不同存儲類型進行主機識別磁盤的代碼(Cinder提供了brick模塊用於參考)實現識別磁盤或文件設備。
- Nova通知Cinder已經進行了掛載。
- Nova將主機的設備信息傳遞給hypervisor來實現虛擬機掛載磁盤。
OpenStack動手實驗:Cinder操作
Cinder主要操作
Cinder主要操作的三個主要資源:
- Volume
塊設備卷,提供創建,刪除,擴容,掛載/卸載等功能。 - Snapshot
針對於塊設備卷的快照創建,刪除,回滾等功能。 - Backup
提供對塊存儲卷的備份,恢復能力。
動手實驗:Cinder操作
- 命令help
- 卷類型管理
- 卷QoS管理
- 卷管理
對線存儲Swift
Swift簡介
- SWIFT
對線存儲服務
首次出現在OpenStack的“Austin”版本中 - 簡介
Swift提供高度可用、分佈式、最終一致的對線存儲服務。
Swift可以高效、安全且廉價地存儲大量數據。
Swift非常適合存儲需要彈性擴展的非結構化數據。 - 依賴的OpenStack服務
爲其他OpenStack服務提供對象存儲服務。
Swift在OpenStack中的位置
Swift提供高度可用、分佈式、最終一致的對線存儲服務。
Swift在OpenStack中的作用
- Swift並不是文件系統或實時的數據存儲系統,它稱爲對線存儲,用於永久類型的靜態數據的長期存儲,用於永久類型的靜態數據的長期存儲,這些數據可以檢索、調整,必要時進行更新。
- 最適合存儲的數據類型的例子是虛擬機鏡像、圖片存儲、郵件存儲和存檔備份。
- 因爲沒有中心單元或主控結點,Swift提供了更強的擴展性、冗餘和持久性。
- Swift經常用於存儲鏡像或用於存儲虛擬機實例卷的備份副本。
Swift特點
- 極高的數據持久性
從理論上測算過,Swift在5個Zone、5*10個存儲節點的環境下,數據複製份是3,數據持久性的SLA能達到10個9。 - 完全對稱的系統架構
“對稱”意味着Swift中各節點可以完全對等,能極大的地降低系統維護成本。 - 無限的可擴展性
這裏的擴展性分兩方面,一是完全對稱的架構;二是Swift性能(如QPS、吞吐量等)可線性提升。因爲Swift是完全對稱的架構,擴容只需要簡單地新增機器,系統會自動完成數據遷移等工作,使各存儲節點重新達到平衡狀態。 - 無單點故障
在互聯網業務大規模應用的場景中,存儲的單點一直是個難題。例如數據庫,一般的HA方法只能做主從,並且“主”一般只有一個;還有一些其他開源存儲系統的實現中,元數據信息的存儲一直以來是個頭痛的地方,一般只能單點存儲,而這個單點很容易成爲瓶頸,並且一旦這個點出現異常,往往能影響到整個集羣。
Swift的元數據存儲是完全均勻隨機分佈的,並且與對象文件系統一樣,元數據也會存儲多份。整個Swift集羣中,也沒有一個角色是單點的,並且在架構和設計上保證無單點業務是有效的。
Swift應用場景
- 鏡像存儲後端
在OpenStack中與鏡像服務Glance結合,爲其存儲鏡像文件。 - 靜態數據存儲
由於Swift的擴展能力,適合存儲日誌文件和數據備份倉庫。
Swift架構
對象存儲服務的架構
完全對稱、面向資源的分佈式系統架構設計。
- Swift中對象的存儲URL如下所示:
https://swift.example.com/v1/account/container/object - 存儲URL有兩個基本部分
- 集羣位置:swift.example.com/v1/
- 存儲位置(對象):/account/container/object
- 存儲位置有如下三種
- /account
- 賬戶存儲位置是唯一命名的存儲區域,其中包含賬戶本身的元數據(描述性信息)以及賬戶中容器列表。
- 請注意,在Swift中,賬戶不是用戶身份。當您聽到賬戶時,請考慮存儲區域。
- /account/container
容器存儲位置是賬戶內的用戶定義的存儲區域,其中包含容器本身和容器中的對象列表的元數據。 - /account/container/object
對象存儲位置存儲了數據對象及其元數據的位置。
- /account
Swift組件
- Proxy Server
對外提供對象服務API,由於採用無狀態的REST請求協議,可以進行橫向擴展來均衡負載。 - Account Server
提供賬戶元數據和統計信息,並維護所含容器列表的服務,每個賬戶的信息被存儲在一個SQLite數據庫中。 - Container Server
提供容器元數據和統計信息,並維護所含對象列表的服務,每個容器的信息也存儲在一個SQLite數據庫中。 - Object Server
提供對象元數據和內容服務,每個對象的內容會以文件的形式存儲在文件系統中,元數據會作爲文件屬性來存儲,建議採用支持擴展屬性的XFS文件系統。 - Replicator
檢測本地分區副本和遠程副本是否一致,發現不一致時會採用推式(push)更新遠程副本,並且確保被標記刪除的對象從文件系統中移除。 - Updater
當對象由於高負載的原因而無法立即更新時,任務將會被序列化到本地在本地系統中進行排隊,以便服務恢復後進行異步更新。 - Auditor
檢查對象,容器和賬戶的完整性,如果發現比特級的錯誤,文件將被隔離,並複製其他的副本以覆蓋本地損壞的副本;其他類型的錯誤會被記錄到日誌中。 - Account Reapor
移除被標記爲刪除的賬戶,刪除其所包含的所有容器和對象。
Swift API
- Swift通過Proxy Server向外提供基於HTTP的REST服務接口,對賬戶、容器和對象進行CRUD等操作。
- Swift RESTful API總結
Swift數據模型
- Swift共設三層邏輯結構:Account/Container/Object(即賬戶/容器/對象)
- 每層節點數均沒有限制,可以任意擴展。
- 使用命令Swift stat可以顯示Swift中的賬戶、容器和對象信息。
- Swift爲賬戶,容器和對象分別定義了Ring(環)將虛擬節點(分區)映射到一組物理存儲設備上,包括Account Ring、Container Ring、Object Ring。
OpenStack網絡管理
Neutron作爲OpenStack的核心項目,爲OpenStack提供“網絡即服務”,實現靈活和自動化管理OpenStack網絡。
Linux網絡虛擬化基礎
物理網絡與虛擬化網絡
Neutron最爲核心的工作是對二層物理網絡的抽象與管理,物理服務器虛擬化後,虛擬機的網絡功能由虛擬網卡(vNIC)提供,物理交換機(Switch)也被虛擬化爲虛擬交換機(vSwitch),各個vNIC連接在vSwitch的端口上,最後這些vSwitch通過物理服務器的物理網卡訪問外部的物理服務。
Linux網絡虛擬化實現技術
- 網卡虛擬化
- TAP
- TUN
- VETH
- 交換機虛擬化
- Linux Bridge
- Open vSwitch
- 網絡隔離
- Network Namespace
Linux網卡虛擬化-TAP/TUN/VETH
- TAP設備:模擬一個二層的網絡設備,可以接收和發送二層網包
- TUN設備:模擬一個三層的網絡設備,可以接收和發送三層網包。
- VETH:虛擬Ethernet接口,通常以pair的方式出現,一端發出的網包,會被另外一端接收,可以形成兩個網橋之間的通道。
Linux交換機虛擬化
Linux bridge
- Linux bridge:工作於二層的網絡設備,功能類似於物理交換機。
- Bridge可以綁定Linux上的其他網絡設備,並將這些設備虛擬化爲端口。
- 當一個設備被綁定到bridge時,就相當於物理交換機端口插入了一條連接着終端的網線。
- 使用brctl命令配置Linux bridge:
- brctl addbr BRIDGE
- brctl addif BRIDGE DEVICE
Open vSwitch
- Open vSwitch是產品級的虛擬交換機。
- Linux Bridge更適用於小規模,主機內部間通信場景。
- Open vSwitch更適合於大規模,多主機間通信場景。
- Open vSwitch常用的命令:
- ovs-vsctl add-br BRIDGE
- ovs-vsctl add-port PORT
- ovs-vsctl show BRIDGE
- ovs-vsctl dump-ports-desc BRIDGE
- ovs-vsctl dump-flows BRIDGE
Linux網絡隔離-Network Namespace
- Network namespace能創建多個隔離的網絡空間,它們有獨自的網絡配置信息,例如網絡設備,路由表,iptables等。
- 不同網絡空間中的虛擬機運行的時候彷彿自己就在獨立的網絡中。
$ ip netns help
Usage: ip netnslist
ip netns add NAME
ip netns delete NAME
ip netns identify PID
ip netns pids NAME
ip netns exec NAME cmd ...
ip netns monitor
- Network Namespace通常與VRF(Virtual Routing Forwarding虛擬路由和轉發)一起工作,VRF是一種IP技術,允許路由表的多個實例同時在同一路由器上共存。
- 使用VETH可以連接兩個不同網絡命名空間,使用bridge可以連接多個不同的網絡命名空間。
OpenStack網絡服務Neutron簡介
網絡服務Neutron
- Neutron
網絡服務
首次出現在OpenStack的“Folsom”版本中 - 簡介
Neutron負責管理虛擬網絡組件,專注於爲OpenStack提供網絡即服務(NaaS)。 - 依賴的OpenStack服務
Keystone
Neutron在OpenStack中的位置和作用
Neutron負責管理虛擬網絡組件,專注於爲OpenStack提供網絡即服務(NaaS)。
Neutron概念
- Neutron是一種虛擬網絡服務,爲OpenStack計算提供網絡連通和尋址服務。
- 爲了便於操作管理,Neutron對網絡進行了抽象,有如下基本管理對象:
- Network
- Subnet
- Port
- Router
- Floating IP
Network
網路
- 一個隔離的、虛擬二層廣播域,也可看成一個Virtual Switch,或者Logical Switch
- Neutron支持多種類型的Network,包括Local,Flat,VLAN,VXLAN和GRE。
- Local
與其他網絡和節點隔離。Local網絡中的虛擬機只能與位於同一節點上同一網絡的虛擬機通信,Local網絡主要用於單機測試。 - Flat
無VLAN tagging的網絡。Flat網絡中虛擬機只能與位於網絡的虛擬機通信,並可以跨多個節點。 - VLAN
802.1q tagging網絡。VLAN是一個二層的廣播域,同一VLAN中的虛擬機可以通信,不同VLAN只能通過Router通信。VLAN網絡可跨節點,是應用最廣泛的網絡類型。 - VXLAN
基於隧道技術的overlay網絡。VXLAN網絡通過唯一的segmentation ID(也叫VNI)與其他VXLAN網絡區分。VXLAN中數據包會通過VNI封裝成UDP包進行傳輸。因爲二層的包通過封裝在三層傳輸,能夠克服VLAN和物理網絡基礎設施的限制。 - GRE
與VXLAN類似的一種overlay網絡,主要區別在於使用IP包而非UDP進行封裝。
生產環境中,一般使用的是VLAN、VXLAN或GRE網絡。
- Local
Subnet
子網
- 一個IPv4或者IPv6地址段。虛擬機的IP從Subnet中分配。每個Subnet需要定義IP的範圍和掩碼。
- Subnet必須與Network關聯。
- Subnet可選屬性:DNS,網關IP,靜態路由。
Port
端口
- 邏輯網絡交換機上的虛擬交換端口
- 虛擬機通過Port附着到Network上
- Port可以分配IP地址和Mac地址
Router
路由器
- 連接租戶內同一Network或不同Network之間的子網,以及連接內外網。
Fixed IP
固定IP
- 分配到每個端口上的IP,類似於物理環境中配置到網卡上的IP。
Floating IP
浮動IP
- Floating IP是從External Network創建的一種特殊Port,可以將Floating IP綁定到任意Network中的port上,底層會做NAT轉發,將發送給Floating IP的流量轉發到該Port對應的Fixed IP上。
- 外界可以通過Floating IP訪問虛擬機,虛擬機也可以通過Floating IP訪問外界。
Physical Network
物理網絡
- 在物理網絡環境中連接OpenStack不同節點的網絡,每個物理網絡可以支持Neutron中的一個或多個虛擬網路。
Provider Network
- 由OpenStack管理員創建的,直接對應於數據中心現有物理網絡的一個網段。
- Provider Network通常使用VLAN或者Flat模式,可以在多個租戶之間共享。
Self-Service Network
自助服務網絡,也叫租戶網絡或項目網絡
- 由OpenStack租戶創建的,完全虛擬的,只在本網絡內部連通,不能在租戶間共享。
- Self-Service Network通常使用VXLAN或者GRE模式,可以通過Virtual Router的SNAT與Provider Network通信。
- 不同Self-Service Network的網段可以相同,類似於物理環境中不同公司的內部網絡。
- Self-Service Network如果需要和外部物理網絡通信,需要通過Router,類似於物理環境中公司上網需要通過路由器或防火牆。
External Network
外部網絡,也叫公共網絡
- 一種特殊的Provider Network,連接的物理網絡與數據中心或Internet相通,網絡中的Port可以訪問外網。
- 一般將租戶的Virtual Router連接到該網絡,並創建Floating IP綁定虛擬機,實現虛擬機與外網通信。
Security Group
安全組:
- 安全組是作用在neutron port上的一組策略,規定了虛擬機入口和出口流量的規則。
- 安全組基於Linux iptables實現。
- 安全組默認拒絕所有流量,只有添加了放行規則的流量才允許通過。
- 每個OpenStack項目都有一個default默認安全組,默認包含如下規則:
拒絕所有入口流量,允許所有出口流量。
Neutron架構與組件分析
Neutron架構圖
Neutron架構說明
Neutron的架構是基於插件的,不同的插件提供不同的網絡服務,主要包含如下組件:
- Neutron Server
對外提供網絡API,並調用Plugin處理請求。 - Plugin
處理Neutron server的請求,維護網絡狀態,並調用Agent處理請求。 - Agent
處理Plugin的請求,調用底層虛擬或物理網絡設備實現各種網絡功能。
Neutron組件
Neutron Server
Neutron Server = APIs + Plugins(通過這種方式,可以自由對接不同網絡後端能力)
- API定義各類網絡服務
- Plugin實現各類網絡服務
Core Plugin
Core Plugin,主要是指ML2 Plugin,是一個開放性框架,在一個plugin下,可以集成各個廠家、各種後端技術支持的Layer2網絡服務。
通過Type Driver和Mechanism Driver調用不同的底層網絡技術,實現二層互通。
ML2=Modular Layer 2
Core plugin提供基礎的網絡功能,使用不同的drivers調用不同的底層網路實現技術。
ML2 plugin的Drivers主要分爲以下兩種:
- Type Driver:定義了網絡類型,每種網絡類型對應個Type Driver。
- Mechanism Driver:對接各種二層網絡技術和物理交換設備,如OVS,Linux Bridge等。Mechanism Driver從Type Driver獲取相關的底層網絡信息,確保對應的底層技術能夠根據這些信息正確配置二層網絡。
Service Plugin
Service Plugin用於實現高階網絡服務,例如路由、負載均衡、防火牆和VPN服務等。
L3 Service Plugin主要提供路由,浮動IP服務等。
Agent
Neutron Agent向虛擬機提供二層和三層的網絡連接、完成虛擬網絡和物理網絡之間的轉換、提供擴展服務等。
OpenStack動手實驗:Neutron操作
Neutron操作-常用命令
- neutron net-create
- neutron net-list
- neutron subnet-list
- neutron port-create
- neutron router-interface-add
- neutron agent-list
動手實驗:Neutron操作
- 命令help
- 管理網絡、子網、端口
- 管理路由器
- 管理浮動IP
- 管理安全組及規則
- 虛擬機實例訪問測試
Neutron網絡流量分析
Neutron網絡典型場景介紹
Neutron支持多種多樣的網絡技術和類型,可以自由組合各種網絡模型。
如下兩種網絡模型是OpenStack生產環境中常用的:
- Linux Bridge + Flat/VLAN網絡
僅提供簡單的網絡互通,虛擬網絡、路由、負載均衡等由物理設備提供。
網絡簡單、搞笑,適合中小企業私有云網絡場景。 - Open VSwitch + VXLAN網絡
提供多租戶、大規模網絡隔離能力,適合大規模私有云和公有云網絡場景。
Linux Bridge + Flat網絡
最簡單的網絡模型,直接使用現有物理網絡配置。
Flat網絡類似於使用網線直接連接物理網絡,OpenStack不負責網絡隔離。
Linux Bridge + VLAN網絡
支持現有物理網絡VLAN隔離
使用Linux Bridge + VLAN網絡時:
- ML2的Type Driver爲VLAN
- ML2的Mechanism Driver爲LinuxBridge
- L2 Agent爲LinuxBridge
Linux Bridge + VLAN場景說明
- 使用Linux Bridge + VLAN實現Provider Network,網絡流量可以分爲如下幾種:
- 南北向流量:虛擬機和外部網絡(例如Internet)通信的流量
- 東西向流量:虛擬機之間的流量
- Provider Network和外部網絡之間的流量:由物理網絡設備負責交換和路由
- 後續的網絡流量分析基於如下示例:
- Provider Network 1(VLAN)
VLAN 101(tagged),IP地址段203.0.113.0/24,玩骨幹網關203.0.113.1(物理網絡設備上) - Provider Network 2(VLAN)
VLAN 102(tagged),IP地址段192.0.2.0/24,玩骨幹網關192.0.2.1(vRouter端口上)
- Provider Network 1(VLAN)
使用Fixed IP的虛擬機南北流量分析
場景說明:
- 虛擬機運行在計算節點1上,使用Provider Network 1。
- 虛擬機將數據包發送到Internet上的主機。
同一個網絡中虛擬機東西流量分析
場景說明:
- 虛擬機運行在計算節點1上,使用Provider Network 1。
- 虛擬機將數據包發送到Internet上的主機。
不同網絡中虛擬機東西流量
場景說明:
- 虛擬機1運行在計算節點1上,使用Provider Network 1。
- 虛擬機2運行在計算節點1上,使用Provider Network 2。
- 虛擬機1將數據包發送到虛擬機2。
Open vSwitch + VXLAN網絡
Open vSwitch + VXLAN實現
使用Open vSwitch + VXLAN網絡時:
- ML2的Type Driver爲VXLAN
- ML2的Mechanism Driver爲Open vSwitch
- L2 Agent爲Open vSwitch
Open vSwitch + VXLAN場景說明
- Open vSwitch + VXLAN實現Self-Service Network,網絡流量可以分爲如下幾種:
- 南北向流量:虛擬機和外部網絡(例如Internet)通信的流量
- 東西向流量:虛擬機之間的流量
- Provider Network和外部網絡之間的流量:由物理網絡設備負責交換和路由。
- 後續的網絡流量分析基於如下示例:
- Provider Network 1(VLAN):VLAN 101(tagged)
- Self-Service Network 1(VXLAN):VXLAN 101(VNI)
- Self-Service Network 2(VXLAN):VXLAN 102(VNI)
- Self-Service router:網關在Provider Network 1上,連接Self-Service Network 1和Self-Service Network 2。
使用Fixed IP的虛擬機南北流量
場景說明:
- 虛擬機運行在計算節點1上,使用Self-Service Network 1
- 虛擬機將數據包發送到Internet上的主機
從外部訪問帶Floating IP的虛擬機
場景說明:
- 虛擬機運行在計算節點1上,使用Self-Service Network 1
- Internet上的主機將數據包發送到虛擬機
同一個網絡中虛擬機東西流量
場景說明:
- 虛擬機1運行在計算節點1上,使用Self-Service Network 1
- 虛擬機2運行在計算節點2上,使用Self-Service Network 1
- 虛擬機1將數據包發送到虛擬機2