當前位置:首頁 » 密碼管理 » openstack外網訪問

openstack外網訪問

發布時間: 2023-01-02 11:27:09

『壹』 OpenStack neutron相關概念闡述

VLAN網路允許用戶使用外部物理網路中的VLAN ID創建多個租戶或供應商網路。VLAN網路通過VLAN ID進行二層網路的隔離, 相同VLAN ID內部的實例可以實現自由通信 ,而 不同VLAN之間的實例通信則需要經過三層路由的轉發 。由於VLAN網路可以實現靈活多樣的網路劃分與隔離,故VLAN網路是生產環境中使用最為普遍的網路。而在雲計算環境中,VLAN網路主要用於私有雲環境中,對於大型公有雲數據中心,在租戶增加的情況下,VLAN ID的限制是VLAN網路的一大弊端(最大隻有4096個)。

為了創建豐富的網路拓撲,Neutron提供了兩種網路類型,即 租戶網路(Project  Network) 和 供應商網路(Provider Network) 。在租戶網路中,每個租戶可以創建多個私有網路,租戶可以自定義私有網路的IP地址范圍,此外,不同的租戶可以同時使用相同的IP地址或地址段。 與租戶網路不同,供應商網路由雲管理員創建 ,並且必須與現有的物理網路匹配。

為了實現不同租戶網路互相隔離,Neutron提供了幾種不同的網路拓撲與隔離技術 ,Flat網路便是其中之一。在Flat網路中, 不同計算節點上的全部實例接入同一個大二層網路內,全部實例共享此網路,不存在VLAN標記或其他網路隔離技術 。接入Flat網路的全部實例通過數據中心核心路由接入Internet,相對於其他的網路類型,Flat網路是最簡單的網路類型。在Neutron的網路實現中,可以同時部署多個隔離的Flat網路,但是 每個Flat網路都要獨佔一個物理網卡 ,這意味著要通過Flat網路來實現多租戶的隔離,尤其是在公有雲環境中,這種方法似乎不太現實。

GRE和VxLAN是一種 網路封裝協議 ,基於這類封裝協議可以創建重疊(overlay)網路以實現和控制不同計算節點實例之間的通信。 GRE和VxLAN的主要區別 在於GRE網路通過IP包進行數據傳輸,而VxLAN通過UDP包進行數據傳輸, GRE或VxLAN數據包在流出節點之前會被打上相應的GRE或VxLAN網路ID(Segmentation ID),而在進入節點後對應的ID會被剝離,之後再進入節點內部的虛擬網路進行數據轉發 。

GRE和VxLAN網路中的 數據流要進入外部網路,必須配有路由器, 而且要將租戶網路與外部網路互連,路由器也是必備的。在GRE和VxLAN網路中, 路由器的主要作用在於通過實例浮動IP提供外部網路對實例的直接訪問。 在很多公有雲環境中,GRE和VxLAN網路被廣泛使用,因此用戶在公有雲上創建實例後,通常需要向供應商購買或申請通信運營商IP和一個虛擬路由器,並將運營商IP作為實例浮動IP,才能通過Internet訪問自己的公有雲實例。

埠(Port)在OpenStack網路中是一種虛擬介面設備,用於模擬物理網路介面。在Neutron中, 埠是網路設備連接到某個虛擬網路的接入點 ,如虛擬機的NIC只能通過埠接入虛擬網路,埠還描述了與網路相關的配置,如配置到埠上的MAC和IP。

子網(Subnet)代表的是一個IP段和相關的配置狀態。子網IP和網路配置信息通常被認為是網路服務為租戶網路和供應商網路提供的原生IPAM。當某個網路上有新的埠被創建時,網路服務便會使用子網提供的IP段為新埠分配IP。

一般來說,終端用戶可以在沒有任何約束的情況下使用有效的IP創建子網,不過有時需要為admin或租戶用戶預先定義可用IP池,並在創建子網時從此IP池中自動分配地址。通過子網池,便可要求每個創建的子網必須在預定義的子網池中,從而約束子網所能使用的IP。此外,子網池的使用還可以避免IP被重復使用和不同子網使用重疊的IP。

在Neutron中,路由Router是個用以在不同網路中進行數據包轉發的邏輯組件,即路由是個虛擬設備,在特定插件支持下,路由還提供了L3和NAT功能,以使得外部網路(不一定是Internet)與租戶私有網路之間實現相互通信 。在Neutron中, 虛擬路由通常位於網路節點上 ,而租戶私有網路要實現與外部Provider物理網路(或Public網路)的通信,則必須經過虛擬路由。Neutron網路節點虛擬路由連接租戶網路和外部網路的示意如下圖所示。

路由通常包含內部介面和外部介面,如上圖所示,位於租戶網路中的主機Host_A和主機Host_B通過內部介面接入路由,並通過路由公共網關(外部介面)訪問外部Provider網路和Public中的主機Host_C。但是Host_C要訪問租戶私網中的Host_A和Host_B主機,則必須通過路由DNAT功能才能實現,因此需要為Host_A和Host_B主機配置Floating IP。

安全組(Security Group)是虛擬防火牆的規則集合,這些 防火牆規則對外部訪問實例和實例訪問外部的數據包實現了埠級別(Port Level)的控制 。安全組使用默認拒絕策略(Default Deny Policy),其僅包含允許特定數據流通過的規則,每個埠都可以通過附加的形式添加到一個或多個安全組中,防火牆驅動會自動將安全組規則轉換為底層的數據包過濾技術,如iptables。 在Neutron中,每個項目(Project)都包含一個名為default的默認安全組,default安全組允許實例對外的全部訪問,但是拒絕全部外網對實例的訪問 。如果在創建實例時未指定安全組,則Neutron會自動使用默認安全組default。同樣,如果創建埠時沒有指定安全組,則default安全組也會被默認用到此埠。 要訪問特定實例中某個埠的應用程序,必須在該實例的安全組中開通應用程序要訪問的埠 。

在雲計算網路中,一個租戶可以有多個租戶子網,租戶子網通常稱為 內部網路 (簡稱內網),不同內網中通常會接入不同用途的實例。租戶內部子網之間的數據訪問通常稱為 東西向通信 。此外,位於租戶內網中的應用要對外提供服務,則必須實現外部網路與租戶網路彼此之間的通信,這包括了外網訪問內網和內網訪問外網兩種方式,通常內外網之間的訪問稱為 南北向通信 。網路東西向通信和南北向通信的示意圖如圖所示。

