OpenStack运维之安装Neutron服务

Neutron介绍

Neutron概要

OpenStack网络服务提供了一个API接口,允许用户在云上设置和定义网络连接和地址。这个网络服务的项目代码名称是Neutron。OpenStack网络处理虚拟设备的创建和管理网络基础设施,包括网络、交换机、子网以及由计算服务(nova)管理的设备路由器。高级服务,如防火墙或虚拟私人网络(VPN)也可以使用。

OpenStack网络由neutron-server,持久化存储数据库,和任意数量的插件代理组成,这些代理提供其他服务,如与本地linux联网接口机制、外部设备或SDN控制器。

OpenStack网络是完全独立的,可以部署到一个专用主机。如果你的部署使用了一个控制器主机运行集中计算组件,你可以部署网络服务来取代主机的设定。

OpenStack网络集成了各种组件:

  • 身份认证(Keystone)用于身份验证以及api请求的授权。
  • 计算服务(Nova)用于把一个特定网络插入每个虚拟机中。
  • 仪表盘(Horizon)由管理员和租户通过一个基于WEB的图形界面创建和管理网络。

neutron组件详解

neutron-server可以理解为类似于nova-api那样的一个组件,一个专门用来接收neutron REST API调用的服务器。负责将不同的rest api发送到不同的neutron-plugin

neutron-plugin可以理解为不同网络功能实现的入口,现在大部分都是软件定义网络,各个厂商都开发自己的plugin(插件)。neutron-plugin接收netron-server发过来的rest api,向neutron database完成一些信息注册(比如用户要建端口)。然后将具体要执行的业务操作和参数通知给自身对应的neutron-agent

neutron-agent可以直观的理解为neutron-plugin在设备上的代理,接受相应的neutron-plugin通知的业务操作和参数,并转换为具体的设备级操作,以指导设备的动作。当本地设备发生问题时,neutron-agent会将情况通知给neutron-plugin(说白了就是neutron-server就是与各个组件交互的,接收请求,neutron-plugin是操作数据库的,neutron-agent就是具体干活的)

neutron database就是数据库,一些业务相关的参数都存在这里

Neutron网络

Neutron分别提供了二层(L2)vSwitch交换和三层(L3)Router路由抽象的功能,对应于物理网络环境中的交换机和路由器实现。具体实现了如下功能:

  • Router:为租户提供路由、NAT等服务。
  • Network:对应于一个真实物理网络中的二层局域网(VLAN),从租户的的角度而言,是租户私有的。
  • Subnet:为网络中的三层概念,指定一段IPV4或IPV6地址并描述其相关的配置信息。它附加在一个二层Network上,指明属于这个network的虚拟机可使用的IP地址范围。

注意:学习openstack重中之重network的类型包括:Flat,Vlan,Vxlan,GRE,还有一个local 五种网络模式指的是二层网络

neutron L2 network可以分为

flat network:基于不实用vlan的物理网络实现的虚拟网络。所有网络都在一个网络中。不推荐使用,用不到生产环境中。

local network:一个只允许在本服务器内通信的虚拟网络,所有服务都装在一台机器上 不推荐中。

vlan network:基于物理vlan网络实现的虚拟网络。共享同一个物理网络的多个vlan网络是相互隔离的,并且可以使用重叠IP地址空间。最重要的一点是有效的VLAN ID 范围为1-4095

GRE network:(通过路由封装网络):一个使用GRE封装网络包的虚拟网络,GRE封装的数据包基于IP路由表来进行路由,因此GRE network不和具体的网络网络绑定

VXLAN network:(虚拟可扩展网络)基于vxlan实现虚拟网络。同GRE network一样,vxlan network中IP包的路由也基于IP路由表,也不和具体的物理网络绑定

安装部署neutron

控制节点安装

创库授权

1
2
3
4
5
6
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
IDENTIFIED BY '123456';

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
IDENTIFIED BY '123456';

neutron创建用户\角色

1
2
3
openstack user create --domain default --password neutron neutron

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

创建neutron服务(api接口)

1
2
3
4
5
6
7
8
9
10
11
12
openstack service create --name neutron \
--description "OpenStack Networking" network

openstack endpoint create --region RegionOne \
network public http://master01.boysec.cn:9696

