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内核的桥接功能实现虚拟网络的创建和管理,其主要功能包括:
虚拟交换机功能 :提供虚拟机之间的网络连接。
VLAN支持 :支持VLAN划分,实现网络隔离。
简单易用 :基于Linux内核功能,易于部署和管理。
Linux Bridge的工作原理 Linux Bridge通过以下机制实现虚拟网络的管理:
虚拟接口绑定 :将虚拟机的虚拟接口绑定到桥接设备上。
数据包转发 :根据MAC地址表进行数据包转发。
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_changes
和 notify_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 = ml2service_plugins = routertransport_url = rabbit://openstack:LiXiaohui@controllerauth_strategy = keystonenotify_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 = controllerrabbit_userid = openstackrabbit_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 = passwordproject_domain_name = Defaultuser_domain_name = Defaultproject_name = serviceusername = neutronpassword = LiXiaohui
这部分定义了Neutron服务与Nova服务的集成配置
1 2 3 4 5 6 7 8 9 10 [nova] ... auth_url = http://controller:5000 auth_type = passwordproject_domain_name = Defaultuser_domain_name = Defaultregion_name = RegionOneproject_name = serviceusername = novapassword = 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,vxlantenant_network_types = vxlanmechanism_drivers = linuxbridge,l2populationextension_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
这部分定义了安全组的配置。
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
或者
1 2 3 4 [DEFAULT] ... interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriverexternal_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.BridgeInterfaceDriverdhcp_driver = neutron.agent.linux.dhcp.Dnsmasqenable_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
或者
1 2 3 4 [DEFAULT] ... nova_metadata_host = controllermetadata_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 = passwordproject_domain_name = defaultuser_domain_name = defaultregion_name = RegionOneproject_name = serviceusername = neutronpassword = LiXiaohuiservice_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中。