Openstack 網路部分概念整理
Openstack 概念
我剛聽說要去做 openstack 開發的時候,蠻激動的啊。雖然我不知道 openstack 是什麼東西,但是我知道這個東西和雲端計算有關。雲端計算這東西,聽著就高大上,各大網際網路公司都有投人進去搞,所以大方向上是必須肯定的。於是我按捺不住了,想在自己的主機上部署 openstack,來體驗下這個是什麼東西。經過一頓折騰之後,終於在虛擬機器裡面用 devstack 把 openstack 給部署出來了(部署過程中,最坑的就是國內的防火牆)。
部署的過程,其實就是把一堆 python 包安裝到主機系統的過程。openstack 有一個 python 包叫做 Dashboard,這個東西提供了一個 Web 介面,從那裡我真正體驗到了 openstack 是個啥。在 Dashboard 上建立一臺虛擬機器的過程蠻有趣的,這個過程涉及到的步驟,很多都和現實中安裝電腦很像。
Openstack | Real Life |
---|---|
建立 ubuntu 映象 | 使用 Ultraiso 燒錄好一個 ubuntu 系統 的 U 盤 |
建立 provider 網路 | 叫電信的來給家裡開通網路 |
建立 Instance 主機 | 買了一臺主機,並用剛剛的 U 盤給它裝好 Ubuntu 系統 |
啟動 Instance 主機 | 把電信的網口插到主機網絡卡上 |
我在 Dashboard 建立了兩臺 Instance 主機,兩臺主機跑的好好的。就目前來說,這個效果和 VMware Workstation 軟體就很像了,可以在一臺物理機上,跑多虛擬主機。只不過 VMware Workstation 軟體面向的是單臺物理機,而 openstack 卻可以 面對物理機叢集
有了感性的認識後,再去 openstack 官網是什麼定義自己的:
Open source software for creating private and public clouds.
OpenStack software controls large pools of compute, storage, and networking resources throughout a datacenter, managed through a dashboard or via the OpenStack API. OpenStack works with popular enterprise and open source technologies making it ideal for heterogeneous infrastructure.
Hundreds of the world’s largest brands rely on OpenStack to run their businesses every day, reducing costs and helping them move faster. OpenStack has a strong ecosystem, and users seeking commercial support can choose from different OpenStack-powered products and services in the Marketplace.
The software is built by a thriving community of developers, in collaboration with users, and is designed in the open at our Summits.
OpenStack 軟體控制整個資料中心的大型計算,儲存和網路資源,使用者可以通過 Dashboard 或 OpenStack API 進行管理。就我理解,Openstack 更像是一個作業系統,一個強大的雲端計算作業系統。
Openstack 網路概念
我前面通過 Dashboard 建立的兩個 Instance 虛擬機器,它們之間是可以互相 ping 通的,因為它們兩是處於同一個二層網路的,都是直接連結到 Provider 網路。
| VM1 | | VM2 |
|-------| |-------|
| |
| Eth(172.24.4.2) | Eth(172.24.4.3)
____|______________________|___________
- - - - - - - - - - - - - - - - - - - - Provider (172.24.4.0/24)
上面的拓撲其實已經涵蓋了 openstack 中比較核心的三個網路概念:Network,Subnet, Port 。我們把這三個概念和上面的網路拓撲對映一下:
- “Provider” 這個名字,對應的就是 openstack 的 Network
- “172.24.4.0/24” 這個 IP 地址池,對應的就是 openstack 的 Subnet
- “Eth(172.24.4.2)” 這個 Instance 網絡卡,對應的就是 openstack 的 Port
其實我們還可以讓 VM1 和 VM2 不在一個二層網路上,只不過這個時候,就需要引入 openstack 網路的另一核心概念 Router。
| VM2 |
|-------|
|
| Eth(10.0.0.2)
_______|_______
- - - - - - - - Private (10.0.0.0/24)
|
| If(10.0.0.1)
|
| VM1 | | Router1 |
|-------| |----------|
| |
| Eth(172.24.4.2) | Gw(172.24.4.3)
____|_______________________|__________
- - - - - - - - - - - - - - - - - - - - Provider (172.24.4.0/24)
這樣一來 VM1 和 VM2 就不在同一個二層網路了,兩個 Instance 虛擬機器的網路環境也就實現了隔離。從拓撲上可以看出,這裡多出了三樣新部件:
- Router: 也就是拓撲中的 Router1
- Router-Gateway: 也就是拓撲中的 Gw(172.24.4.3),主要是為了 Router1 後面的虛擬機器訪問 Provider 網路。
- Router-Interface: 也就是拓撲中的 If(10.0.0.1),讓 Router1 作為 Private 網路的 L3 閘道器。
上面兩個網路拓撲,就覆蓋 openstack 網路的核心概念了,當然僅僅有以上四個核心概念,是沒辦法適應實際 Data Center 複雜的網路拓撲需求的,為此有了其他虛擬網路概念如:FloatingIP, SecurityGroup, ServiceFunctionChain 等。
Openstack 網路元件介紹
Openstack 包含了非常多的子專案,目前幾個核心的子專案如下:
- Nova: 提供 compute 計算能力(虛擬機器)
- Neutron: 提供 networking 網路連線能力
- Glance: 提供 image 映象儲存能力
- Keystone: 提供 identity 身份認證能力
- Cinder / Swift: 提供 storage 儲存能力
網路虛擬化是塊發展比較快的領域,到目前 Neutron 已經很好的支援 L2, L3, HA, SecurityGroup, LBaas, FWaas, VPNaas, DVR 等等。只不過我看過一些文章,裡面說到 Neutron 的發展方向應該是,專注於 API 標準的定製。讓各個網路功能從 Neutron 中剝離出去,讓各個網路裝置商的 SDN Controller Plugin 去聚焦和實現這部分功能。Neutron 需要設計出一組良好的北向介面規範,讓自己成為一個純粹的 API Server(這些觀點的正確性,我也不確定,只不過換個高度看事情,未嘗不是件好事)。
Neutron 裡面有兩個框架比較有趣, ML2 框架和 Extension Plugin框架 。ML2 是對 L2 網路功能的一次抽象,這讓不同的 L2 虛擬化技術(LinuxBridge, OpenvSwitch…)只需統一對接到 ML2 即可。而 Extension Plugin 為一些在開發中的 SDN Controler or Network Function Virtual,能夠方便的對接到 Neutron 中,進行部署測試,待其孵化成熟之後,再合併到 Neutron 專案中。我在主機上部署的 Openstack (Neutron + OVN),其實就是充分利用了 Neutron ML2 和 ExtensionPlugin 才得以實現,從這點上也看出了 Neutron 的靈活性非常強大。
上面簡單介紹了 Neutron,現在說說 OVN (Open Virtual Network for OpenvSwitch),它是 OpenvSwitch 團隊自己孵化 OVS 的子專案,目的是為了讓 OVS 更加友好的支援虛擬網路,容我引用 IBM 的一篇博文的精彩觀點:
眾所周知,OpenvSwitch 以其豐富的功能和不錯的效能,已經成為 Openstack 部署中最受歡迎的虛擬交換機。由於 Openstack Neutron 的架構引入了一些效能問題,比如 neutron-server 要與非常多的 agent 通訊,RPC 就是一個性能瓶頸,還有 neutron 裡面用到非常多的 namespace,namespace 資源有限而且系統開銷比較大,這也是一個性能瓶頸。OVS 社群覺得從長遠來看,Neutron 應該讓一個其它的專案來做虛擬網路的控制平面,Neutron 只需要提供 API 的處理,於是 OVS 社群推出了 OVN(Open Virtual Network)這個專案,OVN 是 OVS 的控制平面,它給 OVS 增加了對虛擬網路的原生支援,大大提高了 OVS 在實際應用環境中的效能和規模。
如果想用 OVN 和 Neutron 進行整合使用,還需要 Networking-ovn Plugin 的幫助。Networking-ovn 是個比較簡單的 Plugin,它的工作是將 Neutron 中對虛擬網路的定義,翻譯到 OVN 對虛擬網路的定義中去。它的簡單,來源於優美的 Neutron API 介面設計,和精簡的 OVN 北向資料庫表設計。
| OPENSTACK |
| |
| (neutron) | API Server
-----------------------
| |
v v
---> networing-ovn <--- Service and Plugin
| |
v v
|----------|
| OVN | SDN Controller for OpenvSwitch
|----------|
|
v
----------------------
| OpenvSwitch | DataPlan support for Virtual Networking Function
| |