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

联系方式:

微信:Lxh_Chat

邮箱:939958092@qq.com

前言

在云计算环境中,网络的高效配置和管理对于实现资源的灵活调度和高效利用至关重要。OpenStack作为一个功能强大的开源云平台,提供了多种网络解决方案来满足不同的需求。Open vSwitch作为一种高性能的虚拟交换机,可以在计算节点上实现虚拟机之间的网络通信,并且可以与外部网络进行连接。通过合理安装和配置Open vSwitch,可以为OpenStack环境中的虚拟机提供稳定可靠的网络服务。本文将详细介绍如何在Nova节点上安装和配置Open vSwitch,帮助你顺利搭建一个功能完善的云平台。

Open vSwitch服务概述

Open vSwitch的作用

Open vSwitch是开源的虚拟交换机,它在计算节点上扮演着重要的角色。以下是Open vSwitch的主要功能:

  1. 虚拟机网络通信:Open vSwitch可以实现同一计算节点上不同虚拟机之间的网络通信,使得虚拟机之间可以像在同一物理网络中一样进行数据交换。

  2. 连接外部网络:通过配置Open vSwitch,可以将虚拟机的网络接口连接到外部网络,使虚拟机能够访问外部网络资源,如Internet。

  3. 网络隔离:Open vSwitch可以创建多个虚拟网络,实现不同虚拟机之间的网络隔离,提高网络的安全性。

  4. 支持多种网络协议:Open vSwitch支持多种网络协议,如VLAN、VXLAN等,可以根据实际需求选择合适的网络协议来实现虚拟机的网络通信。

  5. 高性能:Open vSwitch提供了高性能的网络转发能力,能够满足大规模虚拟机环境下的网络需求。

Open vSwitch的架构

Open vSwitch的架构相对复杂,主要由以下几个部分组成:

  1. Open vSwitch服务:这是Open vSwitch的核心组件,它是一个虚拟交换机,用于实现虚拟机之间的网络通信。

  2. 虚拟网络接口:每个虚拟机都会有一个虚拟网络接口,这些接口会连接到Open vSwitch上,从而实现虚拟机之间的网络通信。

  3. 物理网络接口:Open vSwitch可以连接到物理网络接口,将虚拟机的网络流量转发到外部网络。

  4. 配置文件:Open vSwitch的配置文件通常包含在OpenStack的网络配置文件中,用于定义Open vSwitch的配置参数,如桥接设备名称、网络接口配置等。

工作原理

Open vSwitch的工作原理可以概括为以下几个步骤:

  1. 创建Open vSwitch设备:在计算节点上创建一个Open vSwitch设备,该设备将作为虚拟机网络通信的中心节点。

  2. 连接虚拟网络接口:将每个虚拟机的虚拟网络接口连接到Open vSwitch设备上,从而实现虚拟机之间的网络通信。

  3. 连接物理网络接口:将Open vSwitch设备连接到物理网络接口,将虚拟机的网络流量转发到外部网络。

  4. 配置网络参数:根据实际需求配置Open vSwitch的网络参数,如IP地址、子网掩码、网关等,以实现虚拟机的网络访问。

  5. 数据转发:当虚拟机之间进行网络通信时,Open vSwitch设备会根据配置的网络参数进行数据转发,确保数据能够正确地传输到目标虚拟机或外部网络。

通过以上机制,Open vSwitch为OpenStack环境中的虚拟机提供了稳定可靠的网络服务,使得虚拟机之间可以像在同一物理网络中一样进行通信,并且可以访问外部网络资源。接下来我将详细介绍如何在Nova节点上安装和配置Open vSwitch,以确保你的OpenStack环境能够高效地管理虚拟机的网络资源。

配置OpenvSwtich方式的网络代理

在OpenStack环境中,Open vSwitch(OVS)是一种高性能的虚拟交换机,广泛用于实现虚拟机之间的网络通信和与外部网络的连接。本文将详细介绍如何在Nova节点上安装和配置Open vSwitch,以确保OpenStack环境中的虚拟机能够高效地进行网络通信。

安装Open vSwitch软件包