在圖中,子網A與子網B之間的通信稱為網路的東西流向,外部網路與租戶網路之間的通信稱為網路的南北向流量。由於子網A和子網B屬於不同的子網,因此網路東西向通信需要Router轉發,同樣,外部網路與租戶網路之間的南北向通信也必須經過Router轉發才能實現。在雲計算網路環境中, Router的東西向轉發實現了內部子網之間的通信 ,而 南北向轉發實現了內部與外部網路之間的通信 。

源地址轉換(Source Network Address Transfer, SNAT) 主要用於控制內網對外網的訪問,SNAT通常只需一個外部網關,而無須屬於外部網路的浮動IP(Floating IP) ,即可實現內網全部實例對外網的訪問。在內網存在大量實例的情況下,相對DNAT, SNAT可以節約大量外網IP。在SNAT中,盡管內部私網可以訪問外網,但是外網卻不能訪問內部私網,因而SNAT具有很好的安全防護機制。 很多企業為了防止外網入侵都會使用SNAT來實現內網對Internet的訪問, 而在OpenStack網路中,SNAT主要用來實現租戶虛擬機實例對外網的訪問。SNAT的工作原理就是,內部私網TCP/IP數據包在進入路由後,數據包中的私網源IP會被路由上的外網網關IP替換,這是源地址轉換的核心步驟,即將數據包中源IP轉換為外網網關地址。這里再次指出,在私有或者公有雲中,虛擬機要訪問外網,並不意味著必須為虛擬機分配Floating IP,而只需創建路由並為路由設置外網網關,將內網接入路由即可實現內網實例對外網的訪問。由於SNAT是在數據包經過路由之後再進行的IP替換,因此SNAT又稱POST-Routing。

目的地址轉換(Destination Network  Address Transfer, DNAT)主要用於外網對內網的訪問,由於外網要訪問位於內網中的某個特定實例,因此必須向位於外網中的訪問客戶端提供具體的目的IP,而這個實例目的IP通常稱為Floating IP。Floating IP並不屬於內網地址,而是外網地址。Floating IP與內網實例地址是一一綁定的關系,它們之間的地址轉換便是DNAT。一旦為實例綁定Floating IP,位於外網中的訪問客戶端便可通過該Floating IP直接訪問內網中的實例。目前很多公有雲供應商都是通過DNAT的形式, 利用電信運行商提供的公網IP段創建一個Floating IP ,並將其綁定到租戶的特定虛擬機上,從而允許租戶基於Internet訪問位於供應商數據中心的虛擬機。 DNAT的工作原理就是, 在外網數據包進入路由之前,將數據包中的目的地址(屬於外網)替換為內部私網地址(租戶內網網關地址),這也是目的地址轉換的核心步驟。經過DNAT之後,數據包目的地址被替換並進入路由,路由便將數據包轉發到對應的虛擬機。DNAT過程發生在進入路由之前,即先將外網目的IP替換成為內網私有IP再進入路由進行轉發(地址替換發生在路由之前),因此,DNAT又稱PRE-Routing。

linux系統中,網路命名空間(Network  Namespace)就是一個虛擬的網路設備, 網路命名空間有獨立的路由表、iptables策略和介面設備等 ,網路命名空間彼此之間完全隔離。假設系統中有eth0和eth1兩個網卡設備,且eth0屬於命名空間namespace1,而eth1屬於命名空間namespace2,則eth1和eth2就類似於兩個獨立網路設備上的介面,彼此相互獨立,而且只有進入各自的命名空間後,才能夠對命名空間中的介面設備進行配置更改與查看。因此,如果eth0和eth1加入各自的命名空間後,在Linux系統中,針對全局系統的網路配置命令ifconfig是不能看到這兩個網卡設備的相關配置信息的,必須進入各自的命名空間使用此命令才能看到相關信息。在Linux中,使用命令ip netns可以查看系統中的全部網路命名空間,要配置或者查看命名空間中的設備,則需要進入特定命名空間並在命名空間中執行相應命令。例如,當前系統中有一個路由命名空間qrouter-xxx,想要查看該命名空間中的介面和IP配置情況,可以執行命令:

        ip netns exec qrouter-xxx ip addr show

其中,ip netns exec qrouter-xxx指明了運行ip addr show命令的命名空間。命名空間是Linux系統中使用非常廣泛的技術,尤其是在網路技術領域,命名空間具有極佳的網路設備模擬能力和配置隔離性。因此在Neutron項目中,網路命名空間被大量使用,例如不同的租戶網路可以使用重疊的IP地址,就是因為不同租戶具有獨立的路由命名空間。

『貳』 在OpenStack里怎樣配置Neutron,讓虛擬機訪問外網

OpenStack里虛機(或者叫instance)只有在分配floating IP後才能訪問外網,那麼需要怎樣做配置才能達到目的呢? 1. 需要在網路節點上確定一個可以訪問外網的物理網卡,這個網卡可以和管理網卡是一個。

『叄』 Openstack概述 、 部署安裝環境 、 部署Openstack 、 Openstack操作基礎

案例1:配置yum倉庫

案例2:測試時間伺服器

案例3:配置yum倉庫

案例4:檢查基礎環境

案例5:部署Openstack

案例6:網路管理

案例7:登錄openstack

1 案例1:配置yum倉庫

1.1 問題

本案例要求配置基本環境:

配置三台虛擬機

2CPU,6G 內存,50G 硬碟

2CPU,4.5G 內存,100G 硬碟

配置靜態IP ifcfg-eth0

openstack : 192.168.1.10

nova: 192.168.1.11, 192.168.1.12

配置主機名 /etc/hosts,能夠相互 ping 通

配置 dns 伺服器 /etc/resolv.conf

1.2 方案

此實驗的整體方案需要三台機器,openstack作為主節點,nova01 和 nova02作為額外節點,真機做為DNS轉發和NTP的伺服器(這里不再在表-1中體現),提供域名解析和時間同步服務,具體情況如表-1所示:

表-1

1.3 步驟

