Openstack 網絡部分概念整理

轉載請註明出處: http://kyang.cc/


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 管理着,而終端使用用戶只需要面對唯一的一個 Dashboard 界面,這個時候私有云的概念就體現出來了。

有了感性的認識後,再去 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 中比較核心的三個網絡概念:NetworkSubnet, 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 的一篇博文的精彩觀點:

Pick up from 如何藉助 OVN 來提高 OVS 在雲計算環境中的性能

衆所周知,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
|                    |
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章