一、 網絡服務概述
Networking(neutron),允許創建、插入接口設備,這些設備由其他的OpenStack服務管理。插件式的實現可以容納不同的網絡設備和軟件,為OpenStack架構與部署提供了靈活性。
它包含下列組件:
neutron-server
接收和路由API請求到合適的OpenStack網絡插件,以達到預想的目的。
OpenStack Networking plug-ins and agents(OpenStack網絡插件和代理)
插拔端口,創建網絡和子網,以及提供IP地址,這些插件和代理依賴於供應商和技術而不同,OpenStack網絡基於插件和代理為Cisco 虛擬和物理交換機、NEC OpenFlow產品,Open vSwitch,Linux bridging以及VMware NSX 產品穿線搭橋。
常見的代理L3(3層),DHCP(動態主機IP地址),以及插件代理。
Messaging queue(消息隊列)
大多數的OpenStack Networking安裝都會用到,用於在neutron-server和各種各樣的代理進程間路由信息。也為某些特定的插件扮演數據庫的角色,以存儲網絡狀態
OpenStack網絡主要和OpenStack計算交互,以提供網絡連接到它的實例。
二、 網絡概念
OpenStack網絡(neutron)管理OpenStack環境中所有虛擬網絡基礎設施(VNI),物理網絡基礎設施(PNI)的接入層。OpenStack網絡允許租戶創建包括像 firewall,load balancer和virtual private network(VPN)等這樣的高級虛擬網絡拓撲。
網絡服務提供網絡,子網以及路由這些對象的抽象概念。每個抽象概念都有自己的功能,可以模擬對應的物理設備:網絡包括子網,路由在不同的子網和網絡間進行路由轉發。
對於任意一個給定的網絡都必須包含至少一個外部網絡。不像其他的網絡那樣,外部網絡不僅僅是一個定義的虛擬網絡。相反,它代表了一種OpenStack安裝之外的能從物理的,外部的網絡訪問的視圖。外部網絡上的IP地址可供外部網絡上的任意的物理設備所訪問
外部網絡之外,任何 Networking 設置擁有一個或多個內部網絡。這些軟件定義的網絡直接連接到虛擬機。僅僅在給定網絡上的虛擬機,或那些在通過接口連接到相近路由的子網上的虛擬機,能直接訪問連接到那個網絡上的虛擬機。
如果外部網絡想要訪問實例或者相反實例想要訪問外部網絡,那么網絡之間的路由就是必要的了。每一個路由都配有一個網關用於連接到外部網絡,以及一個或多個連接到內部網絡的接口。就像一個物理路由一樣,子網可以訪問同一個路由上其他子網中的機器,並且機器也可以訪問路由的網關訪問外部網絡。
另外,你可以將外部網絡的IP地址分配給內部網絡的端口。不管什么時候一旦有連接連接到子網,那個連接被稱作端口。你可以給實例的端口分配外部網絡的IP地址。通過這種方式,外部網絡上的實體可以訪問實例.
網絡服務同樣支持安全組。安全組允許管理員在安全組中定義防火牆規則。一個實例可以屬於一個或多個安全組,網絡為這個實例配置這些安全組中的規則,阻止或者開啟端口,端口范圍或者通信類型。
每一個Networking使用的插件都有其自有的概念。雖然對操作VNI和OpenStack環境不是至關重要的,但理解這些概念能幫助你設置Networking。所有的Networking安裝使用了一個核心插件和一個安全組插件(或僅是空操作安全組插件)。另外,防火牆即服務(FWaaS)和負載均衡即服務(LBaaS)插件是可用的。
三、 安裝和配置控制節點
接下來操作在控制節點上操作
1. 先決條件
在配置OpenStack網絡服務之前,必須創建一個數據庫,服務憑證和API端點。
① 創建數據庫,完成以下操作
mysql -u root –p
create database neutron;
grant all privileges on neutron.* to 'neutron'@'localhost' identified by 'neutron';
grant all privileges on neutron.* to 'neutron'@'%' identified by 'neutron';
flush privileges;
exit
② 獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限:
. admin-openrc
③ 要創建服務的憑證,完成以下步驟:
創建neutron用戶:
openstack user create --domain default --password-prompt neutron
把neutron加到admin角色里:
openstack role add --project service --user neutron admin
創建neutron服務實體
openstack service create --name neutron --description "OpenStack Networking" network
④ 創建網絡服務API端點:
openstack endpoint create --region RegionOne network public http://controller:9696
openstack endpoint create --region RegionOne network internal http://controller:9696
openstack endpoint create --region RegionOne network admin http://controller:9696
2. 配置網絡選項
可以部署網絡服務使用選項1和選項2兩種架構中的一種來部署網絡服務。
選項1采用盡可能簡單的架構進行部署,只支持實例連接到公有網絡(外部網絡)。沒有私有網絡(個人網絡),路由器以及浮動IP地址。只有admin或者其他特權用戶才可以管理公有網絡
選項2在選項1的基礎上多了layer-3服務,支持實例連接到私有網絡。demo或者其他沒有特權的用戶可以管理自己的私有網絡,包含連接公網和私網的路由器。另外,浮動IP地址可以讓實例使用私有網絡連接到外部網絡,
例如互聯網
典型的私有網絡一般使用覆蓋網絡。覆蓋網絡,例如VXLAN包含了額外的數據頭,這些數據頭增加了開銷,減少了有效內容和用戶數據的可用空間。在不了解虛擬網絡架構的情況下,實例嘗試用以太網 最大傳輸單元 (MTU) 1500字節發送數據包。網絡服務會自動給實例提供正確的MTU的值通過DHCP的方式。但是,一些雲鏡像並沒有使用DHCP或者忽視了DHCP MTU選項,要求使用元數據或者腳本來進行配置
在此選擇選項2部署。選項1網絡點擊
接下來安裝和配置網絡組件在控制器節點上操作,部署高級網絡。
① 安裝網絡組建
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y
② 配置服務組件
編輯/etc/neutron/neutron.conf文件和完成以下操作:
在[database]部分,配置數據庫連接
[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
在[DEFAULT]部分,激活二層插件,路由服務,浮動ip服務:
[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
在[DEFAULT]部分,配置 rabbitMQ信息隊列接入:
[DEFAULT]
transport_url = rabbit://openstack:RABBIT_PASS@controller
在[DEFAULT]和[keystone_authtoken]部分,配置身份服務接入:
[DEFAULT]
auth_strategy = keystone
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
在[DEFAULT]和[nova]部分,配置網絡服務通知計算的網絡拓撲變化:
[DEFAULT]
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[nova]
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS
在[oslo_concurrency]部分,配置鎖定路徑
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
③ 配置二層網絡插件
使用Linux橋接制構建ML2層 虛擬網絡基礎設施的實例。
編輯/etc/neutron/plugins/ml2/ml2_conf.ini文件和完成以下操作:
在[ml2]部分,激活flat、vlan、vxlan網絡:
[ml2]
type_drivers = flat,vlan,vxlan
在[ml2]部分,激活VXLAN自助服務網絡:
[ml2]
tenant_network_types = vxlan
在[ml2]部分,激活linux橋和二層網絡:
[ml2]
mechanism_drivers = linuxbridge,l2population
注意:linux橋只支持VXLAN覆蓋網絡。
在[ml2]部分,激活端口安全擴展機制:
[ml2]
extension_drivers = port_security
在[ml2_type_flat]部分,配置公共虛擬網絡為flat網絡:
[ml2_type_flat]
flat_networks = provider
在[ml2_type_vxlan]部分,為私有網絡配置VXLAN網絡識別的網絡范圍:
[ml2_type_vxlan]
vni_ranges = 1:1000
在[securitygroup]部分,激活ipset提高安全組的效率規則:
[securitygroup]
enable_ipset = true
④ 配置linux bridge agent
Linuxbridge代理為實例建立layer-2虛擬網絡並且處理安全組規則。
編輯/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件完成以下操作:
在[linux_bridge]部分,配置公共虛擬網絡和公共物理網絡接口對應起來:
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
把PROVIDER_INTERFACE_NAME換成物理網卡的名字:也就是第二塊網卡名字:eno33554960
在[vxlan]部分,啟用VXLAN覆蓋網絡,配置覆蓋網絡的物理網絡接口的ip地址,和啟用二層網絡:
[vxlan]
enable_vxlan = True
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = True
把OVERLAY_INTERFACE_IP_ADDRESS替換成覆蓋網絡的底層物理網絡接口ip地址,這個例子中使用管理網絡接口和其他節點建立流量隧道。因此替換成管理接口ip地址:10.0.0.11
在[securitygroup]部分,激活安全組和配置linux橋 iptables防火牆:
⑤ 配置三層網絡代理
三層網絡為私有虛擬網絡提供路由和NAT服務。
編輯/etc/neutron/l3_agent.ini文件和配置完成以下操作:
在[DEFAULT]部分,配置linux橋接口驅動和外部網絡橋:
[DEFAULT]
interface_driver = linuxbridge
⑥ 配置dhcp代理
DHCP代理為虛擬網絡提供dhcp服務。
編輯/etc/neutron/dhcp_agent.ini文件和完成以下操作。
在[DEFAULT]部分,配置linux bridge接口驅動,dhcp驅動並啟用隔離元數據,這樣在公共網絡上的實例就可以通過網絡來訪問元數據:
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
3. 配置元數據代理
元數據代理提供配置信息,如憑證實例。
編輯/etc/neutron/metadata_agent.ini文件和完成以下操作:
在[DEFAULT]部分,配置元數據主機以及共享密碼:
[DEFAULT]
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET
(METADATA_SECRET代表為元數據主機設置的新密鑰:這里是metadata)
4. 為計算節點配置網絡服務
編輯/etc/nova/nova.conf文件執行以下操作:
在[neutron]部分,配置訪問參數,激活元數據代理和配置密鑰:
[neutron]
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS #就是用戶neutron的密碼
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
#METADATA_SECRET:剛才設置的元數據主機密碼
5. 完成安裝
① 網絡服務初始化腳本需要一個超鏈接 /etc/neutron/plugin.ini指向ML2插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini。如果超鏈接不存在,使用下面的命令創建它:
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
② 同步數據庫:
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
③ 重啟計算api服務:
systemctl restart openstack-nova-api.service
④ 設置network服務啟動和開機啟動
systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
選擇網絡選項2,高級網絡 還需要啟動網絡三層模塊:
systemctl enable neutron-l3-agent.service
systemctl start neutron-l3-agent.service
四、 安裝和配置計算節點
計算節點處理連接和安全組的實例。
接下來的操作在計算節點上操作
1. 安裝組件
yum install openstack-neutron-linuxbridge ebtables ipset -y
2. 配置通用組件
網絡常見的組件配置包括身份驗證機制、消息隊列和插件。
編輯/etc/neutron/neutron.conf文件完成以下操作:
在[database]部分,注釋掉任何連接選項,因為計算節點不直接訪問數據庫。(這里默認安裝也是什么都沒有,但是最好檢查一下。)
在[DEFAULT]部分,配置RabbitMQ消息隊列接入:
[DEFAULT]
transport_url = rabbit://openstack:RABBIT_PASS@controller
在[DEFAULT]和[keystone_authtoken]部分,配置認證服務接入:
[DEFAULT]
auth_strategy = keystone
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
在[oslo_concurrency]部分,配置鎖定路徑:
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
3. 配置網絡選項
網絡服務有兩種形式:公共網絡 和 私有網絡
這里配置網絡要和在控制節點配置的網絡一樣,選擇私有網絡進行配置。
配置linux bridge agent
Linuxbridge代理為實例建立layer-2虛擬網絡並且處理安全組規則。
編輯/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件完成以下操作:
在[linux_bridge]部分,將公共虛擬網絡和公共物理網絡接口對應起來:
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
# PROVIDER_INTERFACE_NAME :是服務器的第二塊網卡名字
在[vxlan]部分,啟用VXLAN覆蓋網絡,配置覆蓋網絡的物理網絡接口的IP地址,啟用二層交換功能:
[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
# OVERLAY_INTERFACE_IP_ADDRESS 管理接口的ip地址
在[securitygroup]部分,激活安全組和配置linux bridge iptables防護牆驅動:
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
4. 計算節點配置網絡服務
編輯/etc/nova/nova.conf文件完成以下操作:
在[neutron]部分,配置接入參數
[neutron]
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
5. 完成安裝
① 重啟計算服務
systemctl restart openstack-nova-compute.service
② 啟動linux bridge agent服務和設置開機啟動
systemctl enable neutron-linuxbridge-agent.service
systemctl start neutron-linuxbridge-agent.service
五、 核查操作
接下來操作在控制節點上操作
1. 獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限:
. admin-openrc
2. 列出加載的擴展來驗證neutron-server進程是否正常啟動:
注意: 實際的輸出結果也許與本例有細微的差異。
openstack extension list –network
3. 驗證網絡配置:
列出代理以驗證啟動 neutron 代理是否成功:
openstack network agent list
輸出結果包括:控制節點上的4個代理和計算節點上的1個代理。
到現在,openstack環境已經包含了啟動一個基本實例的所有組件。
可以參考openstack命令行使用手冊進行操作使用openstack。