Neutron涉及到了网络配置,是OpenStack平台中最复杂的一个组件,配置文件最多。Neutron本身支持多种plugin,每种plugin又有多种agent可以使用,而每一种agent的配置方式又有差别,所以这也是Neutron较为复杂的原因。目前最常用的plugin是Linux bridge,而最常用的agent是ML2 agent(Module Layer2,也可以叫做L2 agent,第二层网络协议),剩下还有DHCP-agent、L3-agent(不同网络下要互相通信就需要这个agent)、LBAAS-agent(负载均衡)等。
我们从最常用的ML2开始进行,这种网络插件中默认使用的是Linux bridge机制(该机制支持local、flat、vlan、vxlan四种网络类型)来进行网络分配,使用最广泛的是vlan和vxlan两种网络类型(vlan的作用相当于让一组LAN划分出了多组LAN,实现了隔离,而vxlan相比vlan支持更多的网段,适合大规模部署,而且可以通过Layer3网络传输封装后的Layer2数据):
一、Neutron控制节点的安装与配置
1、为Neutron创建数据库以及授权
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
2、老规矩,获取环境变量
. admin-openrc
3、在OpenStack中创建Neutron用户以及设置角色权限
openstack user create --domain default --password-prompt neutron
openstack role add --project service --user neutron admin
4、创建Neutron服务和endpoint信息,完成keystone中的注册,这里也可以看到Neutron的端口是9696
openstack service create --name neutron --description "OpenStack Networking" network
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
5、官方文档中进行到这步时分为了提供者网络和自服务网络两种配置方式,本文选择提供者网络配置(提供者网络中一台虚拟机就是一个单独的网络,没有内部网络可用,而自服务网络支持让多个虚拟机构成一个内部网络),然后安装Neutron相关软件包
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
6、修改主配置文件/etc/neutron/neutron.conf,确保内容如下:
[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
[DEFAULT]
transport_url = rabbit://openstack:RABBIT_PASS@controller_ip
core_plugin = ml2 #启用ML2插件并禁用其他插件
service_plugins = #留空
rpc_backend = rabbit
auth_strategy = keystone
notify_nova_on_port_status_changes = True #配置网络服务来通知计算节点的网络拓扑变化:
notify_nova_on_port_data_changes = True
[oslo_messaging_rabbit]
rabbit_host = controller_ip
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
[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
[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]
lock_path = /var/lib/neutron/tmp
7、配置网络驱动类型,修改ml2配置文件/etc/neutron/plugins/ml2/ml2_conf.ini,确保内容如下:
[ml2]
type_drivers = flat,vlan #启用flat和vlan网络驱动类型,还有vxlan,local等网络驱动类型在这里没有使用
tenant_network_types = #设置租户网络,这里留空,禁用私有网络
mechanism_drivers = linuxbridge #启用linux bridge机制
extension_drivers = port_security #启用扩展端口安全驱动
[ml2_type_flat]
flat_networks = provider #配置neutron网络,这里是什么名字创建的网络就是什么名字
[securitygroup]
enable_ipset = True
8、配置Linux bridge,修改配置文件/etc/neutron/plugins/ml2/linuxbridge_agent.ini,确保内容如下:
[linux_bridge]
physical_interface_mappings = provider:INTERFACE_NAME #将上面配置的虚拟网络provider和哪张网卡绑定
[vxlan]
enable_vxlan = False #禁止vxlan覆盖网络
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
9、配置DHCP代理,修改配置文件/etc/neutron/dhcp_agent.ini,确保内容如下:
[DEFAULT]
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver #网卡接口驱动类型,实现外部网络与云主机的互通
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq #指定DCHP驱动类型为dnsmasq
enable_isolated_metadata =True
10、配置元数据代理,修改配置文件/etc/neutron/metadat_agent.ini,确保内容如下:
[DEFAULT]
nova_metadata_host = CONTROLLER_IP
metatada_proxy_shared_secret = METADATA_SECRET #在这行自定义一个密码
11、配置nova使用neutron提供的网络服务,修改/etc/nova/nova.conf(也就是说nova配置了neutron的内容,neutron也配置了nova的内容),确保内容如下:
[neutron]
url = http://controller_ip:9696
auth_url = http://controller_ip: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 #metadat_agent.ini也配置了这个自定义密码,需要一致
12、服务启动时要找的配置文件是,所以需要做一个软连接
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
13、初始化数据库
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
14、重启nova api服务,因为11步修改过配置文件还记得吗
systemctl restart openstack-nova-api.service
15、启动neutron服务并设置开机自启
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
16、验证neutron服务,执行命令后看到DHCP agent、Linux bridge、Metadata三个agent的alive状态是:-)笑脸符号代表服务正常,如果异常的话到/var/log/neutron目录查看日志
neutron agent list
二、Neutron计算节点的安装与配置
1、把Neutron的计算节点和Nova的计算节点安装在一个机器上
yum install openstack-neutron-linuxbridge ebtables ipset -y
2、修改neutron主配置文件/etc/neutron/neutron.conf,确保内容如下:
[database]
#connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron #注释掉,计算节点不直接访问数据库
[DEFAULT]
rpc_backend = rabbit #配置 “RabbitMQ” 消息队列的连接
auth_strategy = keystone #配置认证服务访问
[oslo_messaging_rabbit]
rabbit_host = CONTROLLER_IP #配置 “RabbitMQ” 消息队列的连接
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
[keystone_authtoken] #配置认证服务访问
auth_uri = http://CONTROLLER_IP:5000
auth_url = http://CONTROLLER_IP:35357
memcached_servers = CONTROLLER_IP:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
3、配置提供者网络选项(因为控制节点上也使用的是提供者网络),也就是配置Linux bridge代理,编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini,确保内容如下:
[linux_bridge]
physical_interface_mappings = provider:INTERFACE_NAME #将上面配置的虚拟网络provider和哪张网卡绑定
[vxlan]
enable_vxlan = False #禁止vxlan覆盖网络
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
4、为计算节点上的nova配置好neutron网络服务,修改/etc/nova/nova.conf(也就是说nova配置了neutron的内容,neutron也配置了nova的内容),确保内容如下:
[neutron]
url = http://CONTROLLER_IP:9696
auth_url = http://CONTROLLER_IP:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
5、重启nova服务
systemctl restart openstack-nova-compute.service
6、启动Linux bridge代理服务并设置开机自启
systemctl enable neutron-linuxbridge-agent.service
systemctl start neutron-linuxbridge-agent.service