iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 8
1

主題

OpenStack Neutron(1)

前言

今天的主題是Neutron,他在OpenStack中的軟體定位是在處理網路部分,在一個具有大型架構的IAAS中這部分就會顯得很重要,在於網路面的需求需要做到的是「虛擬化」因為依照需求來說我們對外的網孔可能沒有虛擬機這麼多,但如果今天用一種概念是在電腦裡用軟體的方法虛擬出交換器,再將虛擬機的虛擬網卡彼此對接,這樣可以有效解決網孔不構的問題,並且也更加容易進行管理,它的內容其實不少我們這幾天就專心研究他八。

主要內容

我們在前面配置安裝需求的時候有提到
依照官方的安裝方法分成兩種

  • Self-Service Network : 有建路由等L3功能
  • Provider Network : 僅只有簡單L3功能但大多使用L2而已

主要組件

  • Neutron-Server : 作為一個管理網路套件的核心元件
  • Neutron Plug-ins : 其他插件
  • Message : 訊息傳遞功能

建立資料庫

1.登入資料庫

sudo mysql -u root -p

2.建立資料庫

CREATE DATABASE neutron;

3.設定安全性

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON資料庫密碼';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON資料庫密碼';

建立使用者

1.登入admin管理者common模式
2.建立使用者

openstack user create --domain default --password-prompt neutron

3.將使用者加入群組

openstack role add --project service --user neutron admin

4.建立Neutron服務

openstack service create --name neutron --description "OpenStack Networking" network

5.設定登入介面

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

下面兩種請則一安裝

Provider Network

1.安裝套件

sudo apt install neutron-server neutron-plugin-ml2 \
neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent -y

2.設定neutron.conf

sudo vim /etc/neutron/neutron.conf
[DEFAULT]
# 核心套件選擇
core_plugin = ml2
service_plugins =
transport_url = rabbit://openstack:AMQP密碼@controller
#傳送通知給Nova Port/Data更動時
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
auth_strategy = keystone

[database]
connection = mysql+pymysql://neutron:NEUTRON資料庫密碼@controller/neutron

