3.6 控制节点部署Neutron

本节摘要
本节主要介绍在 OpenStack 控制节点上部署和配置 Neutron(网络服务) 的完整过程。Neutron 负责为 OpenStack 提供虚拟网络功能,包括二层交换、三层路由、负载均衡和防火墙等。

部署流程

在安装配置 Neutron 前,我们需要先在 MariaDB 中为它创建一个专属的数据库,并配置相应的访问权限。

1)以 root 用户身份连接到数据库服务器,连接时请输入在环境准备阶段安装 MariaDB 时设置的密码。

bash

mysql -u root -p

GA9q62

2)创建 neutron 数据库。

sql

CREATE DATABASE neutron;

N8LzUE

3)创建 neutron 数据库用户,为了方便记忆,密码与用户名设置相同。

sql

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

4)操作完成后,退出数据库。

sql

exit

Neutron 需要在 Keystone(身份认证服务)中注册自己的信息,这样其他组件才能找到并使用它。

1)执行管理员环境变量脚本,获取 OpenStack 的管理员命令行操作权限。

bash

source admin-openstack.sh

2)在 OpenStack 中创建 neutron 用户(密码也是 neutron)。

bash

openstack user create neutron --domain default --password neutron
思考
--password--password-prompt 的区别是什么?

3)为 neutron 用户在 service 项目中添加管理员(admin)角色。

bash

openstack role add admin --project service --user neutron
提示
该命令如果执行成功,不会有任何回显信息,这是正常的。

V7KjYz

4)创建 neutron 服务实体,命名为 network

bash

openstack service create network --name neutron --description "OpenStack networking"

og6mqp

5)创建网络服务的 API 端点(Endpoint)。端点是其他服务访问 Neutron 的入口,分为公共、内部和管理三个级别。

a. 创建公共端点:

bash

openstack endpoint create network public http://controller:9696 --region RegionOne

jfG98r

b. 创建内部端点:

bash

openstack endpoint create network internal http://controller:9696 --region RegionOne

42JDXY

c. 创建管理端点:

bash

openstack endpoint create network admin http://controller:9696 --region RegionOne

0IBTwn

接下来我们需要安装 Neutron 的核心组件和各个网络插件。

1)安装 neutron 相关的软件包:

bash

# 使用 yum 安装以下软件包
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y
组件说明
  • openstack-neutron: 网络服务的核心主程序
  • openstack-neutron-ml2: 二层网络插件(管理虚拟交换机)
  • openstack-neutron-linuxbridge: 底层网络代理
  • ebtables: 提供基础防火墙功能

2)编辑 /etc/neutron/neutron.conf 主配置文件。

修改文件内容如下:

ini

# 配置数据库连接
[database]
connection = mysql+pymysql://neutron:neutron@controller/neutron

# 配置 ML2 插件、路由服务和重叠 IP 地址支持
[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
# 配置消息队列访问,用于组件间通信
transport_url = rabbit://openstack:openstack@controller
# 配置身份认证访问策略
auth_strategy = keystone
# 配置网络拓扑变化时通知 Nova(计算服务)
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true

# 配置 Keystone 认证信息
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron

# 配置通知 Nova 时的认证信息
[nova]
auth_url = http://controller: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

3)配置 ML2 插件

ML2 插件利用 Linux 网桥机制在实例间构建二层虚拟网络架构。编辑 /etc/neutron/plugins/ml2/ml2_conf.ini 文件,修改内容如下:

ini

# 开启 flat、VLAN 和 VXLAN 网络类型支持
[ml2]
type_drivers = flat,vlan,vxlan
# 配置租户网络类型为 VXLAN
tenant_network_types = vxlan
# 开启 linux 网桥和二层同步机制
mechanism_drivers = linuxbridge,l2population
# 开启端口安全扩展驱动
extension_drivers = port_security

# 配置虚拟网络为 Flat 网络,并指定物理网络名称为 provider
[ml2_type_flat]
flat_networks = provider

# 配置 VXLAN 网络的 VNI 标识范围
[ml2_type_vxlan]
vni_ranges = 1:1000

# 开启 ipset 提高安全组规则的处理效率
[securitygroup]
enable_ipset = true

4)配置 Linux 网桥代理

Linux 网桥代理负责在实例间构建二层虚拟网络,并处理安全组规则。编辑 /etc/neutron/plugins/ml2/linuxbridge_agent.ini 文件,配置如下:

ini

# 虚拟网络映射到物理网络接口,这里的 ens33 是提供外部访问的物理网卡
[linux_bridge]
physical_interface_mappings = provider:ens33

# 启用 VXLAN 重叠网络,并配置本机的隧道 IP 地址
[vxlan]
enable_vxlan = true
local_ip = 192.168.16.100
l2_population = true

# 启用安全组并配置基于 iptables 的防火墙驱动程序
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
网卡名称注意
physical_interface_mappings = provider:ens33 中的 ens33 必须与你实际的物理网卡名称一致,如果不同请自行修改。

5)配置三层(L3)代理

三层代理为自服务网络(租户网络)提供路由转发和 NAT 服务。编辑 /etc/neutron/l3_agent.ini 文件,配置如下:

ini

# 配置底层接口驱动程序为 linuxbridge
[DEFAULT]
interface_driver = linuxbridge

6)配置 DHCP 代理

DHCP 代理负责为虚拟网络提供 IP 地址分配服务。编辑 /etc/neutron/dhcp_agent.ini 文件,配置如下:

ini

# 配置接口驱动和 DHCP 驱动,并启用隔离的元数据服务
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true

7)配置元数据(Metadata)代理

元数据代理负责为虚拟机提供初始化配置信息(如主机名、SSH 密钥等)。编辑 /etc/neutron/metadata_agent.ini 文件,配置如下:

ini

[DEFAULT]
# 配置 Nova metadata 所在的主机
nova_metadata_host = controller
# 配置 Neutron 和 Nova 之间通信的共享密码
metadata_proxy_shared_secret = lycloud 

8)配置计算服务(Nova)使用网络服务

最后我们需要告诉 Nova 服务如何连接 Neutron。编辑 /etc/nova/nova.conf 文件,增加以下内容:

重要提示
请务必在 /etc/nova/nova.conf 文件中添加以下 [neutron] 配置块,否则计算节点将无法获取网络。

ini

[neutron]
url = http://controller:9696
auth_url = http://controller:5000
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 = lycloud

1)网络服务初始化脚本需要一个指向 ML2 插件配置文件的软链接。如果该链接不存在,请执行以下命令创建:

bash

ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

2)同步并初始化 Neutron 数据库表结构。

bash

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

zw4qc2

1)由于我们刚才修改了 Nova 的配置文件,所以需要重启 Nova 计算服务接口使其生效:

bash

systemctl restart openstack-nova-api

2)启动 Neutron 的各项核心服务,并配置为开机自启:

bash

systemctl start neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent

systemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent

3)如果你的网络架构包含了自服务(self-service)网络,还需要启动三层(L3)路由代理并设置开机自启:

bash

systemctl start neutron-l3-agent
systemctl enable neutron-l3-agent
完成
至此,控制节点上的 Neutron 网络服务部署与配置完成!