1
2
3
4
5
6
7
作者:李晓辉

联系方式:

微信:Lxh_Chat

邮箱:939958092@qq.com

前言

在OpenStack环境中,选择合适的网络后端对于构建高效、灵活的虚拟网络至关重要。Linux Bridge作为一种轻量级、易于部署的网络解决方案,适用于多种网络拓扑。本文将详细介绍如何在OpenStack环境中安装和配置Linux Bridge网络机制,帮助你实现虚拟网络的高效管理和灵活配置。

Linux Bridge网络机制概述

Linux Bridge的作用

Linux Bridge通过Linux内核的桥接功能实现虚拟网络的创建和管理,其主要功能包括:

  1. 虚拟交换机功能:提供虚拟机之间的网络连接。

  2. VLAN支持:支持VLAN划分,实现网络隔离。

  3. 简单易用:基于Linux内核功能,易于部署和管理。

Linux Bridge的工作原理

Linux Bridge通过以下机制实现虚拟网络的管理:

  1. 虚拟接口绑定:将虚拟机的虚拟接口绑定到桥接设备上。

  2. 数据包转发:根据MAC地址表进行数据包转发。

  3. VLAN标签处理:支持VLAN标签的添加和去除。

安装配置LinuxBridge网络机制

在OpenStack环境中,网络服务是实现虚拟机之间以及虚拟机与外部网络通信的关键组件。Linux Bridge作为一种轻量级、易于部署的网络解决方案,适用于多种网络拓扑。本文将详细介绍如何在OpenStack环境中安装和配置Linux Bridge网络机制,帮助你实现虚拟网络的高效管理和灵活配置。此处选择了Linux Bridge网络以及Option 2,即支持租户自建网络、路由器的模式,而不是直连外网的模式。

安装linuxbridge相关软件包

在控制节点和计算节点上安装Linux Bridge所需的软件包。这些软件包提供了网络服务的核心功能以及Linux Bridge的实现。

1
yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables

准备配置文件

/etc/neutron/neutron.conf 是网络服务的主配置文件,用于定义核心插件、服务插件、消息队列、数据库连接以及身份认证等基本信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2
crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins router
crudini --set /etc/neutron/neutron.conf DEFAULT transport_url rabbit://openstack:LiXiaohui@controller
crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes true
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes true
crudini --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips true
crudini --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit
crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_host controller
crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_userid openstack
crudini --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_password LiXiaohui
crudini --set /etc/neutron/neutron.conf database connection mysql+pymysql://neutron:LiXiaohui@controller/neutron
crudini --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri http://controller:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://controller:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_uri http://controller:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers controller:11211
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name Default
crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name Default
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name service
crudini --set /etc/neutron/neutron.conf keystone_authtoken username neutron
crudini --set /etc/neutron/neutron.conf keystone_authtoken password LiXiaohui
crudini --set /etc/neutron/neutron.conf nova region_name RegionOne
crudini --set /etc/neutron/neutron.conf nova project_domain_name Default
crudini --set /etc/neutron/neutron.conf nova project_name service
crudini --set /etc/neutron/neutron.conf nova auth_type password
crudini --set /etc/neutron/neutron.conf nova user_domain_name Default
crudini --set /etc/neutron/neutron.conf nova auth_url http://controller:5000
crudini --set /etc/neutron/neutron.conf nova username nova
crudini --set /etc/neutron/neutron.conf nova password LiXiaohui
crudini --set /etc/neutron/neutron.conf experimental linuxbridge true
crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp

或者

  • core_plugin:指定Neutron使用的网络插件。这里使用ml2(Modular Layer 2)插件,它支持多种网络类型和机制驱动。
  • service_plugins:指定Neutron支持的服务插件。这里启用了router插件,用于支持虚拟路由器功能。
  • transport_url:指定消息队列的连接字符串。这里使用RabbitMQ作为消息队列服务,用户名为openstack,密码为LiXiaohui,服务运行在controller主机上。
  • auth_strategy:指定Neutron服务使用的认证策略。这里设置为keystone,表示使用Keystone服务进行身份认证。notify_nova_on_port_status_changesnotify_nova_on_port_data_changes:启用通知Nova服务端口状态和数据变化的功能。这对于Nova和Neutron之间的协同工作非常重要。
  • allow_overlapping_ips:允许IP地址重叠。这在多租户环境中非常有用,允许不同租户使用相同的IP地址范围。
  • rpc_backend:指定Neutron使用的RPC后端。这里使用RabbitMQ作为RPC后端。
1
2
3
4
5
6
7
8
9
10
[DEFAULT]
...
core_plugin = ml2
service_plugins = router
transport_url = rabbit://openstack:LiXiaohui@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
allow_overlapping_ips = True
rpc_backend = rabbit

