磨刀不誤砍柴工,OpenStack核心服務詳解(下)

前言

OpenStack計算管理

Nova作爲OpenStack的核心項目,提供大規模可擴展、按需彈性和自助服務的計算資源是整個OpenStack中最核心的項目。

OpenStack計算服務Nova簡介

OpenStack計算服務是什麼

  • Nova
    計算服務
    首次出現在OpenStack的“Austin”版本中。
  • 簡介
    Nova提供大規模、可擴展、按需自助服務的計算資源。
    Nova支持管理裸機,虛擬機和容器。
  • 依賴的OpenStack服務
    OpenStack最初幾個版本中,計算、存儲、網絡都由Nova實現,後面逐步拆分出存儲和網絡。
    目前Nova專注提供計算服務,依賴Keystone的認證服務,Neutron的網絡服務Glance的鏡像服務。

Nova在OpenStack中的位置和作用
Nova在OpenStack中的位置和作用

  • Nova是什麼?
    OpenStack中提供計算資源服務的項目
  • Nova負責什麼?
    • 虛擬機生命週期管理
    • 其他計算資源生命週期管理
  • Nova不負責什麼?
    • 承載虛擬機的物理主機自身的管理
    • 全面的系統狀態監控
  • Nova是OpenStack事實上最核心的項目
    • 歷史最長:OpenStack首批兩個項目之一
    • 功能最複雜,代碼量最大
    • 大部分集成項目和Nova之間都存在合作關係
    • 貢獻者在社區中的影響力最大

Nova架構

Nova架構圖

Nova內部服務使用REST調用,Nova和其他OpenStack服務交互時,使用消息隊列。
Nova架構圖

Nova運行架構

Nova服務各組件可分佈式部署,且可通過virtDriver對接不同的虛擬化平臺。
Nova運行架構

Nova資源池管理架構

Region>Availability Zone>Host Aggregate
Nova資源池管理架構

Nova組件詳細講解

Nova組件

API

Nova API功能

  • 對外提供REST接口,接收和處理請求。
  • 對傳入參數進行合法性校驗和約束限制。
  • 對請求的資源進行配額的校驗和預留。
  • 資源的創建、更新、刪除查詢等。
  • 虛擬機生命週期管理的入口。

WSGI:Web Server Gateway Interface
API

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的執行返回前不會阻塞其他綠色線程的執行。這樣就提高了操作的併發。
    Conductor

Scheduler

Nova-Scheduler功能

  • 篩選和確定將虛擬機實例分配到哪一臺物理機
  • 分配過程主要分爲兩步,過濾和權重:
    • 通過過濾器選擇滿足條件的計算節點
    • 通過權重選擇最優的節點
      Scheduler

Compute

  • Nova-Compute框架
    • Manager
    • Driver
  • 對接不同的虛擬化平臺
    • KVM
    • VMware
    • Xen
    • LXC
    • QEMU
  • 虛擬機各生命週期操作的真正執行者(會調用對應的hypervisor的driver)
  • 底層對接不同虛擬化的平臺(KVM/VMware/Xen/Ironic等)
  • 內置週期性服務,完成資源刷新,虛擬機狀態同步等功能。
  • 資源管理模塊(resource_tracker)配合插件機制,完成資源的統計。
    Compute

Nova服務示例

列出Nova服務

$ openstack compute service list

列出Nova服務

Nova典型操作

Nova典型操作

Nova主要操作對象

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調度過程

Nova調度過程

Nova規律調度器

Nova規律調度器

Live Migration原理

  • 遷移成功後會清除源節點的信息。
  • 遷移失敗後會回滾,清除目標節點的信息。
    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持久化存儲簡介

OpenStack存儲類型對比

OpenStack存儲類型對比

塊存儲Cinder

Cinder簡介

