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

联系方式:

微信:Lxh_Chat

邮箱:939958092@qq.com

前言

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

Linux Bridge服务概述

Linux Bridge的作用

Linux Bridge是Linux内核中的一种虚拟网络设备,它在计算节点上扮演着重要的角色。以下是Linux Bridge的主要功能:

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

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

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

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

Linux Bridge的架构

Linux Bridge的架构相对简单,主要由以下几个部分组成:

  1. Linux Bridge设备:这是Linux Bridge的核心组件,它是一个虚拟网络设备,用于实现虚拟机之间的网络通信。

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

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

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

工作原理

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

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

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

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

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

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

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

配置Linux Bridge方式的网络代理

在OpenStack环境中,Linux Bridge是一种高效的网络解决方案,用于在计算节点上为虚拟机提供网络连接。通过Linux Bridge,可以实现虚拟机之间的网络通信,并将虚拟机连接到外部网络。本文将详细介绍如何在计算节点上安装和配置Linux Bridge,以确保OpenStack环境中的虚拟机能够高效地进行网络通信。

安装必要的软件包

首先,在计算节点上安装Nova服务和Linux Bridge相关的软件包:

1
yum install libvirt openstack-nova-compute -y
1
yum install openstack-neutron-linuxbridge ebtables ipset -y

配置通用组件

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
crudini --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit
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 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 keystone_authtoken www_authenticate_uri http://controller:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_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 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 oslo_concurrency lock_path /var/lib/neutron/tmp

或者

1
2
3
4
5
[DEFAULT]
...
rpc_backend = rabbit
transport_url = rabbit://openstack:LiXiaohui@controller
auth_strategy = keystone
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = LiXiaohui

[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

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

配置Linuxbridge代理

Linux Bridge代理为实例建立Layer-2虚拟网络并且处理安全组规则。/etc/neutron/plugins/ml2/linuxbridge_agent.ini 是Linux Bridge代理的配置文件。

1
2
3
4
5
6
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:ens224
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.20 #这里是管理物理接口的IP
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

或者

physical_interface_mappings: 定义物理网络接口与虚拟网络的映射关系。这里将provider网络映射到物理接口ens224。这意味着所有属于provider网络的流量都将通过ens224接口进行传输。

1
2
[linux_bridge]
physical_interface_mappings = provider:ens224
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[vxlan]
enable_vxlan = True
local_ip = 192.168.8.20 #这里是管理物理接口的IP
l2_population = true

- **`enable_vxlan`**: 启用VXLAN功能。VXLAN是一种封装技术,用于在不同网络之间传输虚拟网络流量,特别是在多租户环境中。

- **`local_ip`**: 本地IP地址,用于VXLAN封装。这里使用计算节点的管理网络接口IP地址`192.168.8.20`。

- **`l2_population`**: 启用L2功能,允许在VXLAN隧道中动态学习MAC地址,提高网络性能和效率。

[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

准备nova配置文件

/etc/nova/nova.conf 是Nova服务的配置文件,用于定义Nova的各种运行参数。

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
crudini --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
crudini --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:LiXiaohui@controller
crudini --set /etc/nova/nova.conf DEFAULT my_ip 192.168.8.20
crudini --set /etc/nova/nova.conf DEFAULT auth_strategy keystone
crudini --set /etc/nova/nova.conf DEFAULT compute_driver libvirt.LibvirtDriver
crudini --set /etc/nova/nova.conf DEFAULT log_dir /var/log/nova
crudini --set /etc/nova/nova.conf DEFAULT lock_path /var/lock/nova
crudini --set /etc/nova/nova.conf DEFAULT state_path /var/lib/nova
crudini --set /etc/nova/nova.conf api auth_strategy keystone
crudini --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri http://controller:5000
crudini --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller:5000
crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller:5000
crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers controller:11211
crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password
crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken project_name service
crudini --set /etc/nova/nova.conf keystone_authtoken username nova
crudini --set /etc/nova/nova.conf keystone_authtoken password LiXiaohui
crudini --set /etc/nova/nova.conf service_user send_service_user_token true
crudini --set /etc/nova/nova.conf service_user auth_url http://controller:5000/identity
crudini --set /etc/nova/nova.conf service_user auth_strategy keystone
crudini --set /etc/nova/nova.conf service_user auth_type password
crudini --set /etc/nova/nova.conf service_user project_domain_name Default
crudini --set /etc/nova/nova.conf service_user user_domain_name Default
crudini --set /etc/nova/nova.conf service_user project_name service
crudini --set /etc/nova/nova.conf service_user username nova
crudini --set /etc/nova/nova.conf service_user password LiXiaohui
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
crudini --set /etc/nova/nova.conf vnc enabled true
crudini --set /etc/nova/nova.conf vnc server_listen ' $my_ip'
crudini --set /etc/nova/nova.conf vnc server_proxyclient_address ' $my_ip'
crudini --set /etc/nova/nova.conf vnc novncproxy_base_url http://192.168.8.10:6080/vnc_auto.html
crudini --set /etc/nova/nova.conf glance api_servers http://controller:9292
crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
crudini --set /etc/nova/nova.conf placement region_name RegionOne
crudini --set /etc/nova/nova.conf placement project_domain_name Default
crudini --set /etc/nova/nova.conf placement project_name service
crudini --set /etc/nova/nova.conf placement auth_type password
crudini --set /etc/nova/nova.conf placement user_domain_name Default
crudini --set /etc/nova/nova.conf placement auth_url http://controller:5000/v3
crudini --set /etc/nova/nova.conf placement username placement
crudini --set /etc/nova/nova.conf placement password LiXiaohui
crudini --set /etc/nova/nova.conf libvirt virt_type qemu #如果是物理机或者支持虚拟化硬件加速,请设置为kvm

或者

1
2
3
4
5
6
7
8
9
10
[DEFAULT]
...
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:LiXiaohui@controller
my_ip = 192.168.8.20
auth_strategy = keystone
compute_driver = libvirt.LibvirtDriver
log_dir = /var/log/nova
lock_path = /var/lock/nova
state_path = /var/lib/nova
1
2
3
[api]
...
auth_strategy = 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 = nova
password = LiXiaohui
1
2
3
4
5
6
7
8
9
10
[service_user]
send_service_user_token = true
auth_url = http://controller:5000/identity
auth_strategy = keystone
auth_type = password
project_domain_name = Default
project_name = service
user_domain_name = Default
username = nova
password = LiXiaohui
1
2
3
4
5
6
[vnc]
...
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://192.168.8.10:6080/vnc_auto.html
  • enabled: 是否启用VNC服务。

  • server_listen: VNC服务器监听的IP地址,这里监听所有网络接口。

  • server_proxyclient_address: VNC代理客户端地址,这里使用my_ip变量,即192.168.8.20

  • novncproxy_base_url: VNC代理的基地址,用于通过Web浏览器访问VNC控制台。这里指向http://192.168.8.10:6080/vnc_auto.html

1
2
3
[glance]
...
api_servers = http://controller:9292
1
2
3
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
1
2
3
4
5
6
7
8
9
10
[placement]
...
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = LiXiaohui

启动nova服务

1
systemctl enable libvirtd.service openstack-nova-compute.service neutron-linuxbridge-agent.service iscsid --now