这部分定义了与RabbitMQ消息队列相关的配置。

1
2
3
4
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = LiXiaohui

这部分定义了Neutron服务使用的数据库连接信息。

1
2
3
[database]
...
connection = mysql+pymysql://neutron:LiXiaohui@controller/neutron

这部分定义了Neutron服务与Keystone服务进行身份认证的配置。

1
2
3
4
5
6
7
8
9
10
11
12
[keystone_authtoken]
...
www_authenticate_uri = http://controller:5000
auth_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 = LiXiaohui

这部分定义了Neutron服务与Nova服务的集成配置

1
2
3
4
5
6
7
8
9
10
[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 = LiXiaohui

这部分定义了Neutron服务的实验性功能配置

1
2
[experimental]
linuxbridge = true

这部分定义了Neutron服务的并发配置

1
2
3
[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp

配置ML2插件

ML2插件是Neutron的核心组件之一,它使用Linux Bridge机制为实例创建Layer-2虚拟网络基础设施。/etc/neutron/plugins/ml2/ml2_conf.ini 是ML2插件的配置文件,用于定义支持的网络类型、机制驱动程序、安全组功能等。

1
2
3
4
5
6
7
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers flat,vlan,vxlan
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types vxlan
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers linuxbridge,l2population
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_flat flat_networks provider
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_vxlan vni_ranges 1:1000
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset True

或者

这部分定义了ML2插件的核心配置,包括支持的网络类型、机制驱动程序和扩展驱动程序。

  • type_drivers:指定ML2插件支持的网络类型。这里支持flat(平面网络)、vlan(VLAN网络)和vxlan(VXLAN网络)。
  • tenant_network_types:指定租户网络的类型。这里设置为vxlan,表示租户网络使用VXLAN技术。
  • mechanism_drivers:指定ML2插件使用的机制驱动程序。这里使用linuxbridge(Linux Bridge机制)和l2population(L2人口机制,用于优化VXLAN网络)。
  • extension_drivers:指定ML2插件使用的扩展驱动程序。这里启用port_security,用于支持安全组功能。
1
2
3
4
5
6
[ml2]
...
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security

这部分定义了平面网络的配置。

flat_networks:指定平面网络的名称。这里设置为provider,表示使用名为provider的平面网络。

1
2
3
[ml2_type_flat]
...
flat_networks = provider

这部分定义了VXLAN网络的配置。

vni_ranges:指定VXLAN网络的VNI(VXLAN Network Identifier)范围。这里设置为1:1000,表示VNI范围从1到1000。

1
2
3
[ml2_type_vxlan]
...
vni_ranges = 1:1000

这部分定义了安全组的配置。

enable_ipset:启用IP集功能,用于优化安全组规则的处理。

1
2
[securitygroup]
enable_ipset = True

配置Linuxbridge代理

Linux Bridge代理是Neutron服务的重要组成部分,负责为虚拟机实例建立Layer-2虚拟网络,并处理安全组规则。/etc/neutron/plugins/ml2/linuxbridge_agent.ini 是Linux Bridge代理的配置文件,用于定义物理接口映射、VXLAN配置以及安全组功能。

1
2
3
4
5
6
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:ens160
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan True
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan local_ip 192.168.8.10
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan l2_population True
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group True
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

或者

这部分定义了Linux Bridge代理如何将虚拟网络接口映射到物理接口。

physical_interface_mappings:将虚拟网络provider映射到物理接口ens160。这确保了虚拟网络流量通过指定的物理接口进行转发。

1
2
3
[linux_bridge]
physical_interface_mappings = provider:ens160
...

这部分定义了VXLAN网络的配置。

  • enable_vxlan:启用VXLAN功能。VXLAN是一种封装技术,用于在不同网络之间传输虚拟网络流量。

  • local_ip:指定本地VXLAN隧道端点的IP地址。这里设置为192.168.8.10,这是运行Linux Bridge代理的主机的IP地址。

  • l2_population:启用L2机制,用于优化VXLAN网络的流量转发。

1
2
3
4
[vxlan]
enable_vxlan = True
local_ip = 192.168.8.10
l2_population = True

这部分定义了安全组的配置。

  • enable_security_group:启用安全组功能。安全组用于控制虚拟机之间的网络流量。

  • firewall_driver:指定防火墙驱动程序。这里使用IptablesFirewallDriver,它基于iptables实现安全组规则。

1
2
3
4
[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

配置Layer-3代理

Layer-3代理为私有虚拟网络提供路由和NAT服务,确保虚拟机能够访问外部网络。/etc/neutron/l3_agent.ini 是L3代理的配置文件。

1
2
crudini --set /etc/neutron/l3_agent.ini DEFAULT interface_driver neutron.agent.linux.interface.BridgeInterfaceDriver
crudini --set /etc/neutron/l3_agent.ini DEFAULT external_network_bridge

或者

  • interface_driver:指定L3代理使用的接口驱动程序。这里使用BridgeInterfaceDriver,适用于Linux Bridge机制。

  • external_network_bridge:指定外部网络桥接设备。这里留空,表示不使用外部网络桥接设备。

1
2
3
4
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
external_network_bridge =

配置DHCP代理

DHCP代理为虚拟机提供DHCP服务,分配IP地址和网络配置信息。/etc/neutron/dhcp_agent.ini 是DHCP代理的配置文件。

1
2
3
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver neutron.agent.linux.interface.BridgeInterfaceDriver
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT dhcp_driver neutron.agent.linux.dhcp.Dnsmasq
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata True

或者

  • interface_driver:指定DHCP代理使用的接口驱动程序。这里使用BridgeInterfaceDriver,适用于Linux Bridge机制。

  • dhcp_driver:指定DHCP服务的驱动程序。这里使用Dnsmasq,一个轻量级的DHCP和DNS服务器。

  • enable_isolated_metadata:启用隔离的元数据服务,确保虚拟机能够访问元数据服务,即使它们位于隔离的网络中。

1
2
3
4
5
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True

配置元数据代理

元数据代理为虚拟机提供配置信息,例如访问实例的凭证。/etc/neutron/metadata_agent.ini 是元数据代理的配置文件。

1
2
crudini --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_host controller
crudini --set /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret LiXiaohui

或者

  • nova_metadata_host:指定Nova元数据服务的主机名或IP地址。这里设置为controller

  • metadata_proxy_shared_secret:指定元数据代理的共享密钥,用于身份验证

1
2
3
4
[DEFAULT]
...
nova_metadata_host = controller
metadata_proxy_shared_secret = LiXiaohui

在nova服务中使用neutron

Nova服务需要与Neutron服务集成,以便为虚拟机提供网络连接。/etc/nova/nova.conf 是Nova服务的配置文件。

1
2
3
4
5
6
7
8
9
10
11
crudini --set /etc/nova/nova.conf neutron url http://controller:9696
crudini --set /etc/nova/nova.conf neutron auth_url http://controller:5000
crudini --set /etc/nova/nova.conf neutron auth_type password
crudini --set /etc/nova/nova.conf neutron project_domain_name default
crudini --set /etc/nova/nova.conf neutron user_domain_name default
crudini --set /etc/nova/nova.conf neutron region_name RegionOne
crudini --set /etc/nova/nova.conf neutron project_name service
crudini --set /etc/nova/nova.conf neutron username neutron
crudini --set /etc/nova/nova.conf neutron password LiXiaohui
crudini --set /etc/nova/nova.conf neutron service_metadata_proxy True
crudini --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret LiXiaohui

或者

1
2
3
4
5
6
7
8
9
10
11
12
13
[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 = LiXiaohui
service_metadata_proxy = True
metadata_proxy_shared_secret = LiXiaohui

初始化数据库

网络服务初始化脚本需要一个符号链接,指向ML2插件的配置文件。

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

运行数据库初始化脚本,确保Neutron服务的数据库结构是最新的。

1
2
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

重启相关服务

重启Nova和Neutron服务,确保配置生效。

1
systemctl restart openstack-nova-api.service

网络服务

1
2
3
systemctl enable neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service --now

对于网络选项2,同样启用layer-3服务并设置其随系统自启动

1
systemctl enable neutron-l3-agent.service --now
  • openstack-nova-api.service:Nova的API服务,负责处理虚拟机的创建、启动、停止等操作。

  • neutron-server.service:Neutron的核心服务,处理网络资源的创建、配置和管理。

  • neutron-linuxbridge-agent.service:Linux Bridge代理服务,负责管理虚拟网络设备,如虚拟交换机和端口。

  • neutron-dhcp-agent.service:DHCP代理服务,为虚拟机分配IP地址。

  • neutron-metadata-agent.service:元数据代理服务,为虚拟机提供配置信息,如访问实例的凭证。

  • neutron-l3-agent.service:Layer-3代理服务,为私有虚拟网络提供路由和NAT服务,确保虚拟机能够访问外部网络。

本文介绍了基于Linux Bridge的网络机制,还有更多优秀的网络方案可选,我们下一篇将介绍基于Open VSwitch的网络机制来作为neutron的后端,不过需要注意的是,你只能选择一种将其部署到OpenStack中。