[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密碼

[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密碼

3.設定Modular Layer 2
設定核心網路傳送方式

sudo vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
#傳送封包所用驅動,其他還有local, flat, vlan, gre, vxlan, geneve
type_drivers = flat,vlan
#這邊我們並沒有獨立建立tenant
tenant_network_types =
#虛擬網卡所用驅動
mechanism_drivers = linuxbridge
#擴展的驅動程式
extension_drivers = port_security

#上面有選擇flat因而要做設定
[ml2_type_flat]
#所使用的物理網卡,後面會重新命名
flat_networks = provider

[securitygroup]
#使用ipset去自動設定iptable
enable_ipset = True 

4.設定linuxbridge
設定虛擬網卡層

sudp vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
 #所使用的實體網卡
 [linux_bridge]
 physical_interface_mappings = provider:實體網卡名稱
 [vxlan]
 enable_vxlan = False
 [securitygroup]
 #使用Neutron的安全功能
 enable_security_group = True
 #傳輸層所使用的安全驅動
 firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

5.設定Dhcp

sudo vim /etc/neutron/dhcp_agent.ini
[DEFAULT]
#虛擬網卡驅動
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
#DHCP驅動
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
#使用metadata
enable_isolated_metadata = True

Self-Service Network

1.安裝套件

sudo apt install neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent \
neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent -y

2.設定neutron.conf

sudo vim /etc/neutron/neutron.conf
[DEFAULT]
# 核心套件選擇
core_plugin = ml2
# 核心多了L3的功能
service_plugins = router
#允許分發相同IP
allow_overlapping_ips = True
transport_url = rabbit://openstack:AMQP密碼@controller
#傳送通知給Nova Port/Data更動時
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
auth_strategy = keystone

[database]
connection = mysql+pymysql://neutron:NEUTRON資料庫密碼@controller/neutron

[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密碼

[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密碼

3.設定Modular Layer 2
設定核心網路傳送方式

sudo vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
#傳送封包所用驅動,其他還有local, flat, vlan, gre, vxlan, geneve
type_drivers = flat,vlan,vxlan
#因為需要多台進行路由所以要建立tenant
tenant_network_types = vxlan
#虛擬網卡所用驅動
mechanism_drivers = linuxbridge,l2population
#擴展的驅動程式
extension_drivers = port_security

#上面有選擇flat因而要做設定
[ml2_type_flat]
#所使用的物理網卡,後面會重新命名
flat_networks = provider

#設定VNI的初始和做末ID
[ml2_type_vxlan]
vni_ranges = 1:1000

[securitygroup]
#使用ipset去自動設定iptable
enable_ipset = True 

4.設定linuxbridge
設定虛擬網卡層

sudp vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
 #所使用的實體網卡
 [linux_bridge]
 physical_interface_mappings = provider:實體網卡名稱
 
 [vxlan]
 enable_vxlan = True
 local_ip = 要分享使用的網卡IP(正在使用的)
 l2_population = True
 
 [securitygroup]
 #使用Neutron的安全功能
 enable_security_group = True
 #傳輸層所使用的安全驅動
 firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

5.設定L3 agent
L3層的設定

sudo vim /etc/neutron/l3_agent.ini
[DEFAULT]
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver

6.設定Dhcp

sudo vim /etc/neutron/dhcp_agent.ini
[DEFAULT]
#虛擬網卡驅動
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
#DHCP驅動
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
#使用metadata
enable_isolated_metadata = True

接下來又回到都要做的項目了喔

配置Metadata

sudo vim /etc/neutron/metadata_agent.ini
[DEFAULT]
nova_metadata_ip = controller
metadata_proxy_shared_secret = 設定METADATA的密碼

配置虛擬機網路

sudo vim /etc/nova/nova.conf
[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密碼
service_metadata_proxy = True
metadata_proxy_shared_secret = 上面打得METADATA密碼

同步資料庫

sudo 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

重啟服務

sudo service nova-api restart
sudo service neutron-server restart
sudo service neutron-linuxbridge-agent restart
sudo service neutron-dhcp-agent restart
sudo service neutron-metadata-agent restart
sudo service neutron-l3-agent restart

後記

今天我只有講述到Controller的部分,明天我會再繼續把Compute繼續講解,再來就是其他驅動的應用了,如果後期還有時間就來講一下網路高階一點的應用模式。
希望大家可以在這一個月中讀到非常多的應用技巧,那如果有問題可以以私訊我的方式是使用問題回復,我會盡可能地回答問題,那會在後面統一做回覆,或者如果有想知道的相關的應用也可以提出討論喔。

參考資料

OpenStack Doc


上一篇
OpenStack Nova(2)
下一篇
OpenStack Neutron(2)
系列文
OpenStack-多到數不清的套件改36

1 則留言

0
djmimi35
iT邦新手 5 級 ‧ 2017-06-27 13:28:28

請問一下在/etc/neutron/plugins/ml2/linuxbridge_agent.ini中

#所使用的實體網卡
[linux_bridge]
physical_interface_mappings = provider:實體網卡名稱

這個實體網卡的功能是什麼?因為看起來就算不接線neutron還是可以正常運作,instance也可以拿到provider發的dhcp

謝謝

那是橋接實體網卡的設定阿

嗯嗯,如果沒接線的確是沒辦法串聯provider的網路,我之前是想說如果把這個interface接到外部有發IP的實體設備,是不是可以直接從外部同網段的機器連進instance,但是最後失敗了,請問有辦法直接從外網連進instance嗎?還是必須在controller node上面做NAT的設定,謝謝

我之前使用的時候可以橋接到外部網路
這部分可以再Neutron上面設定

我要留言

立即登入留言