OpenStack部署(九) 安装配置Open vSwitch
1 | 作者:李晓辉 |
前言
在云计算环境中,网络服务是实现虚拟机之间以及虚拟机与外部网络通信的关键组件。OpenStack作为一个功能强大的开源云平台,提供了灵活的网络管理解决方案。Open vSwitch(OVS)作为一种高性能的虚拟交换技术,支持复杂的网络拓扑和高级特性,如VLAN、VXLAN等,适用于需要高可扩展性和灵活性的网络环境。本文将详细介绍如何在OpenStack环境中安装和配置Open vSwitch网络机制,帮助你实现虚拟网络的高效管理和灵活配置。
Open vSwitch网络机制概述
Open vSwitch的作用
Open vSwitch(OVS)是一种生产级的、多层虚拟交换机,专为虚拟化环境设计,支持多种网络拓扑和高级特性。其主要功能包括:
高性能虚拟交换:提供高性能的虚拟网络连接,支持大规模虚拟机部署。
VLAN和VXLAN支持:支持VLAN和VXLAN技术,实现网络隔离和扩展。
灵活的网络拓扑:支持复杂的网络拓扑,满足不同场景下的网络需求。
安全组管理:通过安全组规则控制虚拟机之间的流量,保障虚拟机的安全。
与计算服务集成:与Nova服务紧密集成,为虚拟机提供网络连接,确保虚拟机能够正常访问网络资源。
Open vSwitch的工作原理
Open vSwitch通过以下机制实现虚拟网络的管理:
虚拟接口绑定:将虚拟机的虚拟接口绑定到虚拟交换机上,实现虚拟机之间的网络连接。
数据包转发:根据流表(flow table)进行数据包转发,支持复杂的流量工程。
VLAN和VXLAN封装:支持VLAN和VXLAN封装,实现网络隔离和扩展。
安全组规则:通过安全组规则控制虚拟机之间的流量,确保网络通信的安全性。
Open vSwitch的架构
Open vSwitch的架构包括以下几个主要组件:
ovs-vswitchd:核心守护进程,负责管理虚拟交换机和数据包转发。
ovsdb-server:数据库服务,存储虚拟交换机的配置信息。
ovs-ofctl:命令行工具,用于管理和配置OpenFlow流表。
ovs-dpctl:命令行工具,用于管理和配置数据路径。
通过以上机制和组件,Open vSwitch能够为OpenStack环境中的虚拟机提供高性能、灵活且安全的虚拟网络连接。接下来我将详细介绍如何在OpenStack环境中安装和配置Open vSwitch网络机制。
安装配置OpenvSwitch网络机制
在OpenStack环境中,选择合适的网络后端对于构建高效、灵活的虚拟网络至关重要。Open vSwitch(OVS)作为一种高性能的虚拟交换技术,支持复杂的网络拓扑和高级特性,如VLAN、VXLAN等,适用于需要高可扩展性和灵活性的网络环境。本文将详细介绍如何在OpenStack环境中安装和配置Open vSwitch网络机制,帮助你实现虚拟网络的高效管理和灵活配置。此处选择了Open vSwitch网络以及Option 2,即支持租户自建网络、路由器的模式,而不是直连外网的模式。
安装Open vSwitch相关软件包
1 | yum install -y openstack-neutron openstack-neutron-ml2 \ |
准备配置文件
/etc/neutron/neutron.conf
是网络服务的主配置文件,用于定义核心插件、服务插件、消息队列、数据库连接以及身份认证等基本信息。
1 | crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2 |
或者
1 | [DEFAULT] |
core_plugin = ml2
指定 Neutron 的核心插件为ml2
(Modular Layer 2),这是一个模块化的网络服务插件,支持多种网络类型(如 VLAN、VXLAN 等)和后端驱动。service_plugins = router
指定 Neutron 的服务插件为router
,用于支持网络的路由功能。transport_url = rabbit://openstack:LiXiaohui@controller
指定 Neutron 服务使用的消息队列(RabbitMQ)的连接地址。用户名为openstack
,密码为LiXiaohui
,服务器地址为controller
。auth_strategy = keystone
指定 Neutron 使用 Keystone 进行身份验证。notify_nova_on_port_status_changes = true
当端口状态发生变化时,通知 Nova 服务。notify_nova_on_port_data_changes = true
当端口数据发生变化时,通知 Nova 服务。allow_overlapping_ips = True
允许 IP 地址重叠(例如在不同网络中使用相同的 IP 地址范围)。rpc_backend = rabbit
指定 RPC 后端为 RabbitMQ。
1 | [oslo_messaging_rabbit] |
rabbit_host = controller
RabbitMQ 服务器的主机名或 IP 地址。rabbit_userid = openstack
RabbitMQ 用户名。rabbit_password = LiXiaohui
RabbitMQ 用户密码。
1 | [database] |
connection = mysql+pymysql://neutron:LiXiaohui@controller/neutron
指定 Neutron 数据库的连接字符串。使用 MySQL 数据库,用户名为 neutron
,密码为 LiXiaohui
,数据库名为 neutron
,数据库服务器地址为 controller
。
以下是keystone和nova的连接信息
1 | [keystone_authtoken] |
1 | [nova] |
1 | [oslo_concurrency] |
配置ML2插件
ML2插件是Neutron的核心组件之一,它使用Open vSwitch机制为实例创建Layer-2虚拟网络基础设施。/etc/neutron/plugins/ml2/ml2_conf.ini 是ML2插件的配置文件,用于定义支持的网络类型、机制驱动程序、安全组功能等。
1 | crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers flat,vlan,vxlan |
或者
1 | [ml2] |
type_drivers = flat,vlan,vxlan
指定支持的网络类型驱动。这里支持三种网络类型:flat
:平面网络,不使用 VLAN 或 VXLAN 封装。vlan
:VLAN 网络,使用 VLAN 标签进行隔离。vxlan
:VXLAN 网络,使用 VXLAN 封装进行隔离。
tenant_network_types = vxlan
指定租户网络的默认类型。这里设置为vxlan
,表示租户网络将使用 VXLAN 封装。mechanism_drivers = openvswitch,l2population
指定机制驱动,用于处理网络的创建和管理:openvswitch
:使用 Open vSwitch 作为虚拟交换机。l2population
:启用 L2 人口机制驱动,用于优化网络流量转发。
extension_drivers = port_security
指定扩展驱动,用于启用额外的功能。这里启用了port_security
,用于提供端口安全功能,例如防止 MAC/IP 欺骗。
1 | [ml2_type_flat] |
flat_networks = provider
指定平面网络的名称。这里定义了一个名为provider
的平面网络。平面网络通常用于提供外部网络访问。
1 | [ml2_type_vxlan] |
vni_ranges = 1:1000
指定 VXLAN 网络的 VNI(VXLAN Network Identifier)范围。这里设置 VNI 范围为 1 到 1000。VNI 是用于区分不同 VXLAN 隧道的标识符。
1 | [securitygroup] |
enable_ipset = True
启用 IP 集合(IPSet)功能。IPSet 是一种高效的 IP 地址管理工具,可以用于安全组规则的优化。启用 IPSet 可以提高安全组规则的处理效率,尤其是在规则数量较多时。
准备OVS网桥
后续的配置中,会用到br-int和br-ex网桥,提前创建出来。
1 | systemctl enable neutron-openvswitch-agent.service --now |
检查br-int网桥是否创建出来,如果没有,那就自己创建br-int网桥用于虚拟机内部通信,一般来说,启动服务会自动创建
可以看到我的br-int已经自动创建
1 | [root@controller ~]# ovs-vsctl show |
如果没有创建,就执行以下命令即可
1 | [root@controller ~]# ovs-vsctl add-br br-int |
确认了br-int之后,需要创建br-ex用于外部网络通信,并添加具有外部通信的网卡进来
1 | [root@controller ~]# ovs-vsctl add-br br-ex |
配置Open vSwitch代理
Open vSwitch代理为实例建立Layer-2虚拟网络并且处理安全组规则。/etc/neutron/plugins/ml2/openvswitch_agent.ini
是Open vSwitch代理的配置文件。
1 | crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings provider:br-ex |
或者
1 | [ovs] |
bridge_mappings = provider:ens160
指定 Open vSwitch 的桥接映射关系。这里将provider
网络映射到物理网卡ens160
。这意味着所有属于provider
网络的流量将通过ens160
进行转发。local_ip = 192.168.8.10
指定 OVS 代理(agent)的本地 IP 地址。这个 IP 地址用于 VXLAN 隧道的通信。在 VXLAN 网络中,每个 OVS 代理需要一个本地 IP 地址来建立隧道。
1 | [agent] |
tunnel_types = vxlan
指定支持的隧道类型。这里设置为vxlan
,表示 OVS 代理将使用 VXLAN 隧道来转发租户网络的流量。l2_population = true
启用 L2 机制。这个选项与 ML2 插件中的l2population
机制驱动配合使用,用于优化网络流量的转发。启用后,OVS 代理可以更高效地处理多租户环境中的网络流量。
1 | [securitygroup] |
enable_security_group = True
启用安全组功能。安全组是 OpenStack 中用于控制虚拟机网络流量的防火墙规则集合。firewall_driver = openvswitch
指定安全组的防火墙驱动为openvswitch
。这意味着 OVS 将负责处理安全组规则的实施,确保虚拟机的网络流量符合安全组策略。
配置Layer-3代理
- Layer-3 代理 是 OpenStack Neutron 的一个组件,主要负责为私有虚拟网络提供 路由和 NAT(网络地址转换)服务。它允许虚拟机实例通过私有网络访问外部网络,例如互联网。
配置文件:/etc/neutron/l3_agent.ini
1 | crudini --set /etc/neutron/l3_agent.ini DEFAULT interface_driver openvswitch |
或者
interface_driver = openvswitch
指定 L3 代理使用的接口驱动为 Open vSwitch。这意味着 L3 代理将通过 Open vSwitch 来管理网络接口,确保网络流量正确地在不同网络之间路由。
1 | [DEFAULT] |
配置DHCP代理
DHCP 代理 是 Neutron 的另一个组件,负责为虚拟机实例提供 DHCP(动态主机配置协议)服务。它为虚拟机分配 IP 地址、子网掩码、网关等网络配置信息。
/etc/neutron/dhcp_agent.ini
的DHCP配置文件
1 | crudini --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver openvswitch |
或者
interface_driver = openvswitch
指定 DHCP 代理使用的接口驱动为 Open vSwitch,确保 DHCP 流量通过 OVS 进行管理。dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
指定 DHCP 服务的驱动为dnsmasq
,这是 OpenStack 默认的 DHCP 服务工具,用于管理 DHCP 租约。enable_isolated_metadata = True
启用 隔离的元数据服务,允许虚拟机在隔离网络中访问元数据服务。这对于在私有网络中运行的虚拟机非常重要,确保它们能够获取配置信息。
1 | [DEFAULT] |
配置元数据代理
元数据代理 是 Neutron 的一个组件,负责为虚拟机提供 配置信息,例如访问实例的凭证、网络配置等。这些信息对于虚拟机的初始化和运行至关重要。
/etc/neutron/metadata_agent.ini
是主配置文件
1 | crudini --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_host controller |
或者
nova_metadata_host = controller
指定 Nova 元数据服务的主机地址。这里设置为controller
,表示元数据服务运行在控制节点上。metadata_proxy_shared_secret = LiXiaohui
设置 元数据代理的共享密钥,用于身份验证。请确保此密钥与 Nova 配置中的密钥一致,以保证安全性。
1 | [DEFAULT] |
为nova配置网络服务
Nova 配置文件 /etc/nova/nova.conf
需要与 Neutron 集成,以确保 Nova 能够正确地管理虚拟机的网络。
1 | crudini --set /etc/nova/nova.conf neutron url http://controller:9696 |
或者
1 | [neutron] |
url = http://controller:9696
指定 Neutron 服务的 API 地址,用于 Nova 与 Neutron 之间的通信。auth_url = http://controller:5000
指定 Keystone 认证服务的地址,用于身份验证。auth_type = password
指定认证类型为 密码认证。project_domain_name = default
和user_domain_name = default
指定项目和用户所属的域名为default
。region_name = RegionOne
指定区域名为RegionOne
。project_name = service
指定项目名为service
。username = neutron
和password = LiXiaohui
指定 Neutron 服务的用户名和密码。service_metadata_proxy = True
启用元数据代理服务,确保虚拟机能够通过元数据代理获取配置信息。metadata_proxy_shared_secret = LiXiaohui
设置元数据代理的共享密钥,与 Neutron 配置中的密钥一致。
初始化数据库
网络服务初始化脚本需要一个超链接,以确保 Neutron 数据库正确初始化。
1 | ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini |
1 | su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \ |
重启相关服务
重启计算 API 服务和网络服务,以确保所有配置生效。
1 | systemctl restart openstack-nova-api.service |
网络服务
1 | systemctl enable neutron-server.service \ |
对于网络选项2,同样启用layer-3服务并设置其随系统自启动
1 | systemctl enable neutron-l3-agent.service --now |
systemctl restart openstack-nova-api.service
重启 Nova API 服务,确保计算服务的配置更新生效。systemctl enable neutron-server.service --now
启用并启动 Neutron 服务,负责管理网络资源。systemctl enable neutron-openvswitch-agent.service --now
启用并启动 Open vSwitch 代理服务,负责管理虚拟网络接口。systemctl enable neutron-dhcp-agent.service --now
启用并启动 DHCP 代理服务,为虚拟机分配 IP 地址。systemctl enable neutron-metadata-agent.service --now
启用并启动元数据代理服务,为虚拟机提供配置信息。systemctl enable neutron-l3-agent.service --now
启用并启动 Layer-3 代理服务,负责私有网络的路由和 NAT 功能。