實現此案例需要按照如下步驟進行。

步驟一:准備三台虛擬機

[student@room9pc01 images]$base-vm openstack nova01 nova02

[student@room9pc01 images]$virsh start openstack

[student@room9pc01 images]$virsh start nova01

[student@room9pc01 images]$virsh start nova02

2)opensatck主機擴容為50G

[student@room9pc01 images]$ virsh blockresize--path /var/lib/libvirt/images/openstack.img--size 100G openstack

[student@room9pc01 images]$ virsh console openstack

[root@localhost~]#/usr/bin/growpart /dev/vda1

[root@localhost~]#/usr/sbin/xfs_growfs /

[root@localhost~]# df-h

Filesystem      Size  Used Avail Use%Mounted on

/dev/vda1        50G  914M  50G2%/

3)nova01 和 nova02 主機擴容為100G(以nova01為例)

[student@room9pc01 images]$ virsh blockresize--path /var/lib/libvirt/images/nova01.img--size 50G nova01

重新定義'/var/lib/libvirt/images/nova01.img'塊設備大小

[root@localhost~]#/usr/bin/growpart /dev/vda1

[root@localhost~]#/usr/sbin/xfs_growfs  /

[root@localhost~]# df-h

Filesystem      Size  Used Avail Use%Mounted on

/dev/vda1      100G  917M  100G1%/

4)三台主機配置靜態ip(以一台為例)

openstack:192.168.1.10

nova01: 192.168.1.11

nova02: 192.168.1.12

[root@localhost~]#cd /etc/sysconfig/network-scripts/

[root@localhost network-scripts]# vim ifcfg-eth0

# Generated by dracut initrd

DEVICE="eth0"

ONBOOT="yes"

NM_CONTROLLED="no"

TYPE="Ethernet"

BOOTPROTO="static"

PERSISTENT_DHCLIENT="yes"

IPADDR=192.168.1.10

NEMASK=255.255.255.0

GATEWAY=192.168.1.254

5)三台主機修改主機名,配置/etc/hosts,和/etc/resolv.conf文件(以一台為例)

[root@localhost~]# hostname openstack

[root@localhost~]# echo openstack>/etc/hostname

[root@localhost~]#vim /etc/hosts

192.168.1.10openstack

192.168.1.11nova01

192.168.1.12nova02

[root@localhost~]#vim /etc/resolv.conf//去掉search開頭的行

;generatedby /usr/sbin/dhclient-script

nameserver192.168.1.254

6)修改三台主機的內存(openstack6G,nova01 和nova02 4G)

[student@room9pc01~]$ virsh edit openstack

...

<memory unit='KiB'>6588282</memory>

<currentMemory unit='KiB'>6588282</currentMemory>

...

[student@room9pc01~]$ virsh edit nova01

...

<memory unit='KiB'>4588282</memory>

<currentMemory unit='KiB'>4588282</currentMemory>

...

[student@room9pc01~]$ virsh start  openstack

域 openstack 已開始

[student@room9pc01~]$ virsh start  nova01

域 nova01 已開始

[student@room9pc01~]$ virsh start  nova02

域 nova02 已開始

2 案例2:測試時間伺服器

2.1 問題

本案例要求掌握時間服務的配置:

修改 openstack,nova01,nova02 的時間伺服器

重啟服務後驗證配置

2.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:修改openstack,nova01 和 nova02 的時間伺服器(以一台為例)

[root@openstack~]#vim /etc/chrony.conf

...

server192.168.1.254iburst

[root@openstack~]# systemctl restart chronyd

步驟二:驗證

[root@openstack~]# chronyc sources-v

...

||||\

MSName/IP address        Stratum Poll Reach LastRx Last sample

===============================================================================

^*gateway36376-93ns[+903ns]+/-26ms

步驟三:兩台虛擬機配置靜態ip

注意:兩台主機同樣操作,改一下ip即可(以openstack.te.cn為例)

[root@localhost~]# echo openstack.te.cn>/etc/hostname

[root@localhost~]# hostname openstack.te.cn

//另外一台主機改名為nova.te.cn,配置ip為1.20

[root@openstack~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0

# Generated by dracut initrd

DEVICE="eth0"

ONBOOT="yes"

IPV6INIT="no"

IPV4_FAILURE_FATAL="no"

NM_CONTROLLED="no"

TYPE="Ethernet"

BOOTPROTO="static"

IPADDR="192.168.1.10"

PREFIX=24

GATEWAY=192.168.1.254

[root@openstack~]# systemctl restart network

3 案例3:配置yum倉庫

3.1 問題

本案例要求配置yum倉庫:

配置 yum 源,軟體倉庫一共 4 個

3.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:三台主機配置yum源(以一台主機為例,共10670個軟體包)

[student@room9pc01~]$cd /linux-soft/04/openstack/

[student@room9pc01 openstack]$ ls

cirros.qcow2  RHEL7-extras.iso  RHEL7OSP-10.iso  small.qcow2

[student@room9pc01 openstack]$mkdir /var/ftp/RHEL7-extras

[student@room9pc01 openstack]$mkdir /var/ftp/RHEL7OSP-10

[student@room9pc01 openstack]$ mount RHEL7-extras.iso  /var/ftp/RHEL7-extras/

mount:/dev/loop1 防寫,將以只讀方式掛載

[student@room9pc01 openstack]$ mount RHEL7OSP-10.iso /var/ftp/RHEL7OSP-10/

mount:/dev/loop2 防寫,將以只讀方式掛載

[root@openstack~]#vim /etc/yum.repos.d/local.repo

[local_repo]

name=CentOS-$releasever-Base

baseurl="ftp://192.168.1.254/centos-1804"

enabled=1

gpgcheck=1

[RHEL7-extras]

name=RHEL7-extras

baseurl="ftp://192.168.1.254/RHEL7-extras"

enabled=1

gpgcheck=0

[RHEL7OSP-package]

name=RHEL7OSP-package

baseurl="ftp://192.168.1.254/RHEL7OSP-10/rhel-7-server-openstack-10-rpms"

enabled=1

gpgcheck=0

[RHEL7OSP-devtools]

name=RHEL7OSP-devtools

baseurl="ftp://192.168.1.254/RHEL7OSP-10/rhel-7-server-openstack-10-devtools-rpms"

enabled=1

gpgcheck=0

[root@openstack~]#scp /etc/yum.repos.d/local.repo192.168.1.11:/etc/yum.repos.d/

[email protected]'s password:

local.repo                                                                                          100%  490  484.4KB/s  00:00   

[root@openstack ~]# scp /etc/yum.repos.d/local.repo 192.168.1.12:/etc/yum.repos.d/

[email protected]'s password:

local.repo

4 案例4:檢查基礎環境

4.1 問題

本案例要求准備基礎環境,為安裝openstack做准備:

安裝額外的軟體包

是否卸載firewalld 和 NetworkManager

檢查配置主機網路參數(靜態IP)

主機名必須能夠相互 ping 通

檢查配置主機yum源(4個,10670)

依賴軟體包是否安裝

檢查NTP伺服器是否可用

檢查 /etc/resolv.conf 不能有 search 開頭的行

4.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:檢查基礎環境

1)安裝額外軟體包(三台機器操作,這里以一台為例)