OpenStack塊存儲服務是什麼?

  • Cinder
    塊存儲服務
    首次出現在OpenStack的“Folsom”版本中
  • 簡介
    Cinder提供塊存儲服務,爲虛擬機實例提供持久化存儲。
    Cinder調用不同存儲接口驅動,將存儲設備轉化成塊存儲池,用戶無需瞭解實際部署的位置或者設備類型。
  • 依賴的OpenStack服務
    Keystone
    Keystone在OpenStack中的位置和作用
    Cinder的核心功能是對卷的管理,允許對卷、卷的類型、卷的快照、卷備份進行處理。它爲後端不同的存儲設備提供了統一的接口,不同的塊設備服務廠商在Cinder中實現其驅動,可以被OpenStack整合管理。
    Keystone在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架構說明

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架構部署:以SAN存儲爲例

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通過過濾和稱權,篩選出合適的後端:
    Scheduler
    根據後端的能力進行篩選:
  • Drivers定期報告後端的能力和狀態
  • 管理員創建的卷類型(Volume type)
  • 創建卷時,用戶指定卷類型

Volume

Cinder Vlomue多節點部署,使用不同的配置文件、接入不同的後端設備,由各存儲廠商插入Driver代碼與設備交互,完成設備容量和能力信息收集、卷操作等。
Cinder默認的後端驅動是LVM。
Volume

Cinder典型工作流程

Cinder創建卷流程

創建卷類型的目的是爲了篩選不同的後端存儲,例如SSD、SATA、高性能、低性能等,通過創建不同的自定義卷類型,創建卷時自動篩選出合適的後端存儲。
Cinder創建卷流程

Cinder API
  • 檢查參數合法性(用戶輸入,權限,資源是否存在等)。
  • 準備創建的參數字典,預留和提交配額。
  • 在數據庫中創建對應的數據記錄。
  • 通過消息隊列將請求和參數發送到Scheduler。
    Cinder API
Cinder Scheduler
  • 提取接收到的請求參數
  • 通過配置的filter和輸入參數對後端進行過濾
    • Availability_zone_filter
    • Capacity_filter
    • Capabilities_filter
    • Affinity_filter(SameBackendFilter/DifferentBackendFilter)
    • ……
  • Weigher計算後端進行權重
    • CapacityWeigher/AllocatedCapacityWeigher
    • ChanceWeigher
    • GoodnessWeigher
    • ……
  • 選取最優的Backend並通過消息隊列將請求發送到指定的後端
    Cinder Scheduler
Cinder Volume
  • 提取接收到的請求參數
  • 調用對應的Driver在後端創建實際的卷
  • 使用Driver返回的模型更新數據庫中的記錄
    Cinder Volume

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來實現虛擬機掛載磁盤。
    Cinder掛載卷流程

OpenStack動手實驗:Cinder操作

Cinder主要操作

Cinder主要操作的三個主要資源:

  • Volume
    塊設備卷,提供創建,刪除,擴容,掛載/卸載等功能。
  • Snapshot
    針對於塊設備卷的快照創建,刪除,回滾等功能。
  • Backup
    提供對塊存儲卷的備份,恢復能力。
    Cinder主要操作

動手實驗:Cinder操作

  • 命令help
  • 卷類型管理
  • 卷QoS管理
  • 卷管理

對線存儲Swift

Swift簡介

  • SWIFT
    對線存儲服務
    首次出現在OpenStack的“Austin”版本中
  • 簡介
    Swift提供高度可用、分佈式、最終一致的對線存儲服務。
    Swift可以高效、安全且廉價地存儲大量數據。
    Swift非常適合存儲需要彈性擴展的非結構化數據。
  • 依賴的OpenStack服務
    爲其他OpenStack服務提供對象存儲服務。

Swift在OpenStack中的位置

Swift提供高度可用、分佈式、最終一致的對線存儲服務。
Swift在OpenStack中的位置

Swift在OpenStack中的作用

