OpenStack Neutron(1)
今天的主題是Neutron,他在OpenStack中的軟體定位是在處理網路部分,在一個具有大型架構的IAAS中這部分就會顯得很重要,在於網路面的需求需要做到的是「虛擬化」因為依照需求來說我們對外的網孔可能沒有虛擬機這麼多,但如果今天用一種概念是在電腦裡用軟體的方法虛擬出交換器,再將虛擬機的虛擬網卡彼此對接,這樣可以有效解決網孔不構的問題,並且也更加容易進行管理,它的內容其實不少我們這幾天就專心研究他八。
我們在前面配置安裝需求的時候有提到
依照官方的安裝方法分成兩種
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
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
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
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繼續講解,再來就是其他驅動的應用了,如果後期還有時間就來講一下網路高階一點的應用模式。
希望大家可以在這一個月中讀到非常多的應用技巧,那如果有問題可以以私訊我的方式是使用問題回復,我會盡可能地回答問題,那會在後面統一做回覆,或者如果有想知道的相關的應用也可以提出討論喔。
請問一下在/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上面設定