上面左邊是個人我的微信,如需進一步溝通,請加微信。 右邊是個人公衆號「Openstack私有云」,若有興趣,請關注。mysql
本章介紹如何使用提供商網絡或自助服務網絡選項安裝和配置網絡服務(Neutron)。linux
OpenStack Networking(Neutron)容許您建立並附加由其餘OpenStack服務管理的接口設備到網絡。能夠實現插件以適應不一樣的網絡設備和軟件,爲OpenStack架構和部署提供靈活性。sql
它包括如下組件:數據庫
2 neutron-serverapi
接受並將API請求路由到相應的OpenStack Networking插件以進行操做。安全
2 OpenStack網絡插件和代理服務器
插拔端口,建立網絡或子網,並提供IP尋址。這些插件和代理根據特定雲中使用的供應商和技術而有所不一樣。OpenStack網絡兼容思科虛擬和物理交換機的插件和代理,NEC OpenFlow產品,Open vSwitch,Linux橋接器和VMware NSX產品。微信
通用代理是L3(第3層),DHCP(動態主機IP尋址)和插件代理。網絡
2 消息隊列架構
由大多數OpenStack Networking安裝使用,用於在Neutron服務器和各類代理之間路由信息。還充當數據庫來存儲特定插件的網絡狀態。
OpenStack Networking主要與OpenStack Compute進行交互,爲其實例提供網絡和鏈接。
OpenStack Networking(Neutron)管理虛擬網絡基礎架構(VNI)的全部網絡方面以及OpenStack環境中物理網絡基礎設施(PNI)的接入層方面。OpenStack Networking使項目可以建立高級虛擬網絡拓撲,其中可能包括防火牆,負載平衡器和虛擬專用網(***)等服務。
網絡提供網絡,子網和路由器做爲對象抽象。每一個抽象都具備模擬其物理對象的功能:網絡包含子網,路由器在不一樣子網和網絡之間路由流量。
任何給定的網絡設置至少有一個外部網絡。與其餘網絡不一樣,外部網絡不只僅是一個虛擬定義的網絡。相反,它表明了在OpenStack安裝以外可訪問的物理外部網絡的一個視圖。外部網絡上的IP地址能夠由外部網絡上的任何人訪問。
除了外部網絡,任何網絡設置都有一個或多個內部網絡。這些軟件定義的網絡直接鏈接到虛擬機。只有任何給定內部網絡上的虛擬機,或經過接口鏈接到相似路由器的子網上的虛擬機才能直接訪問鏈接到該網絡的虛擬機。
爲了外部網絡訪問虛擬機,反之亦然,須要網絡之間的路由器。每一個路由器都有一個鏈接到外部網絡的網關和鏈接到內部網絡的一個或多個接口。像物理路由器同樣,子網能夠訪問鏈接到同一路由器的其餘子網上的機器,機器能夠經過路由器的網關訪問外部網絡。
此外,您能夠將外部網絡上的IP地址分配給內部網絡上的端口。一旦鏈接到子網,該鏈接都稱爲端口。你能夠分配外部IP給VM的端口,這樣,外部網絡上的實體能夠訪問虛擬機。
網絡還支持安全組。安全組使管理員可以以組的形式定義防火牆規則。VM能夠屬於一個或多個安全組,而且Networking將這些安全組中的規則應用於阻止或取消阻止該VM的端口,端口範圍或流量類型。
網絡使用的每一個插件都有本身的概念。儘管操做VNI和OpenStack環境並不重要,但理解這些概念能夠幫助您設置網絡。全部網絡安裝使用核心插件和安全組插件(或只是No-Op安全組插件)。此外,還提供了防火牆即服務(FWaaS)和負載均衡器即服務(LBaaS)插件。
在配置OpenStack Networking(Neutron)服務以前,您必須建立一個數據庫,服務憑據和API端點。
一、要建立數據庫,請完成如下步驟:
使用數據庫訪問客戶端做爲root用戶鏈接到數據庫服務器:
$ mysql -u root -p
輸入admin憑據以訪問僅管理CLI命令:
$ . admin-openrc
二、要建立服務憑據,請完成如下步驟:
建立neutron用戶:
$ openstack user create --domain default --password-prompt neutron
User Password:
Repeat User Password:
將admin角色添加到neutron用戶:
$ 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
您可使用由選項1和2表示的兩種體系結構之一部署網絡服務。
選項1部署最簡單的可能架構,僅支持將實例附加到提供商(外部)網絡。沒有自助服務(私人)網絡,路由器或浮動IP地址。只有admin或其餘特權用戶能夠管理提供商網絡。
選項2增長了支持將實例附加到自助服務網絡的第3層服務的選項1。該demo或其餘非特權用戶能夠管理自助服務網絡,包括在自助服務和提供商網絡之間提供鏈接的路由器。此外,浮動IP地址提供與使用來自外部網絡(如Internet)的自助服務網絡的實例的鏈接。
自助服務網絡一般使用覆蓋網絡。覆蓋網絡協議(例如VXLAN)包括額外的頭部,能夠增長開銷並減小可用於有效載荷或用戶數據的空間。不知道虛擬網絡基礎架構,實例嘗試使用1500字節的默認以太網最大傳輸單元(MTU)發送數據包。網絡服務經過DHCP自動向實例提供正確的MTU值。可是,某些雲圖不使用DHCP或忽略DHCP MTU選項,並須要使用元數據或腳本進行配置。
選擇如下網絡選項之一來配置特定於其的服務。
v 網絡選項1:提供商網絡
v 網絡選項2:自助網絡
元數據代理向實例提供諸如憑據的配置信息。
編輯/etc/neutron/metadata_agent.ini文件並完成如下操做:
在[DEFAULT]節中,配置元數據主機和共享密鑰:
[DEFAULT]
# ...
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET
用METADATA_SECRET適當的密碼替換元數據代理。
編輯/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
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
替換NEUTRON_PASS爲neutron 身份服務中爲用戶選擇的密碼。
替換METADATA_SECRET您爲元數據代理選擇的密碼。
一、網絡服務初始化腳本指望/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
三、從新啓動Compute API服務:
# systemctl restart openstack-nova-api.service
四、啓動網絡服務並將其配置爲在系統啓動時啓動。
對於兩種網絡選項:
# 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,還啓用第3層服務:
# systemctl enable neutron-l3-agent.service
# systemctl start neutron-l3-agent.service
在控制器節點上安裝和配置網絡組件。
1.1.1.1.3.6.1. 安裝組件
# yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-linuxbridge ebtables
1.1.1.1.3.6.2. 配置服務器組件
網絡服務器組件配置包括數據庫,身份驗證機制,消息隊列,拓撲更改通知和插件。
編輯/etc/neutron/neutron.conf文件並完成如下操做:
在該[database]部分中,配置數據庫訪問:
[database]
# ...
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
替換NEUTRON_DBPASS爲數據庫選擇的密碼。
在[DEFAULT]節中,啓用模塊化第2層(ML2)插件並禁用其餘插件:
[DEFAULT]
# ...
core_plugin = ml2
service_plugins =
在[DEFAULT]節中,配置RabbitMQ 消息隊列訪問:
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
替換RABBIT_PASS您爲openstackRabbitMQ中的賬戶選擇的密碼 。
在[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
替換NEUTRON_PASS爲neutron 身份服務中爲用戶選擇的密碼。
在[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
替換NOVA_PASS爲nova 身份服務中爲用戶選擇的密碼。
在[oslo_concurrency]部分中,配置鎖定路徑:
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
1.1.1.1.3.6.3. 配置模塊化二層(ML2)插件
ML2插件使用Linux橋機制爲實例構建第2層(橋接和交換)虛擬網絡基礎架構。
編輯/etc/neutron/plugins/ml2/ml2_conf.ini文件並完成如下操做:
在[ml2]節中,啓用平面和VLAN網絡:
[ml2]
# ...
type_drivers = flat,vlan
在[ml2]節中,禁用自助服務網絡:
[ml2]
# ...
tenant_network_types =
在[ml2]節中,啓用Linux橋機制:
[ml2]
# ...
mechanism_drivers = linuxbridge
警告:配置ML2插件後,刪除type_drivers選項中的值 可能會致使數據庫不一致。
在[ml2]節中,啓用端口安全擴展驅動程序:
[ml2]
# ...
extension_drivers = port_security
在[ml2_type_flat]部分中,將提供商虛擬網絡配置爲平面網絡:
[ml2_type_flat]
# ...
flat_networks = provider
在[securitygroup]節中,啓用ipset以提升安全組規則的效率:
[securitygroup]
# ...
enable_ipset = true
1.1.1.1.3.6.4. 配置Linux橋接器代理
Linux橋接器代理爲實例構建第2層(橋接和交換)虛擬網絡基礎架構,並處理安全組。
編輯/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件並完成如下操做:
在[linux_bridge]節中,將提供商虛擬網絡映射到提供商物理網絡接口:
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
替換PROVIDER_INTERFACE_NAME爲底層提供商物理網絡接口的名稱。
在[vxlan]節中,禁用VXLAN覆蓋網絡:
[vxlan]
enable_vxlan = false
在[securitygroup]節中,啓用安全組並配置Linux橋iptables防火牆驅動程序:
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
1.1.1.1.3.6.5. 配置DHCP代理
DHCP代理爲虛擬網絡提供DHCP服務。
編輯/etc/neutron/dhcp_agent.ini文件並完成如下操做:
在[DEFAULT]節中,配置Linux橋接器驅動程序Dnsmasq DHCP驅動程序,並啓用隔離元數據,以便提供商網絡上的實例能夠經過網絡訪問元數據:
[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
在控制器節點上安裝和配置網絡組件。
1.1.1.1.3.7.1. 安裝組件
# yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-linuxbridge ebtables
1.1.1.1.3.7.2. 配置服務器組件
編輯/etc/neutron/neutron.conf文件並完成如下操做:
在[database]部分中,配置數據庫訪問:
[database]
# ...
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
替換NEUTRON_DBPASS爲數據庫選擇的密碼。
在[DEFAULT]節中,啓用模塊化第2層(ML2)插件,路由器服務和重疊的IP地址:
[DEFAULT]
# ...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
在[DEFAULT]節中,配置RabbitMQ 消息隊列訪問:
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
替換RABBIT_PASS您爲openstackRabbitMQ中的賬戶選擇的密碼 。
在[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
替換NEUTRON_PASS爲neutron 身份服務中爲用戶選擇的密碼。
在[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
替換NOVA_PASS爲nova 身份服務中爲用戶選擇的密碼。
在[oslo_concurrency]部分中,配置鎖定路徑:
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
1.1.1.1.3.7.3. 配置模塊化二層(ML2)插件
ML2插件使用Linux橋機制爲實例構建第2層(橋接和交換)虛擬網絡基礎架構。
編輯/etc/neutron/plugins/ml2/ml2_conf.ini文件並完成如下操做:
在[ml2]節中,啓用平面,VLAN和VXLAN網絡:
[ml2]
# ...
type_drivers = flat,vlan,vxlan
在[ml2]節中,啓用VXLAN自助服務網絡:
[ml2]
# ...
tenant_network_types = vxlan
在[ml2]節中,啓用Linux Bridge和第2層人口機制:
[ml2]
# ...
mechanism_drivers = linuxbridge,l2population
警告:配置ML2插件後,刪除type_drivers選項中的值 可能會致使數據庫不一致。
注意:Linux Bridge代理僅支持VXLAN覆蓋網絡。
在[ml2]節中,啓用端口安全擴展驅動程序:
[ml2]
# ...
extension_drivers = port_security
在[ml2_type_flat]部分中,將提供商虛擬網絡配置爲平面網絡:
[ml2_type_flat]
# ...
flat_networks = provider
在[ml2_type_vxlan]節中,配置自助網絡的VXLAN網絡標識符範圍:
[ml2_type_vxlan]
# ...
vni_ranges = 1:1000
在[securitygroup]節中,啓用ipset以提升安全組規則的效率:
[securitygroup]
# ...
enable_ipset = true
1.1.1.1.3.7.4. 配置Linux橋接器代理
Linux橋接器代理爲實例構建第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地址,並啓用第2層羣:
[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
替換OVERLAY_INTERFACE_IP_ADDRESS處理覆蓋網絡的底層物理網絡接口的IP地址。示例架構使用管理接口將流量隧道傳送到其餘節點。所以,替換OVERLAY_INTERFACE_IP_ADDRESS控制器節點的管理IP地址。
在[securitygroup]節中,啓用安全組並配置Linux橋iptables防火牆驅動程序:
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
1.1.1.1.3.7.5. 配置第三層代理
第三層(L3)代理爲自助虛擬網絡提供路由和NAT服務。
編輯/etc/neutron/l3_agent.ini文件並完成如下操做:
在[DEFAULT]節中,配置Linux Bridge接口驅動程序和外部網橋:
[DEFAULT]
# ...
interface_driver = linuxbridge
1.1.1.1.3.7.6. 配置DHCP代理
DHCP代理爲虛擬網絡提供DHCP服務。
編輯/etc/neutron/dhcp_agent.ini文件並完成如下操做:
在[DEFAULT]節中,配置Linux橋接器驅動程序Dnsmasq DHCP驅動程序,並啓用隔離元數據,以便提供商網絡上的實例能夠經過網絡訪問元數據:
[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
計算節點處理實例的鏈接和安全組。
# yum install openstack-neutron-linuxbridge ebtables ipset
網絡公共組件配置包括身份驗證機制,消息隊列和插件。
編輯/etc/neutron/neutron.conf文件並完成如下操做:
在[database]節中,註釋掉任何connection選項,由於計算節點不直接訪問數據庫。
在[DEFAULT]節中,配置RabbitMQ 消息隊列訪問:
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
替換RABBIT_PASS您爲openstack RabbitMQ中的賬戶選擇的密碼。
在[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
替換NEUTRON_PASS爲neutron 身份服務中爲用戶選擇的密碼。
在該[oslo_concurrency]部分中,配置鎖定路徑:
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
選擇與控制器節點選擇的相同的網絡選項來配置特定於它的服務。
網絡選項1:提供商網絡
網絡選項2:自助網絡
1.1.1.1.4.3.1. 網絡選項1:提供商網絡
在計算節點上配置網絡組件。
配置Linux橋接器代理:
Linux橋接器代理爲實例構建第2層(橋接和交換)虛擬網絡基礎架構,並處理安全組。
編輯/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件並完成如下操做:
在本[linux_bridge]節中,將提供商虛擬網絡映射到提供商物理網絡接口:
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
替換PROVIDER_INTERFACE_NAME爲底層提供商物理網絡接口的名稱。
在本[vxlan]節中,禁用VXLAN覆蓋網絡:
[vxlan]
enable_vxlan = false
在本[securitygroup]節中,啓用安全組並配置Linux橋iptables防火牆驅動程序:
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
1.1.1.1.4.3.2. 網絡選項2:自助網絡
在計算節點上配置網絡組件。
配置Linux橋接器代理:
Linux橋接器代理爲實例構建第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地址,並啓用第2層羣:
[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
替換OVERLAY_INTERFACE_IP_ADDRESS處理覆蓋網絡的底層物理網絡接口的IP地址。示例架構使用管理接口將流量隧道傳送到其餘節點。所以,替換OVERLAY_INTERFACE_IP_ADDRESS計算節點的管理IP地址。
在本[securitygroup]節中,啓用安全組並配置Linux橋iptables防火牆驅動程序:
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
編輯/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_PASS爲neutron 身份服務中爲用戶選擇的密碼。
從新啓動計算服務:
# systemctl restart openstack-nova-compute.service
啓動Linux橋接代理並將其配置爲在系統啓動時啓動:
# systemctl enable neutron-linuxbridge-agent.service
# systemctl start neutron-linuxbridge-agent.service