Swift在OpenStack中的作用

  • Swift並不是文件系統或實時的數據存儲系統,它稱爲對線存儲,用於永久類型的靜態數據的長期存儲,用於永久類型的靜態數據的長期存儲,這些數據可以檢索、調整,必要時進行更新。
  • 最適合存儲的數據類型的例子是虛擬機鏡像、圖片存儲、郵件存儲和存檔備份。
  • 因爲沒有中心單元或主控結點,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
      對象存儲位置存儲了數據對象及其元數據的位置。
      對象存儲服務的架構

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 RESTful API總結

Swift數據模型

  • Swift共設三層邏輯結構:Account/Container/Object(即賬戶/容器/對象)
  • 每層節點數均沒有限制,可以任意擴展。
  • 使用命令Swift stat可以顯示Swift中的賬戶、容器和對象信息。
  • Swift爲賬戶,容器和對象分別定義了Ring(環)將虛擬節點(分區)映射到一組物理存儲設備上,包括Account Ring、Container Ring、Object Ring。
    Swift數據庫模型

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的方式出現,一端發出的網包,會被另外一端接收,可以形成兩個網橋之間的通道。
    TAP/TUN/VETH

Linux交換機虛擬化

Linux bridge

  • Linux bridge:工作於二層的網絡設備,功能類似於物理交換機。
  • Bridge可以綁定Linux上的其他網絡設備,並將這些設備虛擬化爲端口。
  • 當一個設備被綁定到bridge時,就相當於物理交換機端口插入了一條連接着終端的網線。
  • 使用brctl命令配置Linux bridge:
    • brctl addbr BRIDGE
    • brctl addif BRIDGE DEVICE
      Linux bridge

Open vSwitch

  • Open vSwitch是產品級的虛擬交換機。
    • Linux Bridge更適用於小規模,主機內部間通信場景。
    • Open vSwitch更適合於大規模,多主機間通信場景。
      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可以連接多個不同的網絡命名空間。

Network Namespace

OpenStack網絡服務Neutron簡介

網絡服務Neutron

  • Neutron
    網絡服務
    首次出現在OpenStack的“Folsom”版本中
  • 簡介
    Neutron負責管理虛擬網絡組件,專注於爲OpenStack提供網絡即服務(NaaS)。
  • 依賴的OpenStack服務
    Keystone

Neutron在OpenStack中的位置和作用

Neutron負責管理虛擬網絡組件,專注於爲OpenStack提供網絡即服務(NaaS)。
Neutron在OpenStack中的位置和作用

Neutron概念

  • Neutron是一種虛擬網絡服務,爲OpenStack計算提供網絡連通和尋址服務。
  • 爲了便於操作管理,Neutron對網絡進行了抽象,有如下基本管理對象:
    • Network
    • Subnet
    • Port
    • Router
    • Floating IP
      Neutron概念

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網絡。
      Network

Subnet

子網

  • 一個IPv4或者IPv6地址段。虛擬機的IP從Subnet中分配。每個Subnet需要定義IP的範圍和掩碼。
  • Subnet必須與Network關聯。
  • Subnet可選屬性:DNS,網關IP,靜態路由。

Port

端口

  • 邏輯網絡交換機上的虛擬交換端口
  • 虛擬機通過Port附着到Network上
  • Port可以分配IP地址和Mac地址

Router

路由器

  • 連接租戶內同一Network或不同Network之間的子網,以及連接內外網。
    Router

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訪問外界。
    浮動IP

Physical Network

物理網絡

  • 在物理網絡環境中連接OpenStack不同節點的網絡,每個物理網絡可以支持Neutron中的一個或多個虛擬網路。
    Physical Network

Provider Network

  • 由OpenStack管理員創建的,直接對應於數據中心現有物理網絡的一個網段。
  • Provider Network通常使用VLAN或者Flat模式,可以在多個租戶之間共享。
    Provider Network

Self-Service Network

