摘要

本手册主要介绍在 OpenStack 控制节点上部署 Neutron(网络服务) 的完整过程。Neutron 负责为 OpenStack 提供网络功能。

部署流程
部署流程

课前准备

  1. 开启 VMnet1 和 VMnet8 网卡;
  2. 打开 controller 节点的虚拟化功能;
  3. 在 VMWare 中克隆 controller 虚拟机,新虚拟机命名为 compute;
  4. 打开 controller 和 compute 两台虚拟机(先controller后compute)。

在 controller 上执行:

bash <(curl -s https://git.seahi.me/seahi/OpenStackScripts/raw/branch/main/env3-5-local-controller.sh) --prepare

在 compute 上执行:

bash <(curl -s https://git.seahi.me/seahi/OpenStackScripts/raw/branch/main/env3-5-local-compute.sh)

在 controller 上执行:

bash <(curl -s https://git.seahi.me/seahi/OpenStackScripts/raw/branch/main/env3-5-local-controller.sh) --finalize

Neutron组件功能

1779079529311
1779079529311

部署过程

一、数据库创建及授权

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

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

mysql -u root -p

GA9q62
GA9q62

2)创建 neutron 数据库

CREATE DATABASE neutron;

N8LzUE
N8LzUE

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

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

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

exit

二、创建服务凭证

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

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

source admin-openstack.sh

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

openstack user create neutron --domain default --password neutron

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

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

V7KjYz
V7KjYz

4)创建网络服务实体,服务名称为 neutron,服务类型为 network

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

og6mqp
og6mqp

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

a. 创建公共端点:

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

jfG98r
jfG98r

b. 创建内部端点:

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

42JDXY
42JDXY

c. 创建管理端点:

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

0IBTwn
0IBTwn

三、安装并配置组件

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

# 使用 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 主配置文件(替换原内容)

# 配置数据库连接
[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 文件,修改内容如下:

# 开启 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 文件,配置如下:

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

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

# 启用安全组并配置基于 iptables 的防火墙驱动程序
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
IP地址
  1. ens33 必须换成实际的网络接口名称
  2. local_ip 必须改成你的控制节点IP

5)配置三层(L3)代理

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

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

6)配置 DHCP 代理

DHCP 代理负责为虚拟网络提供 IP 地址分配服务。编辑 /etc/neutron/dhcp_agent.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 文件,配置如下:

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

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

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

[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 插件配置文件的软链接,执行以下命令创建:

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

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

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
zw4qc2

五、启动服务

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

systemctl restart openstack-nova-api

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

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

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

自主评分

在控制节点执行以下命令进行评分:

curl -s https://git.seahi.me/seahi/OpenStackScripts/raw/branch/main/3.6.sh | bash