前言:
做openstack的實驗,對於電腦的硬件要求
CPU最少是四核8線程,I7的4代以上
固態盤:250G (用以部署三個節點)
存儲:CEPH——三個節點
對於節點規劃
資源規劃:
node1 CPU:雙核雙線程 內存:6G 硬盤:300G+1024G
node2 CPU:雙核雙線程 內存:6G 硬盤:300G+1024G
node3 CPU:雙核雙線程 內存:6G 硬盤:300G+1024G
文章目錄
- 二:openstack模塊講解
- 2.1 openstack架構
- 2.2 身份認證服務 Keystone (identity)
- 2.3 控制檯 Dashboard(控制面板服務 horizon)
- 2.4 鏡像模塊Glance (image 鏡像服務)
- 2.4.1 glance中的主要組件
- 2.4.1.1 glance-api(端口號9292)
- 2.4.1.2 glance-registry(監聽端口號9191)
- 2.4.1.3 database
- 2.4.1.4 storage repository for image files(鏡像的存儲方式,除了file之外,還有RBD,ceph用的分佈式)
- 2.4.2 鏡像的格式
- 2.5 計算模塊nova
- 2.6 塊存儲 cinder
- 2.7 網絡模塊 neutron
一:openstack節點類型
分爲4種:
- 控制節點
- 網絡節點
- 計算節點
- 存儲節點
1.1控制節點
1.1.1 概述
顧名思義就是openstack中實現數據中心控制的節點
所謂控制,簡而言之就是管理,管理openstack中的所有服務組件
所有組件,不管在哪個節點上,都需要先在控制節點上完成類似於註冊記錄的操作,然後纔有權限加入到集羣服務中
1.1.2 控制節點中,必須安裝三種類型的軟件
1.1.2.1 底層軟件
在控制節點上必須安裝的是一些底層的軟件
所謂底層是相對於openstack的服務來說
這些底層軟件需要openstack組件來提供服務
- 這些軟件有DB軟件、消息隊列軟件、Memorycache和Etcd等
1.1.2.2 核心組件
除了底層軟件之外,控制節點上必須安裝三個openstack的核心組件
- keystone,身份認證,是完整的安裝在控制節點上
- glance,鏡像服務,是完整的安裝在控制節點上
- nova,計算服務,只安裝了一部分,安裝nova是爲了管理節點上的計算服務
在控制節點上是可以安裝nova (computed)的,實驗環境是可以的,但是生產環境是不會這麼做
1.1.2.3 可選組件
除了底層服務軟件和核心組件之外,因爲openstack還支持其他可選的組件
比如:
集羣中有存儲節點,那麼在openstack上就需要安裝管理控制存儲節點和對應的服務組件等
類似於核心組件nova的模式
------------------controller node------------------------
---------------------controller0--------------------------
supporting service (支持服務,底層軟件)
database(mysql) message broker(qpid)
基礎核心組件
base service
-
identity keystone 身份驗證
-
image glance 源鏡像服務
-
compute nova manage 計算服務
-
networking neutron server 網絡服務
-
dashboard horizen 控制面板服務
optional service (可選服務)
- block storage cinder 塊存儲服務
- obiect storage swift 對象存儲服務
- database trove 數據庫服務
- orchestration heat 編排工具服務
- telemeter centimeter 計費服務
network interface 網絡接口
- management 網絡管理
------------------network node------------------------
---------------------network0--------------------------
base service (基礎服務)
networking
-
ml2 plugin
-
layer 2 agent(OVS)
-
layer 3 agent
-
DHCP agent
network interface
-
management
-
private
-
external
------------------compute node------------------------
---------------------compute0--------------------------
base service (基礎服務)
compute
-
nova hypervisor
-
QEMU
networking (網絡)
-
MI2 plugin
-
layer 2 agent(OVS)
optionnal service
- telemeter centimeter
network interface
-
management
-
private
1.2 網絡節點
網絡節點之包含neutron組件,網絡節點負責neutron安裝core plugin (MI2)和service plugin(L3 service),
具體的service plugin可以根據自己的需求選擇
1.3 存儲結點
安裝存儲組件的節點,一般有代表性的塊存儲(cinder)和對象存儲(swift)
1.4 計算節點
包含nova部分組件和neutron部分組件
nova-compute、neutron-agent
二:openstack模塊講解
2.1 openstack架構
- 體現了openstack中各個服務之間的相互關係,箭頭體現了提供服務方和接受服務方的相對關係
- 名詞解釋
openstack由多種服務組成,每種服務具有獨立的明明。在整個openstack架構中,keystone提供認證服務,接收來自用戶和服務的認證請求,並對其身份進行認證。
各個服務之間通過公用的API接口進行交互。
大部分服務均包含一個API進程,用於監聽API請求,根據服務的性質選擇處理請求或者轉發請求。
服務進程之間的通訊通過消息隊列服務實現,如AMQP
在部署完成的雲系統平臺上,用戶通過Dashboard或RestAPI方式在經Keystone模塊認證授權後,可以執行創建虛擬機服務。
通過nova模塊創建虛擬機實例,nova調用glance模塊提供的鏡像服務,然後調用neutron模塊提供網絡服務。
根據需要可以選擇給虛擬機增加存儲卷,卷功能由cinder模塊提供服務。
整個過程在ceilometer模塊的資源監控下完成。同時cidnder提供的volume和glance提供的鏡像可以通過swift對象存儲機制進行保存
數據傳輸就是依靠消息隊列
2.1.1 四個核心組件,四個服務組件
通過以上解析可以看到 OpenStack 雲平臺服務的提供主要是依靠 Nova、Glance、Cinder 和 Neutron 四個核心模塊完成的
四個輔助模塊 Horizen、Ceilometer、Keystone、Swift 提供的訪問、監控、權限和對象存儲功能
openstack-Ironic裸金屬簡介
https://www.cnblogs.com/gushiren/p/9512895.html
Ironic簡述
簡而言之,openstack Ironic就是一個進行裸機部署安裝的項目
所謂裸機,就是沒有配置操作系統的計算機。
從裸機到應用還需要進行以下操作:
1.硬盤raid、分區和格式化
2.安裝操作系統、驅動程序
3.安裝應用程序
Ironic實現的功能,就是可以很方便的對指定的一臺或多臺裸機,執行以上一系列操作。例如部署大數據羣集需要同時部署多臺物理機,就可以使用Ironic來實現
Ironic可以實現硬件基礎設施資源的快速交付
why provision bare metal
調用OpenStack裏面的服務組件的API口如果要調用,需要修改配置文件,填寫對接的接口,填寫對接暗號
2.2 身份認證服務 Keystone (identity)
keystone (openstack identity service)中主要涉及到如下幾個概念。
2.2.1 用戶(user)
在openstack中,用戶是使用openstack雲服務的人、系統或服務。
用戶可以登陸或使用指定的token訪問雲中的資源,並可以被指派到指定的項目或角色。
認證服務通過對用戶身份的確認,來判斷一個請求是否被允許。
用戶通過認證信息,如密碼、API keys等進行驗證
2.2.2 項目(project)
項目是各個服務中的一些可以訪問的資源集合,用來分組或隔離資源或身份對象。
不同服務中,項目所涉及的資源也不同。在nova服務中項目可以是雲主機,在swift和glance中項目可以是鏡像存儲,在neutron中項目可以是網絡資源。
默認情況下,用戶總是被綁定到項目中。
一個項目中可以有多個用戶,一個用戶可以數據一個或多個項目
2.2.3 角色(role)
角色是一組用戶可以訪問的資源權限的集合,這些資源包含虛擬機、鏡像、存儲資源等。
用戶既可以被添加到全局的角色,也可以被添加到指定項目內的角色中。
其區別是,全局的角色適用於所有項目中的資源權限,而項目內的角色只適用於某個項目內的資源權限
2.2.4 服務(service)
用戶使用雲中的資源是通過訪問服務的方式實現。
openstack中包含有許多服務,如提供計算服務的nova,提供景象服務的glance以及提供對象存儲服務的swift。
一個服務可以確認當前用戶是否具有訪問其資源的權限。
但是當一個用戶嘗試訪問其項目內的service時,該用戶必須知道這個服務是否存在,以及如何訪問這個服務
2.2.5 令牌(token)
是一串數字字符串,用於訪問openstack服務的api以及資源。
一個令牌可以在特定的時間內生效,並可以在任意時間釋放。
在keystone中主要是引入令牌機制來保護用戶對資源的訪問
2.2.6 端點(endpoint)
所謂端點,是指用於訪問某個服務的網絡地址或URL。
如果需要訪問一個服務,則必須知道該服務的端點。
在keystone中包含一個端點模板,這個模板提供了所有已存在的服務的端點信息。
一個端點模板包含一個URL列表,列表中的每個URL都對應一個服務實例的訪問地址,並且具有public、private和admin這三種權限。
其中,public類型的端點可以被全局訪問,private類型的端點只能被openstack內部服務訪問,admin類型的端點只能被管理員訪問。
openstack身份認證服務將管理認證、授權以及服務目錄整合爲一個訪問點,同時也是用戶需要和openstack’進行交互的第一個服務。
一旦認證通過,終端用戶使用其身份訪問openstack其他服務。
同樣的,其他服務也將利用身份認證服務確認來訪者身份是否合法,以及是否具備相應的權限。
此外,openstack身份認證服務可以集成其他的身份認證管理系統,如LDAP等
身份認證服務爲其他openstack服務提供驗證和授權服務,爲所有服務提供終端目錄。
此外,提供用戶信息但是不在openstack項目中的服務(如LDAP服務)可被整合進先前存在的基礎設施中。
爲了從身份認證服務中獲益,其他的openstack服務需要身份認證服務合作完成某個任務。
當某個openstack服務收到來自用戶的請求時,該服務發送請求道身份認證服務,以驗證用戶是否有相應的權限。
keystone是openstack框架中負責管理身份驗證、服務規劃和服務令牌功能的模塊。
用戶訪問資源需要驗證用戶的身份與權限,服務執行操作也需要進行權限檢測,這些都需要通過keystone來處理。
keystone類似一個服務總線,或者說是整個openstack框架的註冊表,其他服務通過keystone來註冊其服務的endpoint,任何服務之間的相互調用,需要經過keystone的身份驗證,並獲得目標服務的endoint,從而找到目標服務。
以創建一個雲主機爲例
身份認證服務包含以下組件:
- 服務器:一箇中心化的服務器,使用restful接口來提供認證和授權服務。
- 驅動:驅動或服務後端被整合到集中式服務器中。他們被用來訪問openstack’外部倉庫的身份信息,並且他們可能已經存在於openstack被部署在的基礎設施(sql數據庫或LDAP服務器)中
- 模塊:模塊運行於使用身份認證服務的openstack組件的地址空間中,這些模塊
2.3 控制檯 Dashboard(控制面板服務 horizon)
dashboard (項目名稱爲horizon)是一個web接口,是雲平臺管理員以及用戶可以使用不同用戶管理不同的openstack資源以及服務。
dashboard通過apache的mod_uwgis搭建,並通過python模塊實現和不同的openstack API進行交互,從而實現管理的目的
dashboard是一個用以管理、控制openstack服務的web控制面板,通過它可以實現絕大多數openstack的管理任務。
如,實例、鏡像、密鑰對,卷等等。
在之前的簡單介紹中,基於openstack的入門體驗的大部分操作,都是基於dashboard操作。
通過dashboard,管理員無需記憶繁瑣複雜的openstack命令。
除此之外,用戶還可以在控制面板中使用終端或VNC直接訪問控制檯。
dashboard可以實現以下管理任務:
- 實例管理:創建、刪除實例,查看終端日誌,遠程連接實例,管理卷等;
- 訪問與安全管理:創建安全組,管理密鑰對,設置浮動IP地址等;
- 偏好設定:對虛擬硬件模板可以進行不同的偏好設定;
- 鏡像管理:導入、編輯或刪除鏡像;
- 用戶管理:創建用戶、管理用戶、設置配額、查看服務目錄等;
- 卷管理:管理卷和快照;
- 對象存儲處理:創建、刪除容器和對象。
2.4 鏡像模塊Glance (image 鏡像服務)
鏡像服務允許用戶去發現、註冊和獲取虛擬機鏡像。他提供了一個rest api,允許查詢虛擬機鏡像的元數據,並獲取一個現存的鏡像。
可以將虛擬機鏡像存放到各種位置,從簡單的文件系統到對象存儲系統,如openstack的swift對象存儲服務項目,默認是存儲在本地文件系統上的。
其實在生產環境中這個模塊本身不會存儲大量的數據,需要掛載後臺存儲swift來存放實際的鏡像數據。
在openstack環境中,鏡像是用於在計算節點生成虛擬機。脫離了鏡像服務,就無法創建虛擬機,所以鏡像服務是openstack的一個核心服務
2.4.1 glance中的主要組件
image是存放在控制節點上
glance鏡像服務項目主要涉及以下組件
2.4.1.1 glance-api(端口號9292)
glance-api用於接收鏡像API的調用,如鏡像發現、恢復以及存儲等。
作爲一個後臺進程,glance-api對外提供rest api 接口,響應用戶發起的鏡像查詢、獲取和存儲的調用
消息隊列url 的rabbit端口號爲5672
2.4.1.2 glance-registry(監聽端口號9191)
glance-registry用於存儲、處理和恢復鏡像的元數據,元數據包括鏡像的大小和類型等屬性。
registry是一個內部服務接口,不建議提供給普通用戶
2.4.1.3 database
database用於存放鏡像的元數據,可以根據需要選擇數據庫,比如mysql,sqllite等‘
2.4.1.4 storage repository for image files(鏡像的存儲方式,除了file之外,還有RBD,ceph用的分佈式)
一般情況下,glance並不需要存儲任何鏡像,而是將鏡像存放在後端的倉庫中,glance支持多種repository。
主要包括對象存儲sswift、快存儲cinder、vmware的ESX/ESXi或者vCenter、亞馬遜的S3、http可用服務器、ceph等
2.4.2 鏡像的格式
glance支持多種鏡像格式,包括磁盤格式和容器格式。
openstack中可以支持多種虛擬化的技術,如KVM、XenServer、hyper-v和vmware等。
用戶在上傳鏡像時,需要指定上傳鏡像文件的格式。
除了磁盤格式,在glance中還有容器的格式,一般在上傳鏡像時只需要指定容器格式爲bare,也就是空。
因爲glance並沒有真正使用到容器格式。容器格式用來表示虛擬機鏡像文件是否包含了元數據,例如OWF格式
下面列舉出了glance中常用的集中鏡像文件格式
1.RAW
RAW是一種沒有格式或裸格式的磁盤文件類型,RAW對數據不做任何修飾和處理,直接保存最原始的狀態,在性能方面非常出色
因爲RAW格式保存原始數據,因此也更容易和其他鏡像格式進行轉換
2.QCOW2
QCOW2是qcow的升級版本,其主要特性是磁盤文件大小可以動態按需增長,並且不會佔用所有的實際磁盤空間大小。
例如創建了100G的qcow2格式磁盤,而實際只保存了2G數據,那麼將只佔用實際物理磁盤的2G空間。
與RAW相比,使用這種格式可以節省磁盤容量
3.VHD
VHD是微軟公司產品使用的磁盤格式。Virtual PC(微軟早期虛擬化產品)和hyper-v使用的就是VHD格式。
virtualbox也提供了對VHD的支持。例如在openstack上使用hyper-v類型的虛擬化,就需要上傳對應VHD格式的鏡像文件
4.VMDK
VMDK是vmware公司產品使用的磁盤格式。目前也是一個開放的通用格式,除了vmware自家的產品外,QEMU和virualbox也對VMDK格式的支持
5. VDI
VDI是oracle公司的virtualbox虛擬軟件所使用的格式
6. ISO
ISO是指一種存檔數據文件在光盤上的格式
7.AKI、ARI、AMI
amazon公司的AWS所使用的鏡像格式
備註:
傳輸iso鏡像時,不要在web界面傳,在後臺的控制節點傳
登錄控制節點,然後在傳
用命令傳
鏡像導入 /opt下
然後用命令傳到glance
不同的虛擬化產品能導出不同格式的鏡像,可以通過glance再把這些鏡像導到openstack上
glance 默認file存儲在系統中的
生產環境,一般用的數據比較大,存儲在指定的Swift對象存儲
2.5 計算模塊nova
nova是負責提供計算資源的模塊,也是openstack中的核心模塊,其主要功能是負責虛擬機實例的生命週期管理、網絡管理、存儲卷管理、用戶管理以及其他的相關雲平臺管理功能。
openstack使用計算服務來託管和管理雲計算系統。
openstack計算服務是基礎設施服務(iaas)的主要組成部分,模塊由python實現。
nova起到了承上啓下的作用
openstack計算組件請求openstack identity服務進行認證,請求openstack image服務提供磁盤鏡像,爲openstack dashboard 提供用戶和管理員接口。
磁盤鏡像訪問限制在項目與用戶上;配額以每個項目進行設定,例如:每個項目下可以創建多少實例。
openstack組件可以在標準硬件上向大規模擴展,並且下載磁盤鏡像啓動虛擬機實例。
2.5.1 openstack計算服務的主要組件如下:
1. nova-api服務(接口)
接收和響應來自最終用戶的計算api請求,對外提供一個與雲基礎設施交互的接口,也是外部可用於管理基礎設施的唯一組件。
此服務支持openstack計算服務API、Amazon EC2 API 以及特殊的管理API,用於接收用戶管理操作請求。
管理使用EC2 API通過web services 調
用實現。然後API server通過詳細隊列(message queue)輪流與雲基礎設施的相關組件通信。
作爲EC2 API的另外一種選擇,openstack也提供一個內部使用的openstack API
2.nova-api-metadata服務
接收來自虛擬機發送的元數據請求。nova-api-metadata服務一般安裝在nova-network服務的多主機模式下使用
3.nova-compute服務
一個持續工作的守護進程,通過hypervisor的api來創建和銷燬虛擬機實例,是一個work進程
- XenServer/XCP 的XenAPI
- KVM或QEMU的libvirt
- Vmware的VMwareAPI
這個過程通常比較複雜,守護進程同意了來自隊列的動作請求,轉換爲一些列的系統命令,如啓動一個KVM實例,然後到數據庫中更新它們的狀態。
4.nova-placement-api服務
nova-placement-api服務用於追蹤記錄資源提供者目錄和資源使用情況,這些資源包括計算、存儲以及IP地址池等。
5.nova-Conductor模塊
nova-condutor模塊作用於nova-compute服務與數據庫之間,避免了由nova-compute
服務對雲數據庫的直接訪問。它可以橫向擴展————但是,不要將它部署在運行nova-compute服務的主機節點上
6.nova-scheduler服務(調度器)
接收到一個來自消息隊列的創建虛擬機實例請求,根據配置從計算節點集羣中選取最優節點,並將請求轉發到該節點;
最終將虛擬機部署創建在該節點上
nova-scheduler負責nova主機選擇、提供決策功能
配置在control下的nova.conf裏配置
- scheduler_default_filter 默認的過濾器
- scheduler_available_filter 可用的過濾器
nova需要裝在兩個節點上,控制節點和計算節點
先啓動控制節點,然後再啓動別的
可以動態查看日誌消息,去查看服務是否開啓
systemctl restart ceph-mgr.target
systemctl restart ceph-mon.target mon 監控
systemctl restart ceph-osd.target osd 分佈式存儲,
cpu_allocation_ratio 最高建議設置在6
16的比值正常不會調這麼高,一般6就不得了了
VNC遠程功能模塊
2.6 塊存儲 cinder
塊存儲服務(cinder)提供塊存儲。
存儲的分配和消耗是由塊存儲驅動器或者多後端配置的驅動器決定的。還有很多驅動程序可用:NAS/SAN、NFS、ISCSI、CEPH等。CEPH在生產環境中用的比較多
塊存儲適合性能敏感性業務場景,例如數據庫存儲大規模可擴展的文件系統或服務器需要訪問到塊級的裸設備存儲。
典型情況下,塊服務API和調度器服務運行在控制節點上。取決於使用的驅動,卷服務器可以運行在控制節點、計算節點或單獨的存儲結點上。
塊存儲服務爲openstack中的實例提供持久的存儲,塊存儲提供一個基礎設施,用於管理卷以及和openstack計算服務交互,爲實現提供卷、快照、卷類型等功能。
站在實例的角度,掛載的每個卷都是一塊獨立的硬盤。
cinder提供了從創建捲到刪除卷整個生命週期的管理。
2.6.1 其具體功能是:
- 提供REST API接口,使租戶可以查詢、管理卷、卷快照以及卷類型。
- 協調卷的創建請求,合理優化存儲資源的分配
- 通過驅動架構支持多種後端存儲方式,包括LVM,NFS,CEPH和其它諸如MEC、IBM等商業存儲產品和方案。
2.6.2 cinder服務涉及到以下組件:
1. cinder-api
cinder-api用來接受API請求,並將其路由到cinder-volume執行。
2. cinder-volume
cinder-volume用來與塊存儲服務和cinder-scheduler進程進行直接交互。它也可以與這些進程通過一個消息隊列進行交互。
cinder-volume服務響應送到塊存儲服務的讀寫請求來維持狀態,它也可以和多種存儲提供者在驅動架構下進行交互。
當用戶請求一個存儲資源時,有cinder-api負責接受請求,cinder-scheduler負責調度資源,而真正執行存儲任務的是cinder-volume。
這樣的工作機制使得存儲加厚非常容易擴展。當存儲資源不足時,可以增加存儲結點(cinder-volume)。當客戶的請求量太大調度不過來時,可以增加調度(運行cinder-scheduler)
3. cinder-scheduler
cinder-scheduler守護進程會選擇最優存儲結點來創建卷,其工作機制與nova-scheduler類似。當需要創建卷時,cinder-scheduler根據存儲節點的資源使用情況選擇一個最合適的節點來創建
4. cinder-backup守護進程
cinder-backup服務提供任何種類備份捲到一個備份存儲提供者。就像cinder-volume服務,它與多種存儲提供者在驅動架構下進行交互。
5. 消息隊列
消息隊列作用是在塊存儲的進程之間的路由信息。cinder各個子服務器通過消息隊列實現進程間通信和相互協作。
2.6.3 以創建卷爲例,cinder的工作流程如下:
1.用戶向cinder-api發送創建卷請求:“幫我創建一個卷”
2.cinder-api對請求做一些必要的處理後,向消息隊列發送一條消息:“讓cinder-scheduler創建一個卷”
3.cinder-scheduler從消息隊列獲取到消息,然後執行調度算法,從若干存儲節點中選到最優節點A
4.cinder-scheduler向消息隊列發送一條消息:“讓存儲節點A創建這個卷”
5.存儲節點A的cinder-volume從消息隊列中獲取到消息,然後通過卷提供者的驅動創建卷
在試驗時,通常會把網絡節點安裝在控制節點上
生產環境中,網絡節點會單獨一臺服務器
2.7 網絡模塊 neutron
2.7.1 在正式瞭解之前,首先要了解一下網絡概念:
1.網絡
類似於實際的物理環境的網絡,openstack網絡用於連接雲主機或路由器。
除此之外,還包含子網、網關、dhcp服務等。
openstack網絡分爲內部網絡和外部網絡,內部網絡一般用於連接實例,而外部網絡一般用於連接實例外面的網絡
2.子網
openstack中的子網就是一個IP地址段,用於定義實際的IP地址範圍
3.端口
端口類似於實際網絡中的網絡接口,用於連接終端設備或另一個網絡。
不同的是,openstack中端口連接的一般都是虛擬設備接口,如實例的網卡或者路由器的虛擬接口等。端口還描述了相關的網絡配置,例如可以在端口上配置mac地址和IP地址
4.路由器
路由器用於連接openstack的內部網絡和外部網絡。類似實際的路由功能,支持nat功能,通過綁定浮動IP地址還可以實現地址映射。
neutron分別提供了二層交換(L2)和三層路由抽象(L3)的功能,對應了物理網絡環境中的交換機和路由器
2.7.2 neutron兩種網絡類型:
1.租戶網絡(project network)
租戶網絡
1.租戶可以創建多個私有網絡,同時也可以定義自己私有網絡的IP地址範圍。不同的租戶可以使用相同的IP地址或者地址段
2.project 網絡:特定的project的實現接入所屬的project網絡,可以使用vlan 、gre、vxlan(本次重點詳述vxlan)
router負責連接project網絡和external外部網絡,實現dnat和·snat
snat:從私網內部訪問外部網絡,需要將源IP地址從私網IP轉化爲公網IP,轉換後的公網IP就是供應商分配給我們的浮動IP地址
dnat:從外網訪問內網,還是從內部網絡的角度去看,目標地址是公網地址,因爲公網地址不可以和私網的實例通信,所以要轉化目標地址爲死亡IP地址
2.供應商網絡(provider network)
provider network供應商網絡由雲管理員創建,並且必須與現有的物理網絡匹配
provider network 是支持三層網絡的虛擬化,最大的特點是租戶可以按照自己的需求創建私有網絡。
默認網絡使用openswitch,官網實現是linux bridge,這次介紹的是openswitch
創建供應商網絡,他是有不同網段的,每個網段和不同的物理網卡關聯,這邊分配的供應商網絡會產生多個公網IP地址段。
這些地址段,統稱爲浮動IP地址段,他是可以分配給租戶的vm實例使用
vlan網絡通過vlan id進行二層網絡的隔離,具有相同的vlan id的內部實例實現自由的通行,不同的vlan id需要經過三層網絡協議轉發,但是vlan的個數是一個最大的弊端,最大支持4096個
vxlan和gre是一種網絡封裝協議,gre是通過IP數據進行傳輸,vxlan是通過udp包進行的數據傳輸(不安全,但是效率高),gre和vxlan數據包在流出節點之前會打上相應的tags,然後數據在進入節點內部的虛擬網絡時,會去剝離相應的tags
vxlan和gre在數據流入外層網絡必須有路由器纔可以實現
而且租戶想要外部網絡,也需要路由器將內部網絡和外部網絡互聯,通過nat技術實現,也就是爲什麼租戶的實例要分配一個浮動地址的原因
安全組的作用:是一個作用於雲主機的虛擬防火牆規則的集合,默認的規則是允許實例訪問外部網絡的數據
openstack早期的網絡模塊,是nova-network,而neutron則是nova-network的更新換代產品,也是目前openstack的重要組件之一
2.7.3 虛擬網絡
neutron中最爲核心的工作就是對網絡的管理和將網絡抽象話。在openstack環境中對網絡的抽象主要有以下幾種形式。
1.虛擬交換機/網橋
openstack網絡中,對於二層交換機有兩種的抽象方式
1.通過linux bridge實現
linux bridge 由linux內核實現,是工作在二層的虛擬網絡設備,功能類似於現實中的交換機
在圖中,分別通過三個虛擬交換機來鏈接三臺實例,每個虛擬交換機都代表一個openstack網絡,通過vlan功能隔離不同的實例,每個實例都代表一個租戶,虛擬交換機4通過物理網卡實現虛擬網絡和外部真實網絡的通信。
(備註:這個網橋模式不安全)
2.通過openswitch實現
類似於linux bridge,open vswitch也可以實現對二層網絡的抽象,對虛擬網絡提供分佈式交換機功能。
他支持各種組網類型,功能全面,支持基本的vlan功能,也支持QOS以及netflow、aflow標準的管理接口和協議。
從而,通過這些接口可以實現VM實例流量監控的任務。
運行在雲環境中各種或相同虛擬化平臺上的多個vswitch實現了分佈式架構的虛擬交換機。
一個物理服務器上的vswitch可以透明的與其它服務器上的vswitch鏈接通信
在早期的openstack版本中,默認使用的是openswitch,而在O版中,多節點手動安裝默認的是linux bridge。
從功能上區分,openswith更加強大
但是linux bridge實現比較簡單,更加適合初學者
虛擬交換機/網橋主要實現以下功能
- 連接實例
- 通過vlan隔離實例網絡
- 連接實例到宿主機的外部網絡
2.虛擬路由器
openstack中的虛擬路由器是對網絡設備的一種抽象,實現了租戶間的多網絡構建以及內部網絡和外部網絡之間的通信問題。
其實現原理與真實路由器一致,根據路由錶轉發數據包,同時還支持nat地址轉換以及浮動IP地址設置。
3.namespace
二層網絡通過vlan對租戶網絡進行隔離,而三層網絡是通過namespace進行隔離,每個namespace都有自己的獨立網絡線,包括路由表,防火牆規則、網絡接口等。
同時,neutron爲每個namespace提供DHCP和路由服務,所以各個租戶之間的網絡地址允許重疊,因爲他們在不同的namespace中進行抽象。
如上圖所示,三個租戶分別規劃了相同的IP地址段,192.168.100.0/24
這樣的設計在真實環境中是不可行的,因爲路由器不允許在不同的接口配置相同的IP地址網段。
但是在openstack網絡中,路由器通過不同的namespace進行隔離,所以R1虛擬路由器如同開啓三個相互之間獨立的進程。在每個namespace中,只有一個192.168.100.0/24網段。通過namespace,openstack可以讓租戶創建任意網絡,而不必擔心和其他網絡產生衝突。
4. DHCP server
neutron提供DHCP服務的組件是DHCPagent,默認通過dnsmasq實現DHCP功能。
dnsmasq是一個提供DHCP與DNS服務的開源軟件。在openstack網絡中,DHCP服務同樣被隔離在namespace中,並通過linux bridge 鏈接DHCP namespace中的接口。
一個DHCPserver 只爲指定的網絡提供服務,即dnsmasq與網絡是一 一對應的關係。
一個ndsmasq進程可以爲同一個network中所有使能dhcp的子網提供服務。
管理員可以選擇啓用或禁用dhcp server,但是一旦啓用dhcp server,並且配置相應的地址池,網絡節點上的dhcp sgent會啓動一個dnsmasq進程爲該網絡提供DHCP服務。
該網絡將自動獲取網絡地址以及其他選項。
5.浮動IP地址
通常情況下,在搭建openstack網絡時,會在虛擬路由器啓用SNAT功能。
這將給openstack網絡提高安全性和便利性,具體表現如下:
- 啓動nat功能,opentack內部網絡被保護起來
- 虛擬機王文外部網絡通過地址轉化的方式,更容易讓外部路由設備尋路,即不需要增加額外的回包路由條目
所以,當網絡啓用了NAT功能後,在允許虛擬機訪問外部網絡的同時,也阻止了外部網絡訪問虛擬機的流量,如ssh管理流量。
但是可以通過目標地址轉換的方式實現外部網絡訪問內部虛擬機,nat地址映射。配置nat地址映射需要在虛擬路由器外部接口配置相應的外部網絡地址池,而這些地址池中的地址就是浮動IP地址。所以浮動IP地址是用來解決外部網絡訪問虛擬機的問題。如果虛擬機不需要外部網絡訪問,也可以不綁定浮動IP地址
2.7.4 組網模型
neutron提供了多種組網模型供不同的租戶搭建各種網絡拓撲。
1.local網絡
local網絡的網絡模型有如下特點:
- 不具備vlan特性,不能對二層網絡進行隔離
- 同一個local網絡的虛擬機實例會連接到相同的虛擬交換機上,instance實例內部之間可以通信
- 虛擬交換機沒有綁定任何物理網卡,無法與宿主機之外的網絡通信,也就是無法與自身namespace之外的設備通信
典型的local網絡組網模型如下圖所示。vm1與vm2連接到linux bridge 1,vm3連接到 linux bridge 2.
vm 1 與 vm 2因爲鏈接到同一個bridge,所以可以相互通信,但是不能可vm 3 進行通信。
因爲沒有任何linux bridge綁定物理網卡,所以任何虛擬機都不能訪問外部網絡
2.flat網絡
flat組網模型不支持vlan,屬於扁平化的網絡模型。
linux bridge直接綁定物理網卡並連接虛擬機。每個flat都會獨佔一格物理網卡。
該物理網卡不能配置IP地址,所有連接到此網絡的虛擬機共享一個私有IP網段。
flat組網模型適用於一下應用場景
(1)flat網絡直接連接虛擬機和外部網絡
如下圖所示,linux bridge 1 連接 vm 1 和 vm 2,並綁定物理網卡ens37
linux bridge 2 連接vm 3,並綁定物理網卡ens38
vm 1 和vm 2 可以直接相互通信,並通過ens37 訪問外部網絡,
vm 3 通過ens 38訪問外部網絡
(2)flat網絡連接路由器和外部網絡
如下圖所示,虛擬機鏈接vlan 類型的網絡,並通過vlan對租戶進行隔離,對外通過虛擬路由器R1鏈接虛擬交換機4,並通過虛擬交換機4倆捏物理網卡實現訪問外部網絡。
通過vlan隔離的租戶被限制在虛擬交換機1-3所在的vlan網絡,而虛擬機發起的流量經過路由器轉發後不攜帶任何vlan標籤到達虛擬交換機4,並通過物理網卡訪問外部網絡。
虛擬交換機4所在的網絡就可以被設計爲flat網絡
flat網絡存在以下缺點:
- 存在單一網絡瓶頸;
- 缺乏可伸縮性;
- 缺乏合適的多租戶隔離
3. vlan網絡
openstack通過vlan 網絡解決了多租戶之間的網絡隔離問題。如下圖所示
linux bridge 1和linux bridge 2 是屬於vlan 類型的網絡,並分別屬於vlan 101 和 vlan102.
vm 1 和vm 2 鏈接到bridge 1,
vm 3 鏈接到 bridge 2
linux bridge 1 和 linux bridge 2 分辨綁定物理網卡ens37的兩個子網卡ens37.101 和ens37.102
vm 1 和 vm 2 發起的流量在經過ens37.101時,被打上vlan101標籤
vm 3發起的流量在經過ens 37.102時被打上vlan 102,這就要求鏈接ens37的物理交換機相應的接口要配置爲trunk模式
如果需要其他vlan網絡,可以創建物理網卡新的子接口,並綁定新網絡
vlan網絡存在以下缺點:
- vlan的數量限制:4096個vlan數量不能大規模滿足雲計算數據中心的需求
- 物理網絡基礎設施的限制:基於IP子網的區域劃分限制了需要二層網絡連通性的應用負載的部署
- TOR交換機mac表耗盡:虛擬化以及節點過多的流量導致更多的mac地址表條目
4. vxlan 網絡
vxlan網絡使用的是隧道技術,是目前openstack廣泛使用的網絡技術
相比於之前的vlan模型,vxlan做出了以下改進:
- 租戶數量從4K增加到16M
- 租戶內部通信可以跨越任意IP網絡,支持虛擬機任意遷移
- 一般來說,每個租戶邏輯上都有一個網關實例,IP地址可以在租戶間進行復用
- 能夠結合SDN技術對流量進行優化
vxlan網絡是在傳統的IP網絡中傳輸以太網數據幀。
主要涉及以下幾個概念:
- VTEP(vxlan tunnel end point ):
vxlan隧道的端點,用於vxlan報文的封裝與解封裝。類似於IPsecVPN中的加密點。
傳統的以太網幀在發送vtep端將封裝新的vxlan、udp、IP以及以太網頭部。
而接收vtep端將數據解封裝。vxlan報文中源IP地址爲本節點的vtep地址。
vxlan報文中目的IP地址爲對端節點的vtep地址,一堆vtep地址就對應着一個vxlan隧道
- VNI(vxlan network identifier):
用來標識一個vxlan段,在vxlan網絡中,通過VNI標識一個租戶,類似vlan網絡中的vlan ID。
不同vxlan段的虛擬機之間不能直接在二層相互通信。
vni由24比特組成,支持多達16M的租戶
在vxlan網絡中心中,虛擬機之間的通信過程如圖所示
- vtep1將來自vm 1 的數據幀添加vxlan頭部、外部udp和IP首部
- vtep1通過傳統的IP網絡將數據發送之vtep2
- vtep接收到vxlan報文時,拆除外部IP、udp以及vxlan首部,然後內部數據包交給正確的終端vm 2
雲計算數據中心的需求
- 物理網絡基礎設施的限制:基於IP子網的區域劃分限制了需要二層網絡連通性的應用負載的部署
- TOR交換機mac表耗盡:虛擬化以及節點過多的流量導致更多的mac地址表條目
4. vxlan 網絡
vxlan網絡使用的是隧道技術,是目前openstack廣泛使用的網絡技術
相比於之前的vlan模型,vxlan做出了以下改進:
- 租戶數量從4K增加到16M
- 租戶內部通信可以跨越任意IP網絡,支持虛擬機任意遷移
- 一般來說,每個租戶邏輯上都有一個網關實例,IP地址可以在租戶間進行復用
- 能夠結合SDN技術對流量進行優化
vxlan網絡是在傳統的IP網絡中傳輸以太網數據幀。
主要涉及以下幾個概念:
- VTEP(vxlan tunnel end point ):
vxlan隧道的端點,用於vxlan報文的封裝與解封裝。類似於IPsecVPN中的加密點。
傳統的以太網幀在發送vtep端將封裝新的vxlan、udp、IP以及以太網頭部。
而接收vtep端將數據解封裝。vxlan報文中源IP地址爲本節點的vtep地址。
vxlan報文中目的IP地址爲對端節點的vtep地址,一堆vtep地址就對應着一個vxlan隧道
- VNI(vxlan network identifier):
用來標識一個vxlan段,在vxlan網絡中,通過VNI標識一個租戶,類似vlan網絡中的vlan ID。
不同vxlan段的虛擬機之間不能直接在二層相互通信。
vni由24比特組成,支持多達16M的租戶
在vxlan網絡中心中,虛擬機之間的通信過程如圖所示
- vtep1將來自vm 1 的數據幀添加vxlan頭部、外部udp和IP首部
- vtep1通過傳統的IP網絡將數據發送之vtep2
- vtep接收到vxlan報文時,拆除外部IP、udp以及vxlan首部,然後內部數據包交給正確的終端vm 2