自助服務網絡,也叫租戶網絡或項目網絡

  • 由OpenStack租戶創建的,完全虛擬的,只在本網絡內部連通,不能在租戶間共享。
  • Self-Service Network通常使用VXLAN或者GRE模式,可以通過Virtual Router的SNAT與Provider Network通信。
  • 不同Self-Service Network的網段可以相同,類似於物理環境中不同公司的內部網絡。
  • Self-Service Network如果需要和外部物理網絡通信,需要通過Router,類似於物理環境中公司上網需要通過路由器或防火牆。
    Self-Service Network

External Network

外部網絡,也叫公共網絡

  • 一種特殊的Provider Network,連接的物理網絡與數據中心或Internet相通,網絡中的Port可以訪問外網。
  • 一般將租戶的Virtual Router連接到該網絡,並創建Floating IP綁定虛擬機,實現虛擬機與外網通信。
    External Network

Security Group

安全組:

  • 安全組是作用在neutron port上的一組策略,規定了虛擬機入口和出口流量的規則。
  • 安全組基於Linux iptables實現。
  • 安全組默認拒絕所有流量,只有添加了放行規則的流量才允許通過。
  • 每個OpenStack項目都有一個default默認安全組,默認包含如下規則:
    拒絕所有入口流量,允許所有出口流量。
    Security Group

Neutron架構與組件分析

Neutron架構圖

Neutron架構圖

Neutron架構說明

Neutron的架構是基於插件的,不同的插件提供不同的網絡服務,主要包含如下組件:

  • Neutron Server
    對外提供網絡API,並調用Plugin處理請求。
  • Plugin
    處理Neutron server的請求,維護網絡狀態,並調用Agent處理請求。
  • Agent
    處理Plugin的請求,調用底層虛擬或物理網絡設備實現各種網絡功能。

Neutron組件

Neutron Server

Neutron Server = APIs + Plugins(通過這種方式,可以自由對接不同網絡後端能力)

  • API定義各類網絡服務
  • Plugin實現各類網絡服務
    Neutron Server

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獲取相關的底層網絡信息,確保對應的底層技術能夠根據這些信息正確配置二層網絡。
    Core Plugin

Service Plugin

Service Plugin用於實現高階網絡服務,例如路由、負載均衡、防火牆和VPN服務等。
L3 Service Plugin主要提供路由,浮動IP服務等。
Service Plugin

Agent

Neutron Agent向虛擬機提供二層和三層的網絡連接、完成虛擬網絡和物理網絡之間的轉換、提供擴展服務等。
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 + Flat/VLAN網絡

Linux Bridge + VLAN網絡

支持現有物理網絡VLAN隔離
Linux Bridge + VLAN網絡
使用Linux Bridge + VLAN網絡時:

  • ML2的Type Driver爲VLAN
  • ML2的Mechanism Driver爲LinuxBridge
  • L2 Agent爲LinuxBridge
    Linux Bridge + VLAN網絡
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端口上)
使用Fixed IP的虛擬機南北流量分析

場景說明:

  • 虛擬機運行在計算節點1上,使用Provider Network 1。
  • 虛擬機將數據包發送到Internet上的主機。
    使用Fixed IP的虛擬機南北流量分析
同一個網絡中虛擬機東西流量分析

場景說明:

  • 虛擬機運行在計算節點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實現

使用Open vSwitch + VXLAN網絡時:

  • ML2的Type Driver爲VXLAN
  • ML2的Mechanism Driver爲Open vSwitch
  • L2 Agent爲Open vSwitch
    Open vSwitch + VXLAN實現
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上的主機
    使用Fixed IP的虛擬機南北流量
從外部訪問帶Floating IP的虛擬機

場景說明:

  • 虛擬機運行在計算節點1上,使用Self-Service Network 1
  • Internet上的主機將數據包發送到虛擬機
    從外部訪問帶Floating IP的虛擬機
同一個網絡中虛擬機東西流量

場景說明:

  • 虛擬機1運行在計算節點1上,使用Self-Service Network 1
  • 虛擬機2運行在計算節點2上,使用Self-Service Network 1
  • 虛擬機1將數據包發送到虛擬機2
    同一個網絡中虛擬機東西流量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章