[root@openstack yum.repos.d]# yum install-y qemu-kvm libvirt-client libvirt-daemon libvirt-daemon-driver-qemu python-setuptools

2)是否卸載firewalld 和 NetworkManager

[root@openstack~]# rpm-qa|grep NetworkManager*

[root@openstack~]# rpm-qa|grep firewalld*

3)檢查配置主機網路參數

[root@openstack~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0

# Generated by dracut initrd

DEVICE="eth0"

ONBOOT="yes"

NM_CONTROLLED="no"

TYPE="Ethernet"

BOOTPROTO="static"

PERSISTENT_DHCLIENT="yes"

IPADDR=192.168.1.10

NEMASK=255.255.255.0

GATEWAY=192.168.1.254

4)驗證主機名是否互通

[root@openstack~]# ping openstack

...

64bytes fromopenstack(192.168.1.10):icmp_seq=1ttl=255time=0.023ms

64bytes fromopenstack(192.168.1.10):icmp_seq=2ttl=255time=0.027ms

...

[root@openstack~]# ping nova01

PINGnova01(192.168.1.11)56(84)bytes of data.

64bytes fromnova01(192.168.1.11):icmp_seq=1ttl=255time=0.139ms

...

[root@openstack~]# ping nova02

PINGnova02(192.168.1.12)56(84)bytes of data.

64bytes fromnova02(192.168.1.12):icmp_seq=1ttl=255time=0.251ms

...

5)檢查配置主機yum源

[root@openstack~]# yum repolist

已載入插件:fastestmirror

Loading mirror speeds from cached hostfile

源標識                                                          源名稱                                                          狀態

RHEL7-extras                                                    RHEL7-extras76

RHEL7OSP-devtools                                              RHEL7OSP-devtools3

RHEL7OSP-package                                                RHEL7OSP-package680

local_repo                                                      CentOS-7-Base9,911

repolist:10,670

6)檢查時間同步是否可用

[root@openstack~]# chronyc  sources-v

210Numberof sources=1

....

||||\

MSName/IP address        Stratum Poll Reach LastRx Last sample

===============================================================================

^*gateway3737728+31us[+89us]+/-25ms

[root@openstack~]#

7)檢查/etc/resolv.conf 不能有 search 開頭的行

[root@openstack~]#cat /etc/resolv.conf

;generatedby /usr/sbin/dhclient-script

nameserver192.168.1.254

5 案例5:部署Openstack

5.1 問題

本案例要求通過packstack完成以下配置:

通過packstack部署Openstack

根據相關日誌文件進行排錯

5.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:安裝packstack

[root@openstack~]# yum install-y openstack-packstack

[root@openstack~]# packstack--gen-answer-file answer.ini

//answer.ini與answer.txt是一樣的,只是用vim打開answer.ini文件有顏色

Packstack changed given value  to requiredvalue /root/.ssh/id_rsa.pub

[root@openstack~]# vim answer.ini

42CONFIG_SWIFT_INSTALL=n

45CONFIG_CEILOMETER_INSTALL=n//計費相關模塊

49CONFIG_AODH_INSTALL=n//計費相關模塊

53CONFIG_GNOCCHI_INSTALL=n//計費相關模塊

75CONFIG_NTP_SERVERS=192.168.1.254//時間伺服器的地址

98CONFIG_COMPUTE_HOSTS=192.168.1.11

102CONFIG_NETWORK_HOSTS=192.168.1.10,192.168.1.11

333CONFIG_KEYSTONE_ADMIN_PW=a//修改管理員的密碼

840CONFIG_NEUTRON_ML2_TYPE_DRIVERS=flat,vxlan//驅動類型

876CONFIG_NEUTRON_ML2_VXLAN_GROUP=239.1.1.5

//設置組播地址,最後一個隨意不能為0和255,其他固定

910CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex//物理網橋的名稱

921CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0

//br-ex橋的名稱與eth0連接,管理eth0,網橋與哪個物理網卡連接

1179CONFIG_PROVISION_DEMO=n//DEMO是否測試

[root@openstack~]# packstack--answer-file=answer.ini

Welcome to the Packstack setup utility

The installation log file is available at:/var/tmp/packstack/20190423-170603-b43g_i/openstack-setup.log

Installing:

Clean Up[DONE]

Discovering ip protocol version[DONE]

[email protected]'s password:

[email protected]'s password:

Setting up ssh keys

****Installation completed successfully******//出現這個為成功

6 案例6:網路管理

6.1 問題

本案例要求運用OVS完成以下配置:

查看外部OVS網橋及其埠

驗證OVS配置

6.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:查看外部OVS網橋

1)查看br-ex網橋配置(br-ex為OVS網橋設備)

[root@openstack~]#cat /etc/sysconfig/network-scripts/ifcfg-br-ex

ONBOOT="yes"

NM_CONTROLLED="no"

IPADDR="192.168.1.10"

PREFIX=24

GATEWAY=192.168.1.254

DEVICE=br-ex

NAME=br-ex

DEVICETYPE=ovs

OVSBOOTPROTO="static"

TYPE=OVSBridge

2)查看eth0網卡配置(該網卡為OVS網橋的介面)

