标签(空测试用例格分隔):OpenStack Train 系列


一: Neutron 服务安装

1.1 Neutron 简介

OpenStack 网络使用的是一个 SDN(Software Defined Networking)组件,即 Neutron,SDN 是一个可插拔的架构,支持插入交换机、防火墙、负载均
衡器等,这些都定义在软件中,从而实现对整个云基础设施的精细化管控。
前期规划,将 ens33 网口作为外部网络(在 Openstack 术语中,外部网络常被称之为 Provider 网络),同时也用作管理网络,便于测试访问,生产环境
建议分开;ens35 网络作为租户网络,即 vxlan 网络;ens36 作为 ceph 集群网络。
OpenStack 网络部署方式可选的有 OVS 和 LinuxBridge。此处选择 LinuxBridge 模式,部署大同小异。
在控制节点上要启动的服务 neutron-server.service
neutron-linuxbridge-agent.service
neutron-dhcp-agent.service
neutron-metadata-agent.service
neutron-l3-agent.service

1.2 Neutron 在控制节点的安装与配置VXLAN 网络

1、登录数据库创建 neutron 数据库
MariaDB [(none)]> CREATE DATABASE neutron default character set utf8;
创建并授予 neutron 用户完全操作 neutron 库权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'openstack';
2、创建用户和 API 服务端点
# source /etc/keystone/admin-openrc.sh
创建 Neutron 用户,密码设置为 openstack2022
openstack user create --domain default --password openstack2022 neutron
/*
说明:使用 --password openstack2022 neutron 是非交互式方式,而 --password-prompt 是交互式,需要在窗口输入 2 次密码确认
*/
将 neutron 加入到 service 项目以及 admin 角色
# openstack role add --project service --user neutron admin
创建 Neutron 服务实体。
# openstack service create --name neutron --description "OpenStack Networking" network

创建 Neutron API 服务端点。
# 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

OpenStack Train(六):业务组件Neutron装安装_虚拟化OpenStack Train(六):业务组件Neutron装安装_虚拟化_02OpenStack Train(六):业务组件Neutron装安装_neutron_03OpenStack Train(六):业务组件Neutron装安装_虚拟化_04

1.3 安装Neutron 网络