openstack endpoint create --region RegionOne \
network internal http://master01.boysec.cn:9696

openstack endpoint create --region RegionOne \
network admin http://master01.boysec.cn:9696

安装服务

1
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y

配置neutron文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
cp /etc/neutron/neutron.conf{,.bak}
egrep -v "^$|#" /etc/neutron/neutron.conf.bak >/etc/neutron/neutron.conf
[root@master01.boysec.cn ~]# cat /etc/neutron/neutron.conf
[DEFAULT]
core_plugin = ml2
service_plugins =
transport_url = rabbit://openstack:openstack@master01.boysec.cn
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[cors]
[database]
connection = mysql+pymysql://neutron:123456@master01.boysec.cn/neutron
[keystone_authtoken]
www_authenticate_uri = http://master01.boysec.cn:5000
auth_url = http://master01.boysec.cn:5000
memcached_servers = master01.boysec.cn:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron

[nova]
auth_url = http://master01.boysec.cn:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = nova
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[privsep]
[ssl]

配置插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 编辑ml2配置
cp /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak}
egrep -v "^$|#" /etc/neutron/plugins/ml2/ml2_conf.ini.bak> /etc/neutron/plugins/ml2/ml2_conf.ini
cat /etc/neutron/plugins/ml2/ml2_conf.ini
[DEFAULT]
[ml2]
type_drivers = flat,vlan
tenant_network_types =
mechanism_drivers = linuxbridge
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider
[securitygroup]
enable_ipset = true

# 编辑linuxbridge_agent配置
cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}
egrep -v "^$|#" /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak >/etc/neutron/plugins/ml2/linuxbridge_agent.ini
cat /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:eth0

# 编辑dhcp_agent配置
vim /etc/neutron/dhcp_agent.ini
[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true

同步数据库

1
2
3
4
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

启动服务

1
2
3
4
5
6
7
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

计算节点安装

1
2
yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-linuxbridge ebtables -y

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[root@node01 ~]# cp /etc/neutron/neutron.conf{,.bak}
[root@node01 ~]# egrep -v "^$|#" /etc/neutron/neutron.conf.bak >/etc/neutron/neutron.conf
[root@node01 ~]# vim /etc/neutron/neutron.conf
[root@node01 ~]# cat /etc/neutron/neutron.conf
[DEFAULT]
transport_url = rabbit://openstack:openstack@master01.boysec.cn
auth_strategy = keystone
[cors]
[database]
[keystone_authtoken]
www_authenticate_uri = http://master01.boysec.cn:5000
auth_url = http://master01.boysec.cn:5000
memcached_servers = master01.boysec.cn:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[privsep]
[ssl]


[root@node01 ~]# scp master01.boysec.cn:/etc/neutron/plugins/ml2/linuxbridge_agent.ini /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[root@node01 ~]# cat /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[DEFAULT]
[linux_bridge]
physical_interface_mappings = provider:eth0
[vxlan]
enable_vxlan = false
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

启动

1
2
3
systemctl restart openstack-nova-compute.service
systemctl enable neutron-linuxbridge-agent.service
systemctl start neutron-linuxbridge-agent.service

验证

1
2
3
4
5
6
7
8
9
[root@master01 ~]# openstack network agent list                
+--------------------------------------+--------------------+--------------------+-------------------+-------+-------+---------------------------+
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+--------------------------------------+--------------------+--------------------+-------------------+-------+-------+---------------------------+
| 614d6a20-cfec-43e5-825d-89f60da8c401 | Metadata agent | master01.boysec.cn | None | :-) | UP | neutron-metadata-agent |
| 9300f5c5-1f59-46bc-89e0-88222e9ccd16 | DHCP agent | master01.boysec.cn | nova | :-) | UP | neutron-dhcp-agent |
| afafc9b0-566e-48ac-be6a-e54510229770 | Linux bridge agent | master01.boysec.cn | None | :-) | UP | neutron-linuxbridge-agent |
| c6cc8d26-7b2b-46d6-96e8-56cb46689cf1 | Linux bridge agent | node01.boysec.cn | None | :-) | UP | neutron-linuxbridge-agent |
+--------------------------------------+--------------------+--------------------+-------------------+-------+-------+---------------------------+