[root@openstack~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

NAME=eth0

DEVICETYPE=ovs

TYPE=OVSPort

OVS_BRIDGE=br-ex

ONBOOT=yes

BOOTPROTO=none

3)驗證OVS配置

[root@openstack~]# ovs-vsctl show

Bridge br-ex

Controller"tcp:127.0.0.1:6633"

is_connected:true

fail_mode:secure

Port br-ex

Interface br-ex

type:internal

Port phy-br-ex

Interface phy-br-ex

type:patch

options:{peer=int-br-ex}

Port"eth0"

Interface"eth0"

ovs_version:"2.5.0"

7 案例7:登錄openstack

7.1 問題

本案例要求通過Horizon完成以下操作:

修改/etc/httpd/conf.d/15-horizon_vhost.conf 配置文件,使其可以成功登錄openstack

7.2 步驟

實現此案例需要按照如下步驟進行。

步驟一:瀏覽器訪問openstack

1)瀏覽器訪問

[root@openstack~]# firefox192.168.1.10//訪問失敗

2)需要改配置文件並重新載入

[root@openstack~]#

[root@openstack conf.d]# vi15-horizon_vhost.conf

35WSGIProcessGroup apache

36WSGIApplicationGroup%{GLOBAL}//添加這一行

[root@openstack conf.d]# apachectl  graceful//重新載入配置文件

3)瀏覽器訪問,出現頁面,如圖-6所示:

圖-6

3)查看用戶名和密碼

[root@openstack conf.d]# cd

[root@openstack~]# ls

answer.ini  keystonerc_admin//keystonerc_admin生成的文件,裡面有用戶名和密碼

[root@openstack~]# cat keystonerc_admin

unset OS_SERVICE_TOKEN

exportOS_USERNAME=admin//用戶名

exportOS_PASSWORD=a//密碼

exportOS_AUTH_URL=http://192.168.1.10:5000/v2.0

exportPS1='[\u@\h \W(keystone_admin)]\$ '

exportOS_TENANT_NAME=admin

exportOS_REGION_NAME=RegionOne

4)在火狐瀏覽器中輸入用戶名和密碼,登錄後頁面如圖-7所示:

圖-7

安裝openstack可能會出現的錯誤以及排錯方法

1)ntp時間不同步,如圖-2所示:

圖-2

解決辦法:查看ntp時間伺服器,是否出現*號,若沒有,查看配置文件,配置ntp伺服器步驟在案例3,可以參考

[root@room9pc01~]# chronyc sources-v//出現*號代表NTP時間可用

^*120.25.115.20261762-753us[-7003us]+/-24ms

[root@openstack~]# chronyc sources-v

^*192.168.1.25439377504+50us[-20us]+/-24ms

[root@nova~]# chronyc sources-v

^*192.168.1.25439377159-202us[-226us]+/-24ms

2)網橋名稱寫錯,如圖-3所示:

圖-3

解決辦法:檢查配置文件

[root@openstack~]# vim answer.ini

...

921CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0

//br-ex橋的名稱與eth0連接,管理eth0,網橋與哪個物理網卡連接

...

3)若/root/.ssh/id_rsa.pub,提示password,同樣是配置文件沒有寫對,如圖-4所示:

圖-4

4)yum源沒有配置正確,如圖-5所示:

圖-5

解決辦法:檢查yum是否為10853個軟體包,查看是否是yum源沒有配置正確,之後安裝oprnstack-dashboard

5)出現Cannot allocate memory,如圖-6所示:

圖-6

解決辦法:

內存不足,重新啟動主機

6)出現/usr/bin/systemctl start openvswith ... falied,說明是ssse3指令集的錯誤,如圖-7所示:

圖-7

解決辦法:編輯openstack的xml文件,在裡面添加

<cpu mode='host-passthrough'>

</cpu>

7)若出現 Could not prefetch... 『openstack』。 如圖-8所示:

圖-8

配置文件裡面有中文符號

9)訪問openstack出錯

圖-9

沒有修改Apache配置文件

4)創建名為myproject的項目

[root@openstack~]# source~/keystonerc_admin  //初始化環境變數

[root@openstack~(keystone_admin)]# openstack project create myproject

+-------------+----------------------------------+

|Field|Value|

+-------------+----------------------------------+

|description|None|

|enabled|True|

|id||

|name|myproject|

+-------------+----------------------------------+

5)查看項目信息

[root@openstack~(keystone_admin)]# openstack project list

+----------------------------------+-----------+

|ID|Name|

+----------------------------------+-----------+

||services|

||admin|

||myproject|

+----------------------------------+-----------+

6)更新vcpu配額為30

[root@openstack~(keystone_admin)]# nova quota-update--cores30myproject

7)刪除myproject

[root@openstack~(keystone_admin)]# openstack projectdeletemyproject

『肆』 openstack neutron網路介紹

由於網路部分出現了許多得新名詞。將從整體到分部細致講解。

來源於網路得一張圖

如圖所示,連成了一條線。重要得如何實現互聯,接下來以表象論證這張圖。

最好將圖放在一邊,邊看邊對照圖。
這里先介紹從虛擬機訪問外網。埠A開始:

表現出來就是虛擬機有張網卡A。

查詢此虛擬機得子網ip為 10.1.1.5,以及所在節點,記住這個節點。

通過子網ip查詢到埠id為 b65c1085-a971-4333-82dc-57012e9be490
記住這個id

圖中A與B互聯,意味著A與B一定具有某種映射關系。

若沒有此命令則安裝: yum install -y bridge-utils
可以看到這個id對應的tap設備!

veth pair是什麼?後面再介紹。

由圖可知,埠B(qvbXXX)和埠C(tapXXX)在同一個linux網橋上。它們倆互通了。

埠D在ovs網橋上。C和D的互聯是veth pair的特性。

由圖可以看出,qvoXXX在ovs網橋上,qvb在linux網橋上。它們之間的互聯是veth pair的特性,它們就像一根導線的兩端。

ovs查詢命令:

這里可以看到3種網橋: br-int、br-tun、br-ex。這里有個印象就好。
仔細的查看一下,可以看到qvoXXX在br-int網橋上。
至此D埠也找到了

E、F埠通過ovs網橋自身連接。
ovs-vsctl show 可以看到兩個patch類型的埠,用於連接br-int和br-tun。類似於veth pair。