首先,在Nova节点上安装Open vSwitch相关的软件包:

1
yum install openstack-neutron-openvswitch -y

配置网络通用组件

通用组件的配置包括认证机制、消息队列和插件。/etc/neutron/neutron.conf 是主服务配置文件,用于定义Neutron服务的基本参数。

1
2
crudini --set /etc/neutron/neutron.conf DEFAULT transport_url rabbit://openstack:LiXiaohui@controller
crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp

或者

1
2
3
4
5
6
7
[DEFAULT]
...
transport_url = rabbit://openstack:LiXiaohui@controller

[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp

准备OVS网桥

后续的配置中,会用到br-int和br-ex网桥,提前创建出来

1
systemctl enable neutron-openvswitch-agent.service --now

检查br-int网桥是否创建出来,如果没有,那就自己创建br-int网桥用于虚拟机内部通信,一般来说,启动服务会自动创建

可以看到我的br-int已经自动创建

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@node ~]# ovs-vsctl show
1b37f8e1-ef53-46f1-8d0e-ce60268a0346
Manager "ptcp:6640:127.0.0.1"
is_connected: true
Bridge br-int
Controller "tcp:127.0.0.1:6633"
is_connected: true
fail_mode: secure
datapath_type: system
Port br-int
Interface br-int
type: internal
ovs_version: "3.3.1"

如果没有创建,就执行以下命令即可

1
[root@node ~]# ovs-vsctl add-br br-int

确认了br-int之后,需要创建br-ex用于外部网络通信,并添加具有外部通信的网卡进来

1
2
[root@node ~]# ovs-vsctl add-br br-ex
[root@node ~]# ovs-vsctl add-port br-ex ens224

配置OpenvSwitch 代理

/etc/neutron/plugins/ml2/openvswitch_agent.ini 是ovs代理配置文件

1
2
3
4
5
6
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs bridge_mappings provider:br-ex
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs local_ip 192.168.8.20
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini agent tunnel_types vxlan
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini agent l2_population true
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini securitygroup enable_security_group true
crudini --set /etc/neutron/plugins/ml2/openvswitch_agent.ini securitygroup firewall_driver openvswitch

1
2
3
[ovs]
bridge_mappings = provider:br-ex
local_ip = 192.168.8.20
  • bridge_mappings: 定义物理网络与Open vSwitch网桥之间的映射关系。这里将provider网络映射到br-ex网桥。这意味着所有属于provider网络的流量都将通过br-ex网桥进行传输。br-ex通常用于连接外部网络,例如Internet或私有网络。

  • local_ip: 指定本地IP地址,用于VXLAN隧道的封装。这个IP地址通常是计算节点的管理网络接口地址,用于在不同计算节点之间传输封装后的网络流量。在这里,192.168.8.20是计算节点的管理网络接口IP地址。

1
2
3
[agent]
tunnel_types = vxlan
l2_population = true
  • tunnel_types: 指定支持的隧道类型。这里配置为vxlan,表示启用VXLAN隧道。VXLAN是一种封装技术,用于在不同网络之间传输虚拟网络流量,特别是在多租户环境中。它允许虚拟机在不同的物理网络中进行通信,就好像它们在同一个局域网中一样。

  • l2_population: 启用L2功能。当设置为true时,Open vSwitch代理将使用L2机制来动态学习和更新MAC地址表。这有助于提高网络性能和效率,特别是在大规模虚拟化环境中。通过动态学习MAC地址,可以减少不必要的广播流量,提高网络的可扩展性。

1
2
3
[securitygroup]
enable_security_group = true
firewall_driver = openvswitch

在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
  • service_metadata_proxy: 是否启用服务元数据代理。设置为True表示启用,这允许Nova服务通过Neutron服务代理虚拟机的元数据请求。

  • metadata_proxy_shared_secret: 元数据代理共享密钥。这是一个安全密钥,用于验证元数据代理的身份。这里设置为LiXiaohui

启动服务

1
2
systemctl enable openstack-nova-compute.service
systemctl restart openstack-nova-compute.service
1
systemctl enable neutron-openvswitch-agent.service --now