OpenStack Linux Bridge遗留网络部署方案
网络架构概述
此方案描述使用Linux Bridge实现的ML2插件为OpenStack提供传统网络服务。该架构允许普通用户管理项目内的虚拟网络,主要包含以下组件:
项目网络
项目网络为特定租户的实例提供连通性。普通用户可在管理员定义的范围内管理这些网络。
支持VLAN、VXLAN传输协议(GRE协议不被支持)。通常使用RFC1918私有IP地址段,
默认不提供与外部网络(如互联网)的直接连接。
固定IP地址指分配给项目网络上实例的静态IP地址。
外部网络
外部网络提供互联网接入能力,仅限管理员管理。支持Flat或VLAN传输协议,
通常使用公共IP地址段。注意:每个物理网桥仅支持一个Flat网络,
生产环境建议使用VLAN传输协议。
虚拟路由器
路由器连接项目网络与外部网络,默认启用SNAT提供出站连接。
每个路由器需占用外部网络的一个IP地址。同时通过DNAT提供入站连接能力,
此时使用的IP地址称为浮动IP。路由器还可连接同一租户内的多个项目网络。
辅助服务
DHCP服务管理实例IP分配,元数据服务提供SSH密钥等配置信息获取接口。
示例支持Flat外部网络+VXLAN项目网络组合,也兼容VLAN网络方案。
部署先决条件
物理基础设施
- 控制节点:管理网络接口
- 网络节点:管理接口、隧道接口、VLAN接口、外部接口
- 计算节点:管理接口、隧道接口、VLAN接口
网络规划示例:
- 管理网络:10.0.0.0/24
- 隧道网络:10.0.1.0/24
- 外部网络:203.0.113.0/24
服务依赖
控制节点
需正确配置:
- neutron.conf中的数据库连接
- neutron.conf中的消息队列
- neutron.conf中的认证服务
- nova.conf中计算服务与Neutron的集成
网络节点
需运行:
- ML2插件
- Linux网桥代理
- L3代理
- DHCP代理
- 元数据代理
计算节点
需配置:
- neutron.conf中的认证服务
- nova.conf中计算服务与Neutron的集成
- Linux网桥代理
系统架构
传统架构在网络节点集中处理路由,虽简化部署但存在单点故障风险。生产环境建议采用DVR或L3 HA架构。
网络节点组件
- Linux网桥代理:管理虚拟交换机连接
- DHCP代理:管理qdhcp命名空间
- L3代理:管理qrouter命名空间
- 元数据代理:处理实例元数据请求
计算节点组件
Linux网桥代理管理虚拟交换机连接与安全组规则。
数据流分析
南北流量(固定IP)
实例→项目网络→网络节点路由→外部网络
南北流量(浮动IP)
外部网络→网络节点DNAT→项目网络→实例
跨项目网络东西流量
实例A→项目网络1→网络节点路由→项目网络2→实例B
同项目网络东西流量
实例A→项目网络→直接交换→实例B
配置示例
控制节点配置
# /etc/neutron/neutron.conf
[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
# /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vlan,vxlan
mechanism_drivers = linuxbridge,l2population
[ml2_type_flat]
flat_networks = external
[ml2_type_vlan]
network_vlan_ranges = external,vlan:100:200
[ml2_type_vxlan]
vni_ranges = 1000:2000
vxlan_group = 239.1.1.1
网络节点配置
# 启用内核转发
net.ipv4.ip_forward=1
# /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = vlan:eth1,external:eth2
[vxlan]
enable_vxlan = True
local_ip = 10.0.1.101
l2_population = True
# /etc/neutron/l3_agent.ini
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
计算节点配置
# /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = vlan:eth1
[vxlan]
enable_vxlan = True
local_ip = 10.0.1.102
网络初始化
# 创建外部网络
neutron net-create ext-net --router:external \
--provider:physical_network external --provider:network_type flat
# 创建项目网络
neutron net-create tenant-net --provider:network_type vxlan
# 创建路由器
neutron router-create tenant-router
neutron router-interface-add tenant-router tenant-subnet
neutron router-gateway-set tenant-router ext-net
服务验证
# 检查代理状态
neutron agent-list
# 验证命名空间
ip netns list
# 测试网络连通性
ping 203.0.113.101
ping openstack.org
# 创建安全规则
openstack security group rule create --proto icmp default
openstack security group rule create --proto tcp --dst-port 22 default
# 分配浮动IP
neutron floatingip-create ext-net
nova floating-ip-associate vm-instance 203.0.113.102