ovs-vsctl show 可以在br-tun網橋上看到vxlan類型的埠,並註明本地ip和remote ip,通過此類型埠,將不同的物理環境互聯,對於上層好似就一個網橋。再者br-tun網橋還與br-int互聯,這意味,對於再上一層的應用,似乎只有一個br-int。

和【E】【F】相同。

此時攜帶源ip為子網的流量到達M埠,而L埠得網段為外網網段,因此M網段的流量此時無法直接進入L埠。藉助router(網路命名空間),使用iptables,將M埠流量的源ip轉換為外網網段。此時流量可進入L埠從而訪問外網。(M與N之間連通性非網路對實現,而是ovs tap設備實現。網路對的一個明顯特徵為 ip a 可以看到@符號連接兩個埠)

找到虛擬機所在租戶的路由id
本機為 894699dc-bc60-4b5e-b471-e95afa20f1d7

根據路由id找到網路命名空間
在所有節點上執行如下命令,找到對應id的qrouter
ip netns
本環境為:qrouter-894699dc-bc60-4b5e-b471-e95afa20f1d7

在此網路命名空間的節點上執行(如下命令意義為進入網路命名空間):

此時已進入網路命名空間。

查看ip

可以看到qg和qr開頭的網卡名稱。qg為彈性ip地址組,qr為子網網關。此時在虛擬機所在節點上查詢ovs網橋,可以在br-int看到與此同名的qg和qr埠。
由於是源地址轉換,因此先路由再轉換源ip(iptables規則)。
查看路由規則:
route -n

第一條可以看到外網的網關,通過qg網卡發送,規則正好匹配。
選好路由規則之後,進行更改源ip。

可以看到 neutron-l3-agent-float-snat(配置了彈性ip才會出現)、neutron-l3-agent-snat。因為neutron-l3-agent-float-snat優先順序高於neutron-l3-agent-snat,如果沒有配置彈性ip,則會將源ip改為該路由的外網ip;如果配置了彈性ip則會將源ip改為彈性ip。

總的來說,流量從qr出去繞了一圈(網路命名空間)改變了源ip又從qg進入,然後通過ovs patch進入br-ex。

br-ex如何與外網連接的呢?進入網路節點查看ovs網橋:

可以看到 br-ex與em3網卡互聯。因此流量直接走em3出去。還記得你這張網卡是幹嘛的嗎?是那張不配置ip的物理網卡!

通過iptables的prerouting可以看出,在進入之前修改了目的彈性ip為子網ip,後經路由轉發。另,網路命名空間可以通過arp發現子網ip與mac地址的對應關系。

lbaas,負載均衡
dhcp,dhcp服務。

通過前面說的br-tun 實現。如果沒有單獨劃分網路,則使用管理網網段。若單獨配置了tunnel網路,則br-tun里的網路使用tunnel網路。
br-tun 里定義了vxlan,並且指定了 local_ip、remote_ip。根據這兩個ip以及路由信息,可以確定 br-tun 通過哪張網卡與外部通信。也是因此可以為tunnel配置專用網卡。

都是通過iptables實現。
防火牆:qrouter網路命名空間中得iptables實現。
安全組:虛擬機所在得宿主機得iptables實現。

可以看到防火牆規則。

可以看到對應埠id得安全組規則。

已經知道了qrouter 利用nat表實現彈性ip與子網ip之間的映射,但是如何從外部訪問到qg網卡的?
這里做了一個簡單的模擬操作:
https://www.jianshu.com/p/44e73910c241

dnsmasq 實現。
kolla-ansible 的dnsmasq日誌相對路徑參考:neutron/dnsmasq.log(可通過dnsmasq.conf 找到日誌路徑)
日誌中可以看到dhcp的詳細過程。過程參考如下:

文檔參考:
https://docs.openstack.org/neutron/stein/admin/intro-basic-networking.html#dhcp

dhcp也通過網路命名空間實現,名稱由網路id決定。dhcp可以擁有多個,通過neutron.conf 中 dhcp_agents_per_network 決定。

另:centos7虛擬機中的 /var/log/messages 也記錄了dhcp相關操作。

network qos 可以理解為網路流量限制,官方名稱:網路質量即服務
本環境通過openvswitch實現的qos。

如上圖為設置的 帶寬限制規則。

根據埠號查看流表,命令參考:

上圖標記的104就為dscp mark 乘 4 的結果,乘4是一種規范。

https://docs.openstack.org/neutron/queens/admin/deploy-ovs.html

『伍』 什麼是OpenStack



本文詳細介紹了Openstack的網路原理和實現,主要內容包括:Neutron的網路架構及網路模型還有neutron虛擬化的實現和對二三層網橋的理解。

一、Neutron概述

Neutron是一個用Python寫的分布式軟體項目,用來實現OpenStack中的虛擬網路服務,實現軟體定義網路。Neutron北向有自己的REST API,中間有自己的業務邏輯層,有自己的DB和進程之間通訊的消息機制。同時Neutron常見的進程包括Neutron-server和Neutron-agent,分布式部署在不同的操作系統。

OpenStack發展至今,已經經歷了20個版本。雖然版本一直在更替,發展的項目也越來越多,但是Neutron作為OpenStack三大核心之一,它的地位是不會動搖的。只不過當初的Neutron也只是Nova項目的一個模塊而已,到F版本正式從中剝離,成為一個正式的項目。

從Nova-Network起步,經過Quantum,多年的積累Neutron在網路各個方面都取得了長足的發展。其主要的功能為:

(1)支持多租戶隔離

(2)支持多種網路類型同時使用

(3)支持隧道技術(VXLAN、GRE)

(4)支持路由轉發、SNAT、DNAT技術

(5)支持Floating IP和安全組

多平面租戶私有網路

圖中同時有VXLAN和VLAN兩種網路,兩種網路之間互相隔離。租戶A和B各自獨佔一個網路,並且通過自己的路由器連接到了外部網路。路由器為租戶的每個虛擬機提供了Float IP,完成vm和外網之間的互相訪問。

二、Neutron架構及網路模型

1、Neutron架構

Neutron-sever可以理解為類似於nova-api那樣的一個專門用來接收API調用的組件,負責將不同的api發送到不同Neutron plugin。

