Q版 neutron安装
前言
经过前面几篇博客我们依次部署了,keystone身份认证服务、glance映像服务、nova计算服务,现在我们的实例有了镜像有了计算服务就可以进行创建了,但是在多台实例运行的时候,怎么对外通信呢?实例之间是怎么通信的呢?通信必须要有IP地址,这个网络我们怎么配置呢?这时候我们需要部署一个networking Service网络服务,来为实例来提供虚拟网络。
一、简介
部署网络服务我们这里使用的是neutron来实现的,通过neutron来提供虚拟化的网络支持。
neutron网络服务的组件:
- neutron-server ,提供api接受网络上的相关请求;
- OpenStack Networking plug-ins and agents ,OpenStack的网络插件和代理,这些插件我们可以自己往里面添加,不同厂商插件功能也是不一样的;
- Messaging queue ,消息队列在网络服务之间传递消息,这块就是rabbitMQ;
二、安装
在配置OpenStack网络(neutron)服务之前,必须创建数据库,服务凭证和API端点。
1、前提条件
首先创建数据库,neutron也是使用到数据库的,创建库然后创建授权用户来进行访问。
mysql -u root -pXylong_000
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '123';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '123';
接着我们创建neutron的用户、做授权,
source admin-openrc
openstack user create --domain default --password-prompt 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
2、安装和配置-controller
根据官方文档中提供的网络模式一共是两种,分别是provider+self-service,
-
provider网络 ,他是通过我们初始添加的一块物理网络来进行通信,我那块物理网卡已经设置为NAT模式了,那么我们使用provider网络创建出来的实例就是可以连通的外网的;
-
self-service网络 ,他说白了就是内部网络,就像我们ipv4地址中的私有网段一样,他可以创建网络但是仅限于内部的实例来进行通信是没法连接外网的;
如果你想要通过self-service网络来连接外网的话,那么你是需要将provider网络配置好,并且创建出一个provider类型的网络,然后设置为路由绑定到你创建的self-service网络上面,这样self-service网络才可以访问外网。
我这里使用的是第二种。
接着我们到controller节点上安装neutron的软件,
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
修改配置文件
接着我们修改配置文件,neutron网络服务的配置文件可以说是OpenStack各个组件中需要修改最多的一个组件,
比如,配置数据库、验证机制,keystone、消息队列是谁、网络拓扑变更了通知谁、还有二层网络,三层网络的插件,这些我们都是需要配置的,
neutron.conf
首先是neutron的配置文件,我们配置连接数据库,
vim /etc/neutron/neutron.conf
配置数据库访问:
[database]
connection = mysql+pymysql://neutron:123@controller/neutron
[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
transport_url = rabbit://openstack:123@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
参数 | 解释 |
---|---|
core_plugin | #配置支持的插件,ml2是二层的插件,这是provider网络的 |
service_plugins | #指定self-service网络出去使用路由 |
allow_overlapping_ips | |
transport_url | #配置RabbitMQ 消息队列的地址 |
auth_strategy | #配置身份服务的验证方式: |
notify_nova_on_port_status_changes | #网络拓扑变更通知 |
notify_nova_on_port_data_changes | #网络发生变化通知 |
配置身份服务访问:
[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 = 123
将网络配置为通知Compute网络拓扑更改:
[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 = 123
配置锁定路径:
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
ml2_conf.ini
ML2插件使用Linux桥接器机制为实例构建第2层(桥接和交换)虚拟网络基础结构。
说白了就是配置二层插件,使用什么网络虚拟化的方式,二层网络怎么实现,
vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
参数 | 解释 |
---|---|
type_drivers | #指定驱动类型 |
tenant_network_types | #指定网络类型 |
mechanism_drivers | #指定使用的驱动是Linux网桥 |
extension_drivers | #指定额外驱动,端口安全 |
接着设置网络是provider,
[ml2_type_flat]
flat_networks = provider
指定虚拟VLAN的范围,
[ml2_type_vxlan]
vni_ranges = 1:1000
接着启动安全组,
[securitygroup]
enable_ipset = true
linuxbridge_agent.ini
接着我们配置Linux网桥配置文件,
vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
指定以哪个网卡作为桥,来实现网桥的映射,
[linux_bridge]
physical_interface_mappings = provider:eth0
这里的网卡我们是事先配置好的,我们是可以查看到的,
接着启动vxlan虚拟VLAN,指定controller节点的ip地址,启动二层网络
[vxlan]
enable_vxlan = true
local_ip = 192.168.144.10
l2_population = true
启用安全组并配置Linux网桥iptables防火墙驱动程序:
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
确保Linux操作系统内核支持网桥过滤器,要启用网络桥接支持,通常br_netfilter需要加载内核模块。
首先我们需要判断下模块是否加载?
lsmod | grep br_netfilter
如果没有就加载模块,
modprobe br_netfilter
然后执行以下操作:
vim /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
sysctl -p
l3_agent.ini
第3层(L3)代理为自助式虚拟网络提供路由和NAT服务。
vim /etc/neutron/l3_agent.ini
指定Linux使用的是网桥,
[DEFAULT]
interface_driver = linuxbridge
dhcp_agent.ini
配置DHCP功能,可以通过网桥自动分配IP地址,
vim /etc/neutron/dhcp_agent.ini
设置接口驱动为Linux网桥,指定DHCP驱动,最后开启隔离元数据,
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
metadata_agent.ini
元数据代理提供配置信息,例如实例的凭据。
vim /etc/neutron/metadata_agent.ini
指定访问元数据的IP,下面这个密码需要在nova的配置文件[neutron] 的group组中被使用,也就是说必须配置一致,
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = 123
nova.conf
接着在nova服务中配置neutron的地址,
neutron服务是为nova服务创建出来的实例提供网络的,所以需要在nova的配置文件中添加上连接neutron的配置文件,里面用到的meta的密码就是在上一个配置文件中制定的,我用的都是123
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_PASS
service_metadata_proxy = true
metadata_proxy_shared_secret = 123
初始化数据库
修改好配置文件之后我们就该网数据库中同步数据了,这里我们需要先生成插件的配置路径,
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
验证
我们可以进入到数据库中查看下
mysql -uroot -pXylong_000
use neutron
show tables;
设置开机自启并启动服务
因为修改了nova.conf配置文件所以重新启动计算服务:
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
启动第3层服务:
systemctl enable neutron-l3-agent.service
systemctl start neutron-l3-agent.service
3、安装和配置-compute
接着到了计算节点,它上面也会有一些网络操作,在哪个节点上执行,桥会变成什么样子,
yum install openstack-neutron-linuxbridge ebtables ipset
修改配置文件
接着在计算节点上进行身份验证机制,消息队列和插件的配置,
neutron.conf
vim /etc/neutron/neutron.conf
设置RabbitMQ 消息队列访问,配置身份服务访问
[DEFAULT]
transport_url = rabbit://openstack:123@controller
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 = 123
配置锁定路径:
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
linuxbridge_agent.ini
因为使用了Linux网桥所以也是需要配置下的,
vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
指定Linux网桥使用的物理网卡,
[linux_bridge]
physical_interface_mappings = provider:eth0
接着启动vxlan虚拟VLAN,指定compute节点的ip地址,启动二层网络
[vxlan]
enable_vxlan = true
local_ip = 192.168.144.11
l2_population = true
启用安全组并配置Linux网桥iptables防火墙驱动程序:
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
验证以下所有sysctl值是否设置为确保Linux操作系统内核支持网桥过滤器,要启用网络桥接支持,通常br_netfilter需要加载内核模块。
首先我们需要判断下模块是否加载?
lsmod | grep br_netfilter
如果没有就加载模块,
modprobe br_netfilter
然后执行以下操作:
vim /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
sysctl -p
nova.conf
修改下compute节点的nova服务的配置,能访问到neutron服务,
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 = 123
设置开机自启并启动服务
因为nova服务中添加了配置重启下服务,
systemctl restart openstack-nova-compute.service
启动neutron服务并设置为开机自启,
systemctl enable neutron-linuxbridge-agent.service
systemctl start neutron-linuxbridge-agent.service
4、服务验证
我们可以到controller节点上面,加载管理员环境变量,查看下我们的网络服务,
source admin-openrc
openstack network agent list
创建一个provider网络试下:
PS:在neutron网路服务配置的这里,我们网络全部是按照self-service方式配置的但是我们还是可以创建provider网络的,因为self-service的配置是覆盖了provider网络的,这里只需要我们的外部网络支持就可以创建出provider类型的网络,
source admin-openrc
openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider
接着指定子网的范围,
PS:因为是创建的provider类型的网络,所以这里的地址段是需要我们在Vmware软件中单独进行配置的,否则我们就是网络创建出来了但是分配给实例还是无法连接外网的,
openstack subnet create --network provider --allocation-pool start=192.168.223.10,end=192.168.223.30 --dns-nameserver 192.168.223.2 --gateway 192.168.223.2 --subnet-range 192.168.223.0/24 provider
网络是可以正常创建的,
openstack network list
网络创建好之后可以查看下controller节点的网络状况,作为neutron使用的网卡eth0已经没得地址了,他的IP地址到了下面这个网卡上面了,
查看Linux网桥已经创建了,
总结:
到这里为止我们的网络服务neutron就搭建完毕了,
在neutron这里我们了解到原生的OpenStack中提供的两类网络分别是provider直连式网络和self-service内部网络,
- 如果是使用provider直连式网络对物理网卡有需求,他是需要能够连接外网的,而且创建provider类型的网络的时候分配子网地址范围也是物理网卡上IP地址同一个地址段的,
- 如果是self-service网络就没有那么多的要求了,他的功能就是创建内部网络,类似于私网地址,就是说我们在OpenStack环境中随便使用,但是无法连接外网,
这里如果你完全按照官方文档的步骤来创建的话是创建不出provider类型的网络的,就是创建出来也没法给实例分配地址,但是self-service网络是可以正常使用的,
进行到现在我们安装了keystone身份认证、glance映像服务、nova计算服务、neutron网络服务,现在我们的OpenStack环境就已经达到了启动实例的多有条件了,如果你现在就想创建实例,那么你就可以跳转到
创建实例
进行实例的创建了。
如果安装官方文档的步骤我们接下来需要
安装dashboard