OpenStack Train版网络配置实战:从架构解析到生产级部署
如果你已经成功部署了OpenStack Train的基础环境,那么接下来最核心、也最容易出问题的部分就是网络配置了。我见过太多团队在Neutron配置上耗费数周时间,反复调试却依然无法让虚拟机正常访问外网。这篇文章不会重复那些基础的安装步骤,而是聚焦于网络架构的深度解析和实战中的关键配置技巧,帮你构建一个稳定、高效且易于管理的云网络环境。
OpenStack的网络服务Neutron,其设计初衷是提供灵活、可扩展的网络虚拟化能力,但这也意味着它的配置复杂度远高于传统网络。在Train版本中,Neutron已经相当成熟,支持多种网络类型、插件和高级功能。我们的目标不仅是让它“跑起来”,更要理解其内在逻辑,从而能够从容应对各种生产场景。
1. 网络架构深度解析:理解Neutron的核心组件
在动手修改任何配置文件之前,我们必须先弄清楚Neutron到底是如何工作的。很多配置错误都源于对架构的一知半解。
1.1 Neutron的模块化设计
Neutron采用了高度模块化的设计,各个组件各司其职,通过消息队列(通常是RabbitMQ)进行通信。这种设计带来了灵活性,但也增加了理解的难度。下面这张表格概括了核心组件及其职责:
| 组件 | 部署节点 | 核心职责 | 关键配置文件 |
|---|---|---|---|
| neutron-server | 控制节点 | 提供API服务,处理所有网络请求,是Neutron的大脑 | /etc/neutron/neutron.conf |
| ML2 Plugin | 控制节点 | 模块化二层插件,决定网络类型(flat/vlan/vxlan等)和底层实现机制 | /etc/neutron/plugins/ml2/ml2_conf.ini |
| LinuxBridge Agent | 计算&控制节点 | 实际创建虚拟网桥、veth pair、VXLAN隧道等,是网络连接的“施工队” | /etc/neutron/plugins/ml2/linuxbridge_agent.ini |
| L3 Agent | 控制节点(网络节点) | 提供三层路由功能,实现子网间通信、浮动IP和SNAT | /etc/neutron/l3_agent.ini |
| DHCP Agent | 控制节点 | 为虚拟网络提供DHCP服务,分配IP地址 | /etc/neutron/dhcp_agent.ini |
| Metadata Agent | 控制节点 | 为虚拟机提供实例元数据服务(如ssh密钥、主机名) | /etc/neutron/metadata_agent.ini |
提示:在生产环境中,为了性能和可靠性,通常会将网络节点(运行L3 Agent等)独立部署,与控制节点分离。但对于中小规模部署或测试环境,合并部署在控制节点上是更常见的选择。
1.2 两种核心网络模式的选择
这是配置前最重要的决策,直接决定了后续的配置路径和网络能力。
提供商网络(Provider Networks) 这是一种简单、扁平的桥接网络。Neutron直接使用物理网络中的一个VLAN或未标记的网络,将其映射给虚拟机使用。
- 优点:配置简单,性能损耗小,虚拟机直接获取物理网络的IP,与外部网络处于同一广播域。
- 缺点:缺乏多租户隔离,网络功能有限,依赖底层物理网络规划。
- 适用场景:对网络隔离要求不高的私有云、测试环境,或需要虚拟机直接暴露在物理网络中的特定场景。
自服务网络(Self-service Networks) 这是OpenStack最经典、最强大的网络模式。它通过Overlay技术(如VXLAN、GRE)在物理网络之上构建虚拟的、隔离的租户网络。
- 优点:强大的多租户隔离,每个租户可以创建自己独立的私有网络和子网,支持丰富的网络功能(路由、安全组、负载均衡等)。
- 缺点:配置复杂,存在Overlay带来的性能开销(可通过硬件卸载优化)。
- 适用场景:公有云、多租户私有云等对网络隔离和自助服务有要求的场景。
我的建议是:除非有非常特殊的理由,否则在Train版本中,优先选择自服务网络模式。它代表了云网络的发展方向,也能让你体验到OpenStack网络服务的完整能力。本文后续的配置详解也将主要围绕自服务网络展开。
2. 控制节点网络服务配置实战
控制节点的配置是网络服务的“总指挥部”,任何错误都可能导致整个网络功能瘫痪。请务必在修改前备份原始配置文件。
2.1 核心配置文件:neutron.conf
这个文件定义了Neutron服务的基础行为,包括认证、消息队列、数据库连接等。关键的配置段如下:
[DEFAULT]
auth_strategy = keystone
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
transport_url = rabbit://openstack:RABBIT_PASS@controller
rpc_backend = rabbit
[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
[nova]
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
需要特别注意的几点:
allow_overlapping_ips = True:允许不同租户的私有网络使用相同的IP地址段(如都用192.168.1.0/24)。这是多租户隔离的基础,务必开启。[nova]配置段:这是Neutron与Nova计算服务通信的凭证。如果这里配错,虚拟机启动时无法挂载网络端口。lock_path:确保该目录存在且Neutron进程有写入权限,否则可能导致并发操作错误。
2.2 网络类型引擎:ML2插件配置
ML2插件的配置文件 /etc/neutron/plugins/ml2/ml2_conf.ini 决定了支持哪些网络类型和底层驱动。
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider
[ml2_type_vxlan]
vni_ranges = 1:1000
[securitygroup]
enable_ipset = true
tenant_network_types = vxlan:指定租户自建网络的默认类型为VXLAN。你也可以添加其他类型,如vlan, vxlan。mechanism_drivers = linuxbridge,l2population:linuxbridge是我们要使用的底层驱动;l2population是一个非常重要的优化选项,它用于在计算节点间高效分发MAC地址和ARP信息,避免广播泛洪,能显著提升大规模部署下的网络性能。vni_ranges = 1:1000:指定VXLAN网络标识符(VNI)的可用范围。确保范围足够大,以满足未来网络创建需求。
2.3 网桥代理:连接虚拟与物理世界
LinuxBridge Agent的配置 /etc/neutron/plugins/ml2/linuxbridge_agent.ini 是连接虚拟网络和物理网卡的桥梁,也是最容易配置出错的地方。
[linux_bridge]
physical_interface_mappings = provider:eth1
[vxlan]
enable_vxlan = true
local_ip = 10.0.0.11
l2_population = true
[securitygroup]
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
enable_security_group = true
physical_interface_mappings = provider:eth1:这是关键配置。它将逻辑网络名称“provider”映射到物理网卡eth1上。这个eth1应该是你的节点上用于连接外部网络(或数据中心网络)的网卡。请务必使用ip addr命令确认你的网卡名称,可能是ens192、enp0s3等。local_ip = 10.0.0.11:指定本节点用于VXLAN隧道通信的IP地址。必须使用管理网络的IP,并且所有节点间的这个IP需要能够三层互通。这是建立Overlay隧道的基础。enable_security_group = true和对应的firewall_driver:启用安全组功能,这是OpenStack提供的虚拟机层面的基础防火墙。
2.4 其他支撑服务代理配置
- L3 Agent (
/etc/neutron/l3_agent.ini): 确保interface_driver = linuxbridge。 - DHCP Agent (
/etc/neutron/dhcp_agent.ini): 确保interface_driver = linuxbridge和dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq。enable_isolated_metadata = true允许隔离网络中的虚拟机访问元数据服务。 - Metadata Agent (
/etc/neutron/metadata_agent.ini): 配置nova_metadata_host = controller和metadata_proxy_shared_secret = METADATA_SECRET。这个密钥需要与Nova配置中的对应项一致。
2.5 关键一步:在Nova中集成Neutron
网络配置不是Neutron的独角戏,必须通知计算服务Nova。在 /etc/nova/nova.conf 中追加或修改 [neutron] 段:
[neutron]
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
完成所有配置后,按顺序执行以下操作:
- 创建软链接:
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini - 同步数据库:
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 API服务:
systemctl restart openstack-nova-api - 启动并启用所有Neutron服务:
systemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent neutron-l3-agent systemctl restart neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent neutron-l3-agent
3. 计算节点网络代理配置
计算节点的配置相对简单,主要任务是部署LinuxBridge Agent,让它与控制节点的Neutron Server协同工作。
3.1 基础配置
安装必要软件包:yum install openstack-neutron-linuxbridge ebtables ipset -y。
配置文件 /etc/neutron/neutron.conf 主要配置认证和消息队列:
[DEFAULT]
auth_strategy = keystone
transport_url = rabbit://openstack:RABBIT_PASS@controller
[keystone_authtoken]
# ... 认证配置,与控制节点类似
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
3.2 核心:LinuxBridge Agent配置
计算节点的 /etc/neutron/plugins/ml2/linuxbridge_agent.ini 文件与控制节点类似,但有一个关键区别:
[linux_bridge]
physical_interface_mappings = provider:eth1
[vxlan]
enable_vxlan = true
local_ip = 10.0.0.31
l2_population = true
[securitygroup]
# ... 安全组配置
重中之重:local_ip = 10.0.0.31 这里必须设置为计算节点自身管理网络的IP地址(例如我的计算节点IP是10.0.0.31)。这个IP用于与其他节点(控制节点或其他计算节点)建立VXLAN隧道。所有节点的 local_ip 必须能互相ping通。
3.3 配置Nova并启动服务
同样,需要在计算节点的 /etc/nova/nova.conf 中添加 [neutron] 段,内容与控制节点完全一致。
最后,重启计算服务并启动网络代理:
systemctl restart openstack-nova-compute
systemctl enable neutron-linuxbridge-agent
systemctl restart neutron-linuxbridge-agent
4. 网络功能验证与高级操作
配置完成后,不要急于创建虚拟机,先进行系统性的验证。
4.1 基础状态检查
在控制节点上,加载管理员凭证(source admin-openrc),然后执行一系列检查命令:
-
检查网络代理状态:
openstack network agent list你應該看到所有Agent(server, linuxbridge, dhcp, metadata, l3)的状态都是
UP。如果出现XXX,需要根据具体日志排查。 -
检查Neutron服务端点:
openstack endpoint list | grep neutron确保public, internal, admin三个端点都已正确注册。
4.2 创建与测试虚拟网络
现在,让我们通过命令行创建一套完整的自服务网络环境。
-
创建外部网络:这是一个特殊的提供商网络,用于连接外部世界(如互联网)。
openstack network create --external --provider-physical-network provider --provider-network-type flat public openstack subnet create --network public --allocation-pool start=192.168.100.100,end=192.168.100.200 --dns-nameserver 8.8.8.8 --gateway 192.168.100.1 --subnet-range 192.168.100.0/24 public-subnet--provider-physical-network provider中的provider必须与physical_interface_mappings中定义的名称一致。- IP地址池、网关等信息需要根据你的实际物理网络环境修改。
-
创建租户私有网络和路由器:
# 切换到普通项目(非admin) source demo-openrc # 创建私有网络 openstack network create private openstack subnet create --network private --dns-nameserver 8.8.8.8 --gateway 172.16.1.1 --subnet-range 172.16.1.0/24 private-subnet # 创建路由器,并连接内外网 openstack router create myrouter openstack router add subnet myrouter private-subnet openstack router set --external-gateway public myrouter -
验证网络连通性:
- 创建一个虚拟机,将其连接到
private网络。 - 为虚拟机分配一个浮动IP(Floating IP):
openstack floating ip create public然后openstack server add floating ip <server_id> <floating_ip>。 - 尝试从外部网络SSH到虚拟机的浮动IP。如果成功,说明你的自服务网络、路由、NAT功能全部正常。
- 创建一个虚拟机,将其连接到
4.3 安全组策略管理
安全组是重要的安全边界,默认策略是拒绝所有入站流量,允许所有出站流量。你需要根据业务需求开放端口。
# 查看默认安全组规则
openstack security group list
openstack security group rule list default
# 添加规则,允许SSH和ICMP(ping)
openstack security group rule create --proto tcp --dst-port 22 default
openstack security group rule create --proto icmp default
生产环境建议:遵循最小权限原则,只开放必要的端口,并为不同的应用创建不同的安全组。
4.4 常见故障排查思路
即使按照指南操作,网络问题依然可能出现。以下是我总结的排查路径:
-
虚拟机无法获取IP(DHCP失败):
- 检查
neutron-dhcp-agent状态和日志。 - 在计算节点上,使用
brctl show查看Linux网桥,确认虚拟机的tap设备是否正确连接到网桥(如brqXXXXXX)。 - 检查DHCP命名空间:
ip netns list,找到对应的qdhcp-命名空间,进入并尝试dnsmasq进程和端口监听情况:ip netns exec qdhcp-<net_id> ps aux | grep dnsmasq。
- 检查
-
虚拟机无法访问外网(路由/NAT失败):
- 检查
neutron-l3-agent状态和日志。 - 检查路由器命名空间:
ip netns list,找到qrouter-命名空间。进入后检查路由表、iptables的NAT规则(尤其是masquerade规则)。
ip netns exec qrouter-<router_id> iptables -t nat -L -n -v ip netns exec qrouter-<router_id> ip route show - 检查
-
跨计算节点虚拟机网络不通:
- 首先确认两台计算节点的
local_ip可以互相ping通。 - 检查VXLAN隧道是否建立:
ip -d link show type vxlan。 - 确认
l2population机制是否工作,可以临时关闭优化,看广播模式是否正常(不推荐生产环境长期关闭)。
- 首先确认两台计算节点的
网络配置的调试过程就像破案,需要耐心地查看日志、追踪数据流。养成查看 /var/log/neutron/ 下各组件日志的习惯,绝大多数错误信息都会清晰地记录在那里。记住,一个稳定的OpenStack网络是云平台一切服务的基础,在前期多花些时间夯实这部分,后续的运维工作会轻松得多。
2936



被折叠的 条评论
为什么被折叠?



