网络服务 Neutron 介绍¶ OpenStack
网络服务包含以下组件:
neutron-server
服务OpenStack Networking
插件和代理队列服务 网络服务 Neutron 概念¶ OpenStack
网络服务 neutron
管理整个 OpenStack
环境中虚拟网络基础设施 VNI
的所有网络以及物理网络基础设施 PNI
的接入层。 网络服务使项目能够创建高级虚拟网络拓扑结构,其中可能包括防火墙,负载平衡器和虚拟专用网络 VPN
等服务。
网络服务提供抽象的网络,子网和路由器对象。每个抽象对象能够模拟其物理功能:网络包含子网,路由器在不同子网和网络之间进行路由通信。
任何给定的网络设置至少有一个外部网络。与其他网络不同,外部网络不仅仅是一个虚拟定义的网络。相反,它代表了除 OpenStack
安装之外可访问的物理外部网络的一部分。外部网络上的 IP
地址可以通过互联网来访问。
除了外部网络外,任何网络设置都有一个或多个内部网络。这些软件定义的网络 SDN
直接连接至虚拟机。只有在特定内部网络上的虚拟机,或通过接口连接到具有类路由器功能的子网上的虚拟机才能直接访问到该网络的虚拟机。
而对于从外部网络访问虚拟机,则需要通过网络之间的路由器。每个路由器都有一个连接到外部网络的网关和一个或多个连接到内部网络的接口。与物理路由器一样,子网可以访问到同一路由器的其他子网上的机器,虚拟机也可以通过路由器的网关访问外部网络。
另外,您可以将外部网络上的 IP
地址分配给内部网络上的端口。当有请求连接到子网时,该连接将占用一个端口。您可以将外部网络的 IP
地址与端口号关联到虚拟机上。这样,就可以通过外部网络来访问虚拟机了。
网络服务也支持安全组。安全组能使管理员按组来定义防火墙规则。一个虚拟机可以属于一个或多个安全组,网络服务会在这些安全组中应用这些规则,以开放或关闭虚拟机的端口,为虚拟机设置端口范围或流量类型。
每个网络服务的插件都有其自身的用途。虽然理解这些概念对于配置运行 VNI
和 OpenStack
环境并不是必须的,但是它们可以帮助您更好地设置网络。所有网络服务安装都使用核心插件和安全组插件(或者仅使用 No-Op
安全组插件)。此外,网络服务还提供防火墙即服务 FWaaS
和负载均衡即服务 LBaaS
插件。
安装网络服务 Neutron¶ 安装于控制节点¶ 配置数据库¶ 新建数据库 neutron
:
1
MariaDB [( none)] > create database neutron;
赋予 neutron
用户权限并设置 NEUTRON_DBPASSWORD
:
1
2
MariaDB [( none)] > grant all privileges on neutron.* to 'neutron' @'localhost' identified by 'NEUTRON_DBPASSWORD' ;
MariaDB [( none)] > grant all privileges on neutron.* to 'neutron' @'%' identified by 'NEUTRON_DBPASSWORD' ;
新建服务证书及 API Endpoints¶ 导入 admin
环境变量:
新建 neutron
用户并设置密码 NEUTRON_PASSWORD
:
1
$ openstack user create --domain default --password-prompt neutron
将 admin
角色加入 neutron
用户中:
1
$ openstack role add --project service --user neutron admin
生成 neutron
服务入口点:
1
$ openstack service create --name neutron --description "OpenStack Networking" network
生成网络服务 API Endpoints
:
1
2
3
$ 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
安装配置组件¶ Neutron
提供了选项一和选项二两种方式来部署 OpenStack
网络。
选项一提供的部署方案是一个简易化的网络架构,只支持将实例加入服务提供商网络(即外部网络)中。不支持自服务网络,路由以及浮动 IP
。只有 admin
和其他有权限的用户能够管理该络。
选项二是在选项一的基础上添加了第三层(网络层)服务。使之能够支持实例加入自服务网络。demo
以及其他未授权用户能够管理包括了提供自服务与服务提供商网络之间的路由的自服务网络。除此之外,浮动 IP
使得实例能够通过自服务网络连接到外部网络(如 Internet
)。
自助服务网络通常使用覆盖网络。 覆盖网络协议(如 VXLAN
)包含额外的数据头部,这些头部会增加开销并减少有效负载或用户数据的可用空间。 在不知道虚拟网络架构的情况下,实例尝试使用 1500 字节的以太网默认最大传输单元 MTU
发送数据包。 网络服务通过 DHCP
自动为实例提供正确的 MTU
值。 但是,一些云镜像不使用 DHCP
或忽略 DHCP MTU
选项而使用元数据或脚本进行配置。
以下两种网络配置选项只需要选择一种。
网络选项一¶ 安装组件包:
1
# yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
修改 /etc/neutron/neutron.conf
:
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
[DEFAULT]
# ...
core_plugin = ml2
service_plugins = #就是空的,什么选项都不要写
transport_url = rabbit://openstack:RABBIT_PASSWORD@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[database]
# ...
connection = mysql+pymysql://neutron:NEUTRON_DBPASSWORD@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_PASSWORD
[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_PASSWORD
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
将 RABBIT_PASSWORD
, NEUTRON_DBPASSWORD
, NEUTRON_PASSWORD
, NOVA_PASSWORD
更改为自己使用的密码。
修改 /etc/neutron/plugins/ml2/ml2_conf.ini
文件,以配置 Modular Layer 2 (ML2)
插件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[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
修改 /etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件,以配置 Linux bridge
代理:
1
2
3
4
5
6
7
8
9
10
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
[vxlan]
enable_vxlan = true
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_fiewall.IptablesFirewallDriver
PROVIDER_INTERFACE_NAME
是机器能够连通外网的网卡的名称,即处于服务提供商网络 Provider Network 中的网卡。
网络拓扑示例(图中红色 NIC 处在管理网络中,绿色 NIC 处在提供商网络中):
修改 /etc/neutron/dhcp_agent.ini
文件,以配置 DHCP
代理:
1
2
3
4
5
[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmaq
enable_isolated_metadata = true
若已使用 网络选项一
配置完成,请跳过该节的 网络选项二
。
网络选项二¶ 安装组件包:
1
# yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
修改 /etc/neutron/neutron.conf
:
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
[DEFAULT]
# ...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
transport_url = rabbit://openstack:RABBIT_PASSWORD@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[database]
# ...
connection = mysql+pymysql://neutron:NEUTRON_DBPASSOWRD@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_PASSWORD
[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_PASSWORD
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
将 RABBIT_PASSWORD
, NEUTRON_DBPASSWORD
, NEUTRON_PASSWORD
, NOVA_PASSWORD
更改为自己使用的密码。
修改 /etc/neutron/plugins/ml2/ml2_conf.ini
文件,以配置 Modular Layer 2 (ML2)
插件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[ml2]
# ...
type_drivers = flat, vlan, vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge, l2population
extension_drivers = port_security
[ml2_type_flat]
# ...
flat_networks = provider
[ml2_type_vxlan]
# ...
vni_ranges = 1:1000
[securitygroup]
# ...
enable_ipset = true
Linux bridge
代理只支持 VXLAN
覆盖网络。
修改 /etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件,以配置 Linux bridge
代理:
1
2
3
4
5
6
7
8
9
10
11
12
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
PROVIDER_INTERFACE_NAME
是机器能够连通外网的网卡的名称,即处于服务提供商网络 Provider Network
中的网卡;OVERLAY_INTERFACE_IP_ADDRESS
是机器之间通信的网卡的 IP
地址,即处于管理网络 Management Network
中的网卡。网络拓扑示例(图中红色 NIC
处在管理网络中,绿色 NIC
处在提供商网络中):网络拓扑示意
修改 /etc/neutron/l3_agent.ini
文件,以配置第三层代理 Layer-3 (L3) agent
:
1
2
3
[DEFAULT]
# ...
interface_driver = linuxbridge
修改 /etc/neutron/dhcp_agent.ini
文件,以配置 DHCP
代理:
1
2
3
4
5
[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
配置元数据代理¶ 编辑 /etc/neutron/metadata_agent.ini
文件:
1
2
3
4
[DEFAULT]
# ...
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET
将 METADATA_SECRET
设置成自己需要的密码。
配置计算服务的网络项¶ 编辑 /etc/nova/nova.conf
文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
[neutron]
# ...
url = http://controller:9696
auth_url = http://controller:3537
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASSWORD
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
将 NEUTRON_PASSWORD
和 METADATA_SECRET
更改为之前设置的密码。
同步数据库¶ 建立文件连接:
1
# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
填充 neutron
数据库:
1
# 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
启动网络服务¶ 重启 nova
计算服务:
1
# systemctl restart openstack-nova-api
开启 neutron
网络服务:
1
2
# systemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
# systemctl start neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
若选择的是选项二 Self-service Networks
的配置,则需要启动 L3
服务:
1
2
# systemctl enable neutron-l3-agent
# systemctl start neutron-l3-agent
安装于计算节点¶ 安装配置组件¶ 安装组件包:
1
# yum install openstack-neutron-linuxbridge ebtables ipset
修改 /etc/neutron/neutron.conf
文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASSWORD@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 = NEUTRON_PASSWORD
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
将 RABBIT_PASSWORD
, NEUTRON_PASSWORD
更改为自己的密码。
配置网络选项¶ 遵循控制节点上选用的网络选项。
网络选项一¶ 编辑 /etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件:
1
2
3
4
5
6
7
8
9
10
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
[vxlan]
enable_vxlan = false
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
PROVIDER_INTERFACE_NAME
是机器能够连通外网的网卡的名称,即处于服务提供商网络 Provider Network
中的网卡。
若已使用 网络选项一
配置完成,请跳过该节的 网络选项二
。
网络选项二¶ 编辑 /etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件:
1
2
3
4
5
6
7
8
9
10
11
12
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
PROVIDER_INTERFACE_NAME
是机器能够连通外网的网卡的名称,即处于服务提供商网络 Provider Network
中的网卡;OVERLAY_INTERFACE_IP_ADDRESS
是机器之间通信的网卡的 IP
地址,即处于管理网络 Management Network
中的网卡。配置计算服务的网络项¶ 编辑 /etc/nova/nova.conf
文件:
1
2
3
4
5
6
7
8
9
10
11
[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_PASSWORD
将 NEUTRON_PASSWORD
替换为自己的密码。
启动网络服务¶ 重启计算服务:
1
# systemctl restart openstack-nova-compute
启动网络服务:
1
2
# systemctl enable neutron-linuxbridge-agent
# systemctl start neutron-linuxbridge-agent
若对计算节点有所更改,也需要重启计算节点上的网络服务。
服务测试¶ 在控制节点上操作。
导入 admin
环境变量:
查看 neutron-server
成功启动的网络进程:
1
$ openstack extension list --network
查看成功启动的 neutron
代理:
1
$ openstack network agent list
若没有出现计算节点的 Linux bridge
服务,可能是因为计算节点上的网络服务未能正确启动,要注意查看日志。
网络服务的安装倒是出奇的顺利,简直超乎自己的预料一周完成就不错了。Neutron
的配置文件比较多,也相对杂乱,还是要在配置时谨慎操作。小心使得万年船。
本作品采用
知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。