一、初始网络环境准备
在控制节点和计算节点都作!
1.将网卡设置为混杂模式
当网卡工作在混杂模式下时,网卡能将通过自己接口的所有数据都捕获。为了实现虚拟网络的数据转发,Neutron需要将外网网卡设置为混杂模式。
第1步,将外网网卡“ens34”设置成混杂模式。
# ifconfig ens34 promisc
第2步,设置开机后混杂模式自动生效。
# vi /etc/profile
在“/etc/profile”环境变量配置文件末尾加上命令语句“ifconfig ens34 promisc”。
2.加载桥接模式防火墙模块
网络过滤器(Netfilter)是Linux内核中的一个软件框架,用于管理网络数据包,不仅具有网络地址转换的功能,还具有数据包内容修改以及数据包过滤等防火墙功能。它与Linux网桥的功能联动,可以实现桥接模式防火墙(br_netfilter)功能。CentOS默认没有加载桥接模式防火墙模块,需要手动加载。
第1步,编辑配置文件
# vi /etc/sysctl.conf
然后在文件的最下方按照如下内容增加两行信息。
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
第2步,加载“br_netfilter”模块。
# modprobe br_netfilter
第3步,检查模块加载情况。
# sysctl -p
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
如果能获得以上信息,则表明“br_netfilter”模块已经加载成功。
二、在控制节点安装与配置Neutron
官方说明文档
以下操作在控制节点完成。
1、安装Neutron软件包
[root@controller ~]# yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
这里一共安装了3个软件包,它们分别如下。
“openstack-neutron”:“neutron-server”模块的包。
“openstack-neutron-ml2”:ML2插件的包。
“openstack-neutron-linuxbridge”:网桥和网络提供者相关的软件包。
2、创建Neutron的数据库并授权
第1步,用下面的方法进入MariaDB数据库服务器。
[root@controller ~]# mysql -uroot -p000000
第2步,新建“neutron”数据库。
MariaDB [(none)]> CREATE DATABASE neutron;
第3步,给用户授权使用新建数据库。
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '000000';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '000000';
上面的SQL语句把“neutron”数据库中的所有表(库名.*)的所有权限(ALL PRIVILEGES)赋予从本地主机(’localhost’ )及任意远程主机(’%’)上登录的名为“neutron”的用户,验证密码为“000000”。
第四步 退出数据库
MariaDB [(none)]> quit
3、修改Neutron服务相关配置文件
(1)备份配置文件neutron.conf并去掉注释和空行
第1步,备份配置文件。
[root@controller ~]# cp /etc/neutron/neutron.conf /etc/neutron/neutron.bak
第2步,去掉所有注释和空行,生成新的配置文件。
[root@controller ~]# grep -Ev '^$|#' /etc/neutron/neutron.bak>/etc/neutron/neutron.conf
这里的正则表达式“^|#”的具体含义为:匹配空行(“^”,其中“^”是一行的开头,“$”是一行的结尾),或者(符号“|”表示或者)匹配第一个字符为“#”的行。结合反向匹配参数“-v”,最终匹配的是所有不为空和不以注释符号“#”开头的行。
(2)编辑新的neutron.conf配置文件
第1步,打开配置文件进行编辑。
[root@controller ~]# nano /etc/neutron/neutron.conf
第2步,修改[database]部分,实现与数据库连接。
[database]
connection = mysql+pymysql://neutron:000000@controller/neutron
第3步,修改“[DEFAULT]”与“[keystone_authtoken]”部分,实现与Keystone交互。
[DEFAULT]
auth_strategy = 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 = project
username = neutron
password = 000000
第4步,修改“[DEFAULT]”部分,实现与消息队列交互及核心插件等。
[DEFAULT]
core_plugin = ml2
service_plugins =
transport_url = rabbit://rabbitmq:000000@controller
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
第5步,修改“[oslo_concurrency]”,配置锁路径。
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
第6步,增加“[nova]”部分,实现与Nova交互。
[nova]
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = nova
password = 000000
region_name = RegionOne
#server_proxyclient_address = 192.168.100.10
(3)修改二层模块ML2插件配置文件ml2_conf.ini
二层模块插件是Neutron必须使用的核心插件。其配置文件是/etc/neutron/plugins/ml2/ml2_conf.ini。
第1步,备份配置文件。
[root@controller ~]# cp /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.bak
第2步,去掉所有注释和空行,生成新的配置文件。
[root@controller ~]# grep -Ev '^$|#' /etc/neutron/plugins/ml2/ml2_conf.bak>/etc/neutron/plugins/ml2/ml2_conf.ini
这里的正则表达式“^|#”的具体含义为:匹配空行(“^”,其中“^”是一行的开头,“$”是一行的结尾),或者(符号“|”表示或者)匹配第一个字符为“#”的行。结合反向匹配参数“-v”,最终匹配的是所有不为空和不以注释符号“#”开头的行。
第3步,编辑新的配置文件
打开配置文件进行编辑。
[root@controller ~]# nano /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
type_drivers = flat
tenant_network_types =
mechanism_drivers = linuxbridge
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider
[securitygroup]
enable_ipset = true
第4步,启用ML2插件。
只有在“/etc/neutron/”下的插件才能生效,因此将“ml2_conf.ini”映射为“/etc/neutron/”下的“plugin.ini”文件,使ML2插件启用。
[root@controller ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
(4)修改网桥代理配置文件
第1步,备份文件并将配置文件去掉注释和空行
首先、备份配置文件。
[root@controller ~]# cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini /etc/neutron/plugins/ml2/linuxbridge_agent.bak
其次、去掉所有注释和空行,生成新的配置文件。
[root@controller ~]# grep -Ev '^$|#' /etc/neutron/plugins/ml2/linuxbridge_agent.bak >
/etc/neutron/plugins/ml2/linuxbridge_agent.ini
这里的正则表达式“^|#”的具体含义为:匹配空行(“^”,其中“^”是一行的开头,“$”是一行的结尾),或者(符号“|”表示或者)匹配第一个字符为“#”的行。结合反向匹配参数“-v”,最终匹配的是所有不为空和不以注释符号“#”开头的行。
第2步,编辑新的配置文件
打开配置文件进行编辑。
[root@controller ~]# nano /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:ens34
[vxlan]
enable_vxlan = false
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
(5)配置Layer-3代理:
[root@controller ~]# nano /etc/neutron/l3_agent.ini
[DEFAULT]
interface_driver = linuxbridge
(6)修改DHCP代理配置文件
第1步,备份配置文件去掉注释和空行
首先,备份配置文件。
[root@controller ~]# cp /etc/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.bak
其次,去掉所有注释和空行,生成新的配置文件。
[root@controller ~]# grep -Ev '^$|#' /etc/neutron/dhcp_agent.bak> /etc/neutron/dhcp_agent.ini
这里的正则表达式“^|#”的具体含义为:匹配空行(“^”,其中“^”是一行的开头,“$”是一行的结尾),或者(符号“|”表示或者)匹配第一个字符为“#”的行。结合反向匹配参数“-v”,最终匹配的是所有不为空和不以注释符号“#”开头的行。
第2步,编辑新的配置文件
打开配置文件进行编辑。
[root@controller ~]# nano /etc/neutron/dhcp_agent.ini
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
(7)修改元数据代理配置文件
云主机运行在计算节点上,在其运行过程中需要和控制节点的“nova-api”模块交互,让Nova为云主机提供元数据。这个交互需要通过Neutron的“neutron-metadata-agent”进行。“neutron-metadata-agent”和“nova-api”一样运行在控制节点上,云主机先将元数据请求发送给“neutron-metadata-agent”,“neutron-metadata-agent”再将请求转发给“nova-api。
第一步,备份配置文件,并去掉注释行
[root@controller ~]# cp /etc/neutron/metadata_agent.ini /etc/neutron/metadata_agent.bak
[root@controller ~]# grep -Ev '^$|#' /etc/neutron/metadata_agent.bak >/etc/neutron/metadata_agent.ini
第二步,编辑新的配置文件
[root@controller ~]# nano /etc/neutron/metadata_agent.ini
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET
(8)修改nova配置文件
Nova处于整个云计算平台系统的核心位置,需要和各个组件交互,因此Nova配置文件中需要指明如何与Neutron进行交互。
[root@controller ~]# nano /etc/nova/nova.conf
在[neutron]部分增加以下内容。
[neutron]
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = project
username = neutron
password = 000000
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
4、同步数据库
同步数据库的目的是将安装文件中的数据库的表信息填充到数据库中
[root@controller ~]# 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
三、初始化Neutron组件
以下内容在控制节点完成
(1)创建neutron用户并分配角色
第1步,导入环境变量模拟登录。
[root@controller ~]# . admin-login
第2步,在OpenStack云计算平台中创建用户“neutron”。
[root@controller ~]# openstack user create --domain default --password 000000 neutron
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 1113d6ba878d475bb6aab33f5cc914a2 |
| name | neutron |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
第3步,给用户“neutron”分配“admin”角色
[root@controller ~]# openstack role add --project project --user neutron admin
(2)创建neutron服务及服务端点
第1步,创建服务
创建名“neutron”、类型“network”的服务。
[root@controller ~]# openstack service create --name neutron network
+---------+----------------------------------+
| Field | Value |
+---------+----------------------------------+
| enabled | True |
| id | f8754455a8da4f059df7e4d39c2df07d |
| name | neutron |
| type | network |
+---------+----------------------------------+
第2步,创建服务端点
OpenStack组件的服务端点有3种,分别对应Admin用户(admin)、内部组件(internal)、公众用户(public)服务的地址。
创建公众用户访问的服务端点。
[root@controller ~]# openstack endpoint create --region RegionOne neutron public http://controller:9696
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | c6d05eb3b1a14b8b8bfcef9d81c3e5ea |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | f8754455a8da4f059df7e4d39c2df07d |
| service_name | neutron |
| service_type | network |
| url | http://controller:9696 |
+--------------+----------------------------------+
创建内部组件访问的服务端点。
[root@controller ~]# openstack endpoint create --region RegionOne neutron internal http://controller:9696
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 5dc03b3a2bb4497ab2cd68f8bddee23f |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | f8754455a8da4f059df7e4d39c2df07d |
| service_name | neutron |
| service_type | network |
| url | http://controller:9696 |
+--------------+----------------------------------+
创建Admin用户访问端点。
[root@controller ~]# openstack endpoint create --region RegionOne neutron admin http://controller:9696
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 856d560ac7e24eb4bd0ba09a477ff441 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | f8754455a8da4f059df7e4d39c2df07d |
| service_name | neutron |
| service_type | network |
| url | http://controller:9696 |
+--------------+----------------------------------+
(3)启动Neutron服务
由于修改了Nova的配置文件,因此启动Neutron服务前,还需要重启Nova服务。
第1步,重启Nova服务。
[root@controller ~]# systemctl restart openstack-nova-api
第2步,启动Neutron服务。
首先,设置Neutron服务组件、网桥代理、DHCP代理、元数据代理开机启用。
[root@controller ~]# systemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
然后,立即启用Neutron服务组件、网桥代理、DHCP代理、元数据代理。
[root@controller ~]# systemctl start neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
四、检测控制节点的Neutron服务
1.查看端口占用情况
由于Neutron服务会占用9696端口,通过查看这个端口是否启用,可以判断Neutron服务是否已经运行。
[root@controller ~]# netstat -tnlup|grep 9696
tcp 0 0 0.0.0.0:9696 0.0.0.0:* LISTEN 2339/server.log
2.检测服务端点
[root@controller ~]# curl http://controller:9696
{"versions": [{"status": "CURRENT", "id": "v2.0", "links": [{"href": "http://controller:9696/v2.0/", "rel": "self"}]}]}
3.查看服务运行状态
[root@controller ~]# systemctl status neutron-server
● neutron-server.service - OpenStack Neutron Server
Loaded: loaded (/usr/lib/systemd/system/neutron-server.service; enabled; vendor preset: disabled)
Active: active (running) since 四 2022-10-27 14:52:08 CST; 3min 31s ago
Main PID: 4617 (/usr/bin/python)
CGroup: /system.slice/neutron-server.service
├─4617 /usr/bin/python2 /usr/bin/neutron-server --config-file /usr/share/neutron/neutron-dist.conf --config-dir /usr/share/neutron/server --confi...
├─4689 /usr/bin/python2 /usr/bin/neutron-server --config-file /usr/share/neutron/neutron-dist.conf --config-dir /usr/share/neutron/server --confi...
├─4690 neutron-server: rpc worker (/usr/bin/python2 /usr/bin/neutron-server --config-file /usr/share/neutron/neutron-dist.conf --config-dir /usr/...
├─4691 neutron-server: rpc worker (/usr/bin/python2 /usr/bin/neutron-server --config-file /usr/share/neutron/neutron-dist.conf --config-dir /usr/...
└─4692 neutron-server: periodic worker (/usr/bin/python2 /usr/bin/neutron-server --config-file /usr/share/neutron/neutron-dist.conf --config-dir ...
10月 27 14:51:57 controller systemd[1]: Starting OpenStack Neutron Server...
10月 27 14:52:03 controller neutron-server[4617]: /usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py:22: PkgResourcesDeprecationWarning: Par...arately.
10月 27 14:52:03 controller neutron-server[4617]: return pkg_resources.EntryPoint.parse("x=" + s).load(False)
10月 27 14:52:08 controller systemd[1]: Started OpenStack Neutron Server.
Hint: Some lines were ellipsized, use -l to show in full.
如果结果中能看到,“Loaded”状态是"enable",说明该服务已经设置了开机自启。"Active"状态是"active(running)",说明当前服务处于运行状态。