3、安装配置 Neutron
采用 Provider-LinuxBridge 模式
# yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
修改配置文件/etc/neutron/neutron.conf
# cd /etc/neutron/ && mv neutron.conf neutron.conf.source && cat neutron.conf.source |grep -Ev "^#|^$" > neutron.conf && chown root:neutron neutron.conf
# vi /etc/neutron/neutron.conf
修改[DEFAULT]部分,增加如下配置
[DEFAULT]
# 启用 Modular Layer 2 (ML2)插件
core_plugin = ml2
# service_plugins 默认为空,如果值是 router 表示支持路由模式,即 vxlan
service_plugins = router
transport_url = rabbit://openstack:openstack@controller
# 设置验证策略
auth_strategy = keystone
# 通知计算节点的网络拓扑变化
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
allow_overlapping_ips = true
修改[database]部分,配置数据库访问。
[database]
connection = mysql+pymysql://neutron:openstack@controller/neutron
修改[keystone_authtoken]部分,配置身份认证
[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 = openstack2022
token_cache_time=3600
增加[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 = openstack2022
说明:配置文件中默认没有该模块,需要新增
修改[oslo_concurrency]部分,配置锁定路径。
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp

OpenStack Train(六):业务组件Neutron装安装_openstack_05OpenStack Train(六):业务组件Neutron装安装_虚拟化_06OpenStack Train(六):业务组件Neutron装安装_openstack_07OpenStack Train(六):业务组件Neutron装安装_虚拟化_08

修改 ML2 插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini
参考:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/neutron-controller-install-option2.html
# cd /etc/neutron/plugins/ml2 && mv ml2_conf.ini ml2_conf.ini.source && cat ml2_conf.ini.source |grep -Ev "^#|^$" > ml2_conf.ini && chown root:neutron ml2_conf.ini

# vi /etc/neutron/plugins/ml2/ml2_conf.ini
启用 flat 和 vlan、vxlan 网络,需要新增加 [ml2][ml2_type_flat][ml2_type_vxlan][securitygroup]配置
增加[ml2]部分,配置支持 vxlan
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
增加[ml2_type_flat]部分,将 provider 配置为 flat 网络
[ml2_type_flat]
flat_networks = provider
增加[ml2_type_vlan]部分,将 vlan 配置为 flat 网络
[ml2_type_vlan]
network_vlan_ranges = provider
增加[ml2_type_vxlan]部分,配置 vxlan 网络识别的网络范围
[ml2_type_vxlan]
# 取值范围 1-16777215
vni_ranges = 1:3000
增加[securitygroup]部分,启用 ipset 提高安全效率。
[securitygroup]
enable_ipset = true

OpenStack Train(六):业务组件Neutron装安装_neutron_09OpenStack Train(六):业务组件Neutron装安装_neutron_10

修改/etc/neutron/plugins/ml2/linuxbridge_agent.ini 文件,配置 Linux 桥代理

# cd /etc/neutron/plugins/ml2 && mv linuxbridge_agent.ini linuxbridge_agent.ini.source && cat linuxbridge_agent.ini.source |grep -Ev "^#|^$" > linuxbridge_agent.ini && chown root:neutron linuxbridge_agent.ini

# vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
增加[linux_bridge]部分,将 Provider 虚拟网络映射到物理网络(能与外网通信的网段)
[linux_bridge]
physical_interface_mappings = provider:ens33
增加[vxlan]部分,启用 vxlan 叠加网络
[vxlan]
# 如果要禁用 vxlan,则设置为 false,同时注释 local_ip 和 l2_population
enable_vxlan = true
# 每个(控制和计算)节点都要添加一个网卡,给 vxlan 专用,并且要配置 IP 地址(不需要配置网关,配置 IP 后,各节点可以使用对应 IP ping 通)
local_ip = 10.16.10.11
l2_population = true
增加[securitygroup]部分,启用安全组并配置 LinuxBridge iptables 驱动。
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

/*
说明:local_ip 要修改成控制节点/计算节点实际用于 vxlan IP。 provider 网络使用的是 ens33 网口,部署时根据实际情况调整,provider 网络可以理解为能与外部互联网相通的网络,后面在创建 Flat 类型网络时
--provider-physical-network 要指定是 provider。
*/


修改内核配置文件/etc/sysctl.conf,确保系统内核支持网桥过滤器

# vi /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
执行以下命令,添加网桥过滤器,并设置开机加载

# modprobe br_netfilter
# sysctl -p
# sed -i '$amodprobe br_netfilter' /etc/rc.local
# chmod +x /etc/rc.d/rc.local

OpenStack Train(六):业务组件Neutron装安装_openstack_11OpenStack Train(六):业务组件Neutron装安装_neutron_12OpenStack Train(六):业务组件Neutron装安装_openstack_13

修改/etc/neutron/dhcp_agent.ini 文件,配置 DHCP 代理
# cd /etc/neutron/ && mv dhcp_agent.ini dhcp_agent.ini.source && cat dhcp_agent.ini.source |grep -Ev "^#|^$" > dhcp_agent.ini && chown root:neutron dhcp_agent.ini

# vi /etc/neutron/dhcp_agent.ini

[DEFAULT]部分,配置 Linuxbridge 驱动接口,DHCP 驱动并启用隔离元数据,这样在公共网络上的实例就可以通过网络来访问元数据

[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true

修改/etc/neutron/metadata_agent.ini 文件,配置元数据代理
# cd /etc/neutron/ && mv metadata_agent.ini metadata_agent.ini.source && cat metadata_agent.ini.source |grep -Ev "^#|^$" > metadata_agent.ini && chown root:neutron metadata_agent.ini

# vi /etc/neutron/metadata_agent.ini
[DEFAULT]部分,配置元数据主机和共享秘钥
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = openstack2022

修改/etc/neutron/l3_agent.ini 文件,配置 layer-3 代理
# cd /etc/neutron/ && mv l3_agent.ini l3_agent.ini.source && cat l3_agent.ini.source |grep -Ev "^#|^$" > l3_agent.ini && chown root:neutron l3_agent.ini

# vi /etc/neutron/l3_agent.ini
[DEFAULT]部分,配置 Linuxbridge 接口驱动和外部网络网桥
[DEFAULT]
interface_driver = linuxbridge
external_network_bridge =

OpenStack Train(六):业务组件Neutron装安装_虚拟化_14OpenStack Train(六):业务组件Neutron装安装_openstack_15OpenStack Train(六):业务组件Neutron装安装_neutron_16

1.4、配置neutron的Nova 部署

配置计算服务以使用 Neutron 网络(此步可以放到安装并配置 nova) (前提:已经安装了 nova 服务) 
yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
# cd /etc/nova/ && mv nova.conf nova.conf.source && cat nova.conf.source |grep -Ev "^#|^$" > nova.conf && chown root:nova nova.conf
# vi /etc/nova/nova.conf
[neutron]部分,配置访问参数
[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 = openstack2022
service_metadata_proxy = true
metadata_proxy_shared_secret = openstack2022

OpenStack Train(六):业务组件Neutron装安装_neutron_17OpenStack Train(六):业务组件Neutron装安装_虚拟化_18

4、初始化创建网络
# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

5、同步 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
6、启动 neutron 各服务并设置为开机自启动
# systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service
# systemctl restart neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service
# systemctl status neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service

OpenStack Train(六):业务组件Neutron装安装_neutron_19OpenStack Train(六):业务组件Neutron装安装_neutron_20OpenStack Train(六):业务组件Neutron装安装_neutron_21OpenStack Train(六):业务组件Neutron装安装_openstack_22

二:Neutron 在计算节点computer01/computer02的安装

2.1 在computer01 与 computer02 节点同时安装

1、安装组件,由于 neutron 和 nova 之间有相互调用配置,此处将计算服务一并安装
# yum -y install openstack-nova-compute
# yum -y install openstack-neutron-linuxbridge ebtables ipset

2、修改配置文件/etc/neutron/neutron.conf
# cd /etc/neutron/ && mv neutron.conf neutron.conf.source && cat neutron.conf.source |grep -Ev "^#|^$" > neutron.conf && chown root:neutron neutron.conf
# vi /etc/neutron/neutron.conf
[DEFAULT]部分,配置 RabbitMQ 消息队列访问。
[DEFAULT]
transport_url = rabbit://openstack:openstack@controller
[DEFAULT]部分,配置身份认证服务
[DEFAULT]
auth_strategy = keystone
[database]
connection = mysql+pymysql://neutron:openstack@controller/neutron
[keystone_authtoken]部分,配置身份认证服务
[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 = openstack2022
token_cache_time=3600
[oslo_concurrency]部分,配置锁定路径
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp

OpenStack Train(六):业务组件Neutron装安装_虚拟化_23

3、修改配置文件/etc/neutron/plugins/ml2/linuxbridge_agent.ini
为实例建立 layer-2 虚拟网络并且处理安全组规则,并将 Flat 网络和外部物理业务网络接口对应起来
# cd /etc/neutron/plugins/ml2 && mv linuxbridge_agent.ini linuxbridge_agent.ini.source && cat linuxbridge_agent.ini.source |grep -Ev "^#|^$" > linuxbridge_agent.ini && chown root:neutron linuxbridge_agent.ini
# vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:ens33
[vxlan]
enable_vxlan = true
local_ip = 10.16.10.12
l2_population = true
[securitygroup]
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
enable_security_group = True

OpenStack Train(六):业务组件Neutron装安装_neutron_24

说明:local_ip 要修改成计算节点实际用于 vxlan IP。 provider 网络使用的是 ens33 网口,部署时根据实际情况调整,provider 网络可以理解为能与外部互联网相通的网络,后面在创建 Flat 类型网络时物理
网络 --provider-physical-network 要指定是 provider。
4、修改内核配置文件/etc/sysctl.conf,确保系统内核支持网桥过滤器
# vi /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
执行以下命令,添加网桥过滤器,并设置开机加载
# modprobe br_netfilter
# sysctl -p
# sed -i '$amodprobe br_netfilter' /etc/rc.local
# chmod +x /etc/rc.d/rc.local
5、启动 neutron-linuxbridge-agent 服务并设置开机自启动
# systemctl enable neutron-linuxbridge-agent.service && systemctl restart neutron-linuxbridge-agent.service

OpenStack Train(六):业务组件Neutron装安装_neutron_25

6、将上述 1-5 步在计算节点 compute02 上执行一次或者使用以下步骤
a、安装组件
# yum -y install openstack-nova-compute
# yum -y install openstack-neutron-linuxbridge ebtables ipset
b、在计算节点 compute01 上直接拷贝配置文件到 compute02 上
# scp /etc/neutron/neutron.conf root@compute02:/etc/neutron/
# scp /etc/neutron/plugins/ml2/linuxbridge_agent.ini root@compute02:/etc/neutron/plugins/ml2/
# scp /etc/sysctl.conf root@compute02:/etc
c、在 compute02 上操作
# sed -i 's/10.12/10.13/g' /etc/neutron/plugins/ml2/linuxbridge_agent.ini
# modprobe br_netfilter
# sysctl -p
# sed -i '$amodprobe br_netfilter' /etc/rc.local
# chmod +x /etc/rc.d/rc.local
d、启动 neutron-linuxbridge-agent 服务并设置开机自启动
# systemctl enable neutron-linuxbridge-agent.service
# systemctl restart neutron-linuxbridge-agent.service

OpenStack Train(六):业务组件Neutron装安装_虚拟化_26OpenStack Train(六):业务组件Neutron装安装_openstack_27

三:验证Neutron 服务

三、验证 Neutron
在控制节点执行以下操作进行验证。
# source /etc/keystone/admin-openrc.sh
1、列出成功启动的 Neutron 代理
# openstack network agent list

/* 说明:如果 下面 agent list 中没有 L3 agent,说明 neutron-l3-agent.service 没有启动 */

![image.png](https://cdn.nlark.com/yuque/0/2022/png/2549257/1650251215368-6c33a12a-2f99-4085-9322-f78c269adcf6.png#clientId=u74939567-8814-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=251&id=ubf9b0cd7&margin=%5Bobject%20Object%5D&name=image.png&originHeight=628&originWidth=3009&originalType=binary&ratio=1&rotation=0&showTitle=false&size=181229&status=done&style=none&taskId=u79515c82-c1a7-4f59-b71f-dee2ccc41c4&title=&width=1203.6)
2、创建一个 Flat 网络
# openstack network create --share --external --provider-network-type flat public --provider-physical-network provider

OpenStack Train(六):业务组件Neutron装安装_虚拟化_28OpenStack Train(六):业务组件Neutron装安装_neutron_29

说明:在 linuxbridge_agent.ini 文件中的 physical_interface_mappings = provider:ens33,所以当前创建的 flat 类型的物理网络
--provider-physical-network 要指定为 provider

创建子网
在类型为 Flat 名称为 public 网络下创建子网
# openstack subnet create --network public \
--allocation-pool start=172.16.10.100,end=172.16.10.240 \
--dns-nameserver 223.5.5.5 \
--gateway 172.16.10.2 \
--subnet-range 172.16.10.0/24 subnet_172.16.10

OpenStack Train(六):业务组件Neutron装安装_虚拟化_30OpenStack Train(六):业务组件Neutron装安装_neutron_31

创建网络接口
# openstack port create --network public --fixed-ip subnet=subnet_172.16.10 ip-address=172.16.10.110

OpenStack Train(六):业务组件Neutron装安装_openstack_32OpenStack Train(六):业务组件Neutron装安装_neutron_33

查看网络
# openstack network list
查看子网
# openstack subnet list
查看网络接口
# openstack port list
删除网络
# openstack port delete ip-address=172.16.10.110
# openstack subnet delete subnet_172.16.10
# openstack network delete public
说明:删除网络前,要先后顺序删除,即先要删除子网下的网络接口-->删除子网-->删除网络

删掉之后要从新创建

# openstack network create --share --external --provider-network-type flat public --provider-physical-network provider
# openstack subnet create --network public \
--allocation-pool start=172.16.10.100,end=172.16.10.240 \
--dns-nameserver 223.5.5.5 \
--gateway 172.16.10.2 \
--subnet-range 172.16.10.0/24 subnet_172.16.10