Neutron-plugin可以理解為不同網路功能實現的入口,接收server發來的API,向database完成一些注冊信息。然後將具體要執行的業務操作和參數通知給對應的agent來執行。

Agent就是plugin在設備上的代理,接受相應的plugin通知的業務操作和參數,並轉換為具體的命令行操作。

總得來說,server負責交互接收請求,plugin操作資料庫,agent負責具體的網路創建。

2、Neutron架構之Neutron-Server

(1)Neutron-server的本質是一個Python Web Server Gateway Interface(WSGI),是一個Web框架。

(2)Neutron-server接收兩種請求:

REST API請求:接收REST API請求,並將REST API分發到對應的Plugin(L3RouterPlugin)。

RPC請求:接收Plugin agent請求,分發到對應的Plugin(NeutronL3agent)。

3、Neutron架構之Neutron-Plugin

Neutron-plugin分為Core-plugin和Service-plugin。

Core-plugin:ML2負責管理二層網路,ML2主要包括Network、Subnet、Port三類核心資源,對三類資源進行操作的REST API是原生支持的。

Service-plugin:實現L3-L7網路,包括Router、Firewall、VPN。

4、Neutron架構之Neutron-Agent

(1)Neutron-agent配置的業務對象是部署在每一個網路節點或者計算節點的網元。

(2)網元區分為PNF和VNF:

PNF:物理網路功能,指傳統的路由器、交換機等硬體設備

VNF:虛擬網路功能,通過軟體實現的網路功能(二層交換、三層路由等)

(3)Neutron-agent三層架構如下圖:

Neutron-agent架構分為三層,北向為Neutron-server提供RPC介面,供Neutron server調用,南向通過CLI協議棧對Neutron VNF進行配置。在中間會進行兩種模型的轉換,從RPC模型轉換為CLI模型。

5、Neutron架構之通信原理

(1)Neutron是OpenStack的核心組件,官網給出Neutron的定義是NaaS。

(2)Naas有兩層含義:

對外介面:Neutron為Network等網路資源提供了RESTful API、CLI、GUI等模型。

內部實現:利用Linux原生或者開源的虛擬網路功能,加上硬體網路,構建網路。

Neutron接收到API請求後,交由模塊WSGI進行初步的處理,然後這個模塊通過Python API調用neutron的Plugin。Plugin做了相應的處理後,通過RPC調用Neutron的Agent組件,agent再通過某種協議對虛擬網路功能進行配置。其中承載RPC通信的是AMQP server,在部署中常用的開源軟體就是RabbitMQ

6、Neutron架構之控制節點網路模型

控制節點沒有實現具體的網路功能,它對各種虛擬設備做管理配合的工作。

(1)Neutron:Neutron-server核心組件。

(2)API/CLI:Neutron進程通過API/CLI介面接收請求。

(3)OVS Agent:Neutron通過RPC協議與agent通信。

控制節點部署著各種服務和Neutron-server,Neutron-server通過api/cli介面接收請求信息,通過RPC和Agent進行交互。Agent再調用ovs/linuxbridge等網路設備創建網路。

7、Neutron架構之計算節點網路模型

(1)qbr:Linux Bridge網橋

(2)br-int:OVS網橋

(3)br-tun:OVS隧道網橋

(4)VXLAN封裝:網路類型的轉變

8、Neutron架構之網路節點網路模型

網路節點部署了Router、DHCP Server服務,網橋連接物理網卡。

(1)Router:路由轉發

(2)DHCP: 提供DNS、DHCP等服務。

(3)br-ex: 連接物理網口,連接外網

三、Neutron虛擬化實現功能及設備介紹

1、Neutron虛擬化實現功能

Neutron提供的網路虛擬化能力包括:

(1)二層到七層網路的虛擬化:L2(virtual Switch)、L3(virtual Router 和 LB)、L47(virtual Firewall )等

(2)網路連通性:二層網路和三層網路

(3)租戶隔離性

(4)網路安全性

(5)網路拓展性

(6)REST API

(7)更高級的服務,包括 LBaaS,FWaaS,VPNaaS 等

2、Neutron虛擬化功能之二層網路

(1)按照用戶許可權創建網路:

Provider network:管理員創建,映射租戶網路到物理網路

Tenant network:租戶創建的普通網路

External network:物理網路

(2)按照網路類型:

Flat network:所有租戶網路在一個網路中

Local network:只允許在伺服器內通信,不通外網

VLAN network:基於物理VLAN實現的虛擬網路

VXLAN network:基於VXLAN實現的虛擬網路

3、Neutron虛擬化實現功能之租戶隔離

Neutron是一個支持多租戶的系統,所以租戶隔離是Neutron必須要支持的特性。

(1)租戶隔離三種含義:管理面隔離、數據面的隔離、故障面的隔離。

(2)不同層次租戶網路的隔離性

租戶與租戶之間三層隔離

同一租戶不同網路之間二層隔離

同一租戶同一網路不同子網二層隔離

(3)計算節點的 br-int 上,Neutron 為每個虛機連接 OVS 的 access port 分配了內部的 VLAN Tag。這種 Tag 限制了網路流量只能在 Tenant Network 之內。

(4)計算節點的 br-tun 上,Neutron 將內部的 VLAN Tag 轉化為 VXLAN Tunnel ID,然後轉發到網路節點。

(5)網路節點的 br-tun 上,Neutron 將 VXLAN Tunnel ID 轉發了一一對應的 內部 VLAN Tag,使得 網路流被不同的服務處理。

(6)網路節點的 br-int 上連接的 DHCP 和 L3 agent 使用 Linux Network Namespace 進行隔離。

4、Neutron虛擬化實現功能之租戶網路安全

除了租戶隔離以外 Neutron還提供數據網路與外部網路的隔離性。

(1)默認情況下,所有虛擬機通過外網的流量全部走網路節點的L3 agent。在這里,內部的固定IP被轉化為外部的浮動IP地址

(1)Neutron還利用Linux iptables特性,實現其Security Group特性,從而保證訪問虛機的安全性

(3)Neutron利用網路控制節點上的Network Namespace中的iptables,實現了進出租戶網路的網路防火牆,從而保證了進出租戶網路的安全性。

5、Neutron虛擬化設備

