文章目录
- OpenStack(T版)——网络(Neutron)服务介绍与安装
- 安装和配置(controller)
- 准备
- (1)创建数据库
- (2)加载admin user的环境变量
- (3)创建服务凭证
- 配置Neutron网络服务组件
- (1)安装软件
- (2)编辑文件/etc/neutron/neutron.conf,完成以下操作
- (3)配置Layer 2 (ML2)plug-in模块
- (4)配置桥接代理
- (5)配置三层代理
- (6)配置DHCP代理
- (7)配置元数据代理
- (8)配置计算服务以使用网络服务
- 完成安装
- 安装和配置(compute)
- 网络服务组件安装和配置通用组件
- (1)安装软件包
- (2)配置通用组件
- 配置网络核心组件
- 配置计算服务组件
- 完成安装
- 验证
OpenStack(T版)——网络(Neutron)服务介绍与安装
OpenStack Neutron 就是为 OpenStack 虚拟机提供网络连接的服务。类比于现实生活中的网络,就像我们需要连接电脑、手机等设备到路由器上才能上网一样,虚拟机也需要连接到虚拟网络中才能进行通信和访问外部网络。而 Neutron 就是提供这个连接的服务。它能够帮助用户灵活地管理虚拟机的网络连接,包括分配 IP 地址、设置子网、路由器等网络设备,以及控制网络访问权限等。同时,Neutron 还支持多种网络虚拟化技术,能够让多个虚拟网络之间互相隔离和通信。
Flat、Local VLAN、VXLAN 和 GRE 都是 OpenStack Neutron 中的网络虚拟化技术,用于在虚拟机之间或虚拟机与外部网络之间建立虚拟网络连接
下面分别解释这四种技术的含义和特点:
Flat技术最简单,只是直接把数据包发送到物理网络,不支持流量隔离和管理
VLAN技术基于虚拟局域网,将虚拟网络划分成多个逻辑网络,适用于单一物理网络环境下的虚拟网络;
VXLAN和GRE技术则是用UDP和IP协议将虚拟网络划分成多个逻辑网络,适用于跨物理网络或数据中心之间的虚拟网络部署。
安装和配置(controller)
准备
ens33(controller,compute)
[root@controller ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=none
DEVICE=ens33
ONBOOT=yes
(1)创建数据库
①在操作系统终端连接数据库
[root@controller ~]# mysql -u root -p000000
②创建Neutron数据库
MariaDB [(none)]> CREATE DATABASE neutron;
③Neutron数据库的访问权限设置
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '000000';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '000000';
④退出数据库
MariaDB [(none)]> exit
(2)加载admin user的环境变量
[root@controller ~]# source admin-openrc.sh
(3)创建服务凭证
①创建Neutron用户
[root@controller ~]# openstack user create --domain default --password-prompt neutron
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 95213d68498d48efae7f986fc56c20ba |
| name | neutron |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
②将admin role 赋予 neutron user 和service project
[root@controller ~]# openstack role add --project service --user neutron admin
③创建Neutron 网络服务 service entity
[root@controller ~]# openstack service create --name neutron --description "OpenStack Networking" network
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Networking |
| enabled | True |
| id | 4cd0a74d9e824a2186bd5c8a25f1ce8c |
| name | neutron |
| type | network |
+-------------+----------------------------------+
(4)创建Neutron网络服务组件的API endpoint
[root@controller ~]# openstack endpoint create --region RegionOne network public http://controller:9696
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 5d704d8177b94d22814c77200fbf7502 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | a868e8135c7242be99881bf452a826cb |
| service_name | neutron |
| service_type | network |
| url | http://controller:9696 |
+--------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne network internal http://controller:9696
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 247feaa6e95346b78eb5dbb6aecbfbb7 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | a868e8135c7242be99881bf452a826cb |
| service_name | neutron |
| service_type | network |
| url | http://controller:9696 |
+--------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne network admin http://controller:9696
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 2132cb74585342ccb6728889a7726fd3 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | a868e8135c7242be99881bf452a826cb |
| service_name | neutron |
| service_type | network |
| url | http://controller:9696 |
+--------------+----------------------------------+
配置Neutron网络服务组件
官方文档
Neutron网络服务组件的设计架构可以分为两种,提供商网络和自服务网络。
- 提供商网络比较简单,虚拟机实例连接公共网络(Public Network),没有自服务网络(Self-Service Network)、路由和浮动IP地址(Floatiing IP address),只有管理员或者有权限的用户可以操作公共网络。在这种架构下,虚拟机实例只能通过公共网络与外部网络通信,不能直接访问公共网络之外的网络。
- 自服务网络是在简单架构的基础上增加了第三层服务,支持自服务(Self-Service)网络。在这种架构下,管理员和有权限的用户可以管理自服务网络,自服务网络可以分配给虚拟机实例,并且通过自服务网络可以访问外部网络。此外,自服务网络还支持路由和浮动IP地址,可以实现更加灵活的网络管理。
自服务网络比提供商网络更加灵活,可以实现更加复杂的网络拓扑结构,满足更加多样化的应用场景
本次采用自服务网络进行配置
以下操作均在controller节点执行
(1)安装软件
[root@controller ~]# yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
(2)编辑文件/etc/neutron/neutron.conf,完成以下操作
①在[database]
部分中,配置数据库访问
[root@controller ~]# vim /etc/neutron/neutron.conf
[database]
connection = mysql+pymysql://neutron:000000@controller/neutron
②在[DEFAULT]
部分中,启动 Layer 2 (ML2) plug-in、路由服务和IP地址重叠功能
[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
③在[DEFAULT]
部分中,配置RabbitMQ
消息队列访问
[DEFAULT]
transport_url = rabbit://openstack:000000@controller
④在[DEFAULT]
和[keystone_authtoken]
部分中,配置身份服务访问
[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 = service
username = neutron
password = 000000
⑤在[DEFAULT]
和[nova]
部分中,配置Neutron网络服务通知Nova计算服务关于网络拓扑的改变
[DEFAULT]
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
# 这两个参数的作用是通知 Nova 计算服务组件有关端口状态和数据变化的信息
# 具体来说,当虚拟机实例的网络端口状态发生变化时
# 例如端口被创建、更新或删除时,Neutron 会将相关信息发送给 Nova
# 以便 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 = 000000
⑥在[oslo_concurrency]
部分中,配置锁定路径
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
(3)配置Layer 2 (ML2)plug-in模块
ML2 plug-in使用桥接机制为虚拟机实例桥接和交换网络信息
①编辑文件 /etc/neutron/plugins/ml2/ml2_conf.ini
,在[ml2]
项,完成以下操作
ml2_conf.ini
①在[ml2]
部分中,完成以下操作
[root@controller ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
②在[ml2_type_flat]
部分中,完成以下操作
[ml2_type_flat]
flat_networks = provider # 定义 flat 类型网络的网络名称
③[ml2_type_vxlan]
中,配置 VXLAN为 Private Network提供的标识范围
[ml2_type_vxlan]
vni_ranges = 1:1000 # 定义 VXLAN 类型网络的 VNI 范围
④在[securitygroup]
项,启用ipsect提高安全组规则的效率
[securitygroup]
enable_ipset = true # 这个参数用来启用 ipset 防火墙驱动
(4)配置桥接代理
Linux 桥接代理为实例构建第 2 层(桥接和交换)虚拟网络基础设施并处理安全组
编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件并完成以下操作
linuxbridge_agent.ini
①在[linux_bridge]
部分中,将提供商虚拟网络映射到提供商物理网络接口
[root@controller ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:ens33 # 定义 Linux Bridge 网络服务的物理网络映射关系。
# PROVIDER_INTERFACE_NAME 表示物理网络接口的名称,这个名称需要根据实际情况进行配置。
②在[vxlan]
项,启用 VXLAN功能和 Layer 2 population,配置处理 Overlay Network 的物理网络端口的IP地址
[vxlan]
enable_vxlan = true
local_ip = 192.168.200.10
l2_population = true
# enable_vxlan:表示是否启用 VXLAN 技术
# local_ip表示 VXLAN 网络隧道的本地 IP 地址
# l2_population表示是否启用 L2 Population 技术
③在[securitygroup]
部分中,启用安全组并配置 Linux 桥接 iptables 防火墙驱动程序
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
# firewall_driver:表示防火墙驱动类型
# enable_security_group:表示是否启用安全组功能。
④修改/etc/sysctl.conf写入如下内容
[root@controller ~]# vim /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
# 当这些参数的值为 1 时,Linux Bridge 桥接的数据包会经过 iptables 或 ip6tables 处理
# 从而可以实现访问控制、网络隔离等安全措施。
[root@controller ~]# modprobe br_netfilter # 加载 br_netfilter 内核模块。
[root@controller ~]# sysctl -p
# 用于加载系统的 sysctl 参数文件
(5)配置三层代理
编辑/etc/neutron/l3_agent.ini
文件并完成以下操作
在[DEFAULT]
部分中,配置 Linux 桥接接口驱动程序
[root@controller ~]# vim /etc/neutron/l3_agent.ini
[DEFAULT]
interface_driver = linuxbridge
# 指定了 Neutron 使用的网络插件,即 Linux Bridge 插件。
(6)配置DHCP代理
DHCP代理为虚拟网络提供DHCP服务。
编辑/etc/neutron/dhcp_agent.ini
文件并完成以下操作
[root@controller ~]# vim /etc/neutron/dhcp_agent.ini
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
# interface_driver指定了 Neutron 使用的网络插件
# dhcp_driver指定了 Neutron 使用的 DHCP 代理程序
# enable_isolated_metadata启用了 Neutron 的元数据服务。
(7)配置元数据代理
元数据代理项实例提供配置信息
编辑/etc/neutron/metadata_agent.ini
文件并完成以下操作
①在 部分中[DEFAULT]
,配置元数据主机和共享密钥
[root@controller ~]# vim /etc/neutron/metadata_agent.ini
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = 000000
# nova_metadata_host指定了 Nova 元数据服务的主机地址,即控制节点的 IP 地址或主机名
# metadata_proxy_shared_secret指定了 Nova 元数据代理程序的共享密钥
# 即元数据服务和元数据代理程序之间进行通信时使用的密钥
(8)配置计算服务以使用网络服务
必须安装 Nova 计算服务才能完成此步骤
编辑该/etc/nova/nova.conf
文件并执行以下操作
①在[neutron]
部分中,配置访问参数、启用元数据代理并配置密钥
[root@controller ~]# vim /etc/nova/nova.conf
[neutron]
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 = 000000
service_metadata_proxy = true
metadata_proxy_shared_secret = 000000
完成安装
①网络服务初始化脚本需要一个指向 /etc/neutron/plugin.ini
ML2 插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini
.如果此符号链接不存在,请使用以下命令创建它
[root@controller ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
②同步数据库
[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
③重启API服务
[root@controller ~]# systemctl restart openstack-nova-api.service
④启动网络服务并设置开机自启
[root@controller ~]# systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent && systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent
# 自行查看日志文件没有error就可以了
安装和配置(compute)
网络服务组件安装和配置通用组件
(1)安装软件包
[root@compute ~]# yum install -y openstack-neutron-linuxbridge ebtables ipset
(2)配置通用组件
Neutron网络服务组件的通用部分包括认证机制、消息队列和plug-in
①编辑/etc/neutron/neutron.conf
文件并完成以下操作
在[database]
部分中,注释掉所有connection
选项,因为计算节点不直接访问数据库
②在[DEFAULT]
部分中,配置RabbitMQ
消息队列访问
[root@compute ~]# vim /etc/neutron/neutron.conf
[DEFAULT]
transport_url = rabbit://openstack:000000@controller
③在[DEFAULT]
和[keystone_authtoken]
部分中,配置身份服务访问
[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 = service
username = neutron
password = 000000
④在[oslo_concurrency]
部分中,配置锁定路径
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
配置网络核心组件
官方文档
(1)编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件
①在[linux_bridge]
部分中,将Public Network 虚拟网络端口映射到物理网络端口
[root@compute ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:ens33
# Linux Bridge 插件将使用 ens34 网卡来连接 provider 物理网络
# 实现虚拟网络和物理网络之间的数据交换。
②在[vxlan]
部分中,启用VXLAN功能和 Layer 2 population,配置处理Overlay Network 的物理网络端口的IP地址
[vxlan]
enable_vxlan = true
local_ip = 192.168.200.20
l2_population = true
③在[securitygroup]
部分中,启用安全组并配置 Linux 桥接 iptables 防火墙驱动程序
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
⑤添加/etc/sysctl.conf内容
[root@compute ~]# vim /etc/sysctl.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[root@compute ~]# modprobe br_netfilter
[root@compute ~]# sysctl -p
配置计算服务组件
(1)编辑/etc/nova/nova.conf
文件并完成以下操作
在[neutron]
部分中,配置访问参数
[root@compute ~]# vim /etc/nova/nova.conf
[neutron]
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 = 000000
完成安装
重新启动计算服务
[root@compute ~]# systemctl restart openstack-nova-compute.service
启动bridge agent 并设置为开机自启
[root@compute ~]# systemctl start neutron-linuxbridge-agent.service && systemctl enable neutron-linuxbridge-agent.service
Created symlink from /etc/systemd/system/multi-user.target.wants/neutron-linuxbridge-agent.service to /usr/lib/systemd/system/neutron-linuxbridge-agent.service
验证
(1)加载环境变量文件
[root@controller ~]# source admin-openrc.sh
(2) 到controller验证 openstack network agent list