(1)埠:Port代表虛擬網路交換機上的一個虛擬交換機埠

虛擬機的網卡連接到Port上就會擁有MAC地址和IP地址

(2)虛擬交換機:Neutron默認採用開源的Openvswitch,

同時還支持Linux Bridge

(3)虛擬路由器VR:

  • 路由功能
  • 一個VR只屬於一個租戶,租戶可以有多個VR
  • 一個VR可以有若干個子網
  • VR之間採用Namespace隔離

四、Neutron網橋及二三層網路理解

1、Neutron-Local-Bridge

僅用於測試;網橋沒有與物理網卡相連VM不通外網。

圖中創建了兩個local network,分別有其對應的qbr網橋。Vm123的虛擬網卡通過tap連接到qbr網橋上。其中2和3屬於同一個network可以通信,1屬於另一個網路不能和23進行通信。並且qbr網橋不連物理網卡,所以說local網路虛擬機只能同網路通信,不能連通外網。

2、Neutron-Flat-Bridge

  • Linux Bridge直接與物聯網卡相連
  • 每個Flat獨佔一個物理網卡
  • 配置文件添加響應mapping

Flat網路是在local網路的基礎上實現不同宿主機之間的二層互聯,但是每個flat network都會佔用一個宿主機的物理介面。其中qbr1對應的flatnetwork 連接 eth1 qbr2,兩個網路的虛機在物理二層可以互聯。其它跟local network類似。

3、Neutron-VLAN-Bridge

在基於linux bridge的vlan網路中,eht1物理網卡上創建了兩個vlan介面,1.1連接到qbr1網橋,1.2連接到了qbr2網橋。在這種情況下vm通過eth1.1或者eth1.2發送到eth1的包會被打上各自的vlan id。此時vm2和vm3屬於同一個network所以是互通的,vm與vm2和vm3不通。

4、Neutron-VXLAN-Bridge

這個是以Linux bridge作agent的Vxlan網路:

Vxlan網路比Vxlan網路多了個VXLAN隧道,在Openstack中創建好內部網路和實例後,agent就會在計算節點和網路節點創建一對vxlan vtep.組成隧道的兩個端點。

Vxlan連接在eth0網口。在網路節點多了兩個組件dhcp 和router,他們分別通過一對veth與qbr網橋連接在一起,多個dhcp和路由之間使用namesapce隔離,當vm產生ping包時,發往linux 網橋qbr1,通過網橋在vxlan12上封裝數據包,數據通過eth0網卡出計算節點到網路節點的eth0,在vxlan12解包。到達路由器之後經過nat地址轉換,從eth1出去訪問外網,由租戶網路到運營商網路再到外部網路。

5、Neutron-VLAN-OVS

與Linux bridge不同,openvswitch 不是通過eth1.1 eth1.2這樣的vlan介面來隔離不同的vlan,而是通過openvswitch的流表規則來指定如何對進出br-int的數據進行轉發,實現不同vlan的隔離。

圖中計算節點的所有虛擬機都連接在int網橋上,虛擬機分為兩個網路。Int網橋會對到來的數據包根據network的不同打上vlan id號,然後轉發到eth網橋,eth網橋直連物理網路。這時候流量就從計算節點到了網路節點。

網路節點的ehx int網橋的功能相似,多了一個ex網橋,這個網橋是管理提前創建好的,和物理網卡相連,ex網橋和int網橋之間通過一對patch-port相連,虛擬機的流量到達int網橋後經過路由到ex網橋。

6、Neutron-VXLAN-OVS

Vxlan的模型和vlan的模型十分相似,從表面上來看,他倆相比只有一個不同,vlan對應的是ethx網橋,而vxlan對應的是tun網橋。

在這里ethx和tun都是ovs網橋,所以說兩者的差別不是實現組件的差別而是組件所執行功能的差別,ethx執行的是普通二層交換機的功能,tun執行的是vxlan中的vtep的功能,圖中倆tun對應的介面ip就是vxlan的隧道終結點ip。所以說虛機的數據包在到達tun網橋之前是打的是vlan tag,而到達tun之後會發生網路類型的轉換,從vlan封裝為vxlan然後到達網路節點。而之前的vlan類型的網路,虛機數據包的類型一直都是vlan。

7、物理的二層與虛擬的二層(VLAN模式)

(1)物理的二層指的是:物理網路是二層網路,基於乙太網協議的廣播方式進行通信。

(2)虛擬的二層指的是:Neutron實現的虛擬網路也是二層網路(openstack的vm機所用的網路必須是大二層),也是基於乙太網協議的廣播方式進行通信,但毫無疑問的是該虛擬網路是依賴於物理的二層網路。

(3)物理二層+虛擬二層的典型代表:VLAN網路模式。

8、物理的三層與虛擬的二層(GRE模式與VXLAN模式)

(1)物理三層指的是:物理網路是三層網路,基於IP路由的方式進行通信。

(2)虛擬的二層指的是:Neutron實現的虛擬網路仍然是二層網路(openstack的vm機所用的網路必須是大二層),仍然是基於乙太網的廣播方式進行通信,但毫無疑問的是該虛擬機網路是依賴於物理的三層網路,這點有點類似於VPN的概念,根本原理就是將私網的包封裝起來,最終打上隧道的ip地址傳輸。

(3)物理三層+虛擬二層的典型代表:GRE模式與VXLAN模式。

熱點內容
javafor循環嵌套if 發布:2025-08-18 23:28:21 瀏覽:299
西裝配領演算法 發布:2025-08-18 23:26:38 瀏覽:501
ecshopsql漏洞 發布:2025-08-18 23:17:01 瀏覽:799
mac臨時文件夾 發布:2025-08-18 23:14:55 瀏覽:766
阿里雲搭建傳奇伺服器 發布:2025-08-18 23:14:06 瀏覽:454
硬體加密卡 發布:2025-08-18 23:08:17 瀏覽:988
農信交易密碼指的是什麼密碼 發布:2025-08-18 23:03:20 瀏覽:586
數組存儲空間 發布:2025-08-18 23:01:50 瀏覽:748
如解壓游戲 發布:2025-08-18 22:57:02 瀏覽:577
如何復制頁游密碼 發布:2025-08-18 22:49:13 瀏覽:387