Openstack实现共有云VPC的SDN网络
Neutron的第二个网络模型,自服务网络
参考官方文档:https://docs.openstack.org/newton/zh_CN/install-guide-rdo/neutron-controller-install-option2.html
在控制节点数据库,消息队列,keystone之前已经配置好
编辑``/etc/neutron/neutron.conf`` 文件并完成如下操作
1 2 3 4 | [DEFAULT] ... service_plugins = router allow_overlapping_ips = True |
编辑``/etc/neutron/plugins/ml2/ml2_conf.ini``文件并完成以下操作:
在``[ml2]``部分,启用flat,VLAN以及VXLAN网络:
1 2 | [ml2] type_drivers = flat,vlan,local,gre,vxlan,geneve |
在``[ml2]``部分,启用VXLAN私有网络:
1 2 3 | [ml2] ... tenant_network_types = flat,vlan,gre,vxlan,geneve |
在``[ml2]``部分,启用Linuxbridge和l2机制(原配置已经有linuxbridge):
1 2 3 | [ml2] ... mechanism_drivers = linuxbridge,l2population |
在``[ml2]`` 部分,启用端口安全扩展驱动:
1 2 3 | [ml2] ... extension_drivers = port_security |
在``[ml2_type_flat]``部分,配置公共虚拟网络为flat网络(之前已经修改并且添加了internal):
1 2 3 | [ml2_type_flat] ... flat_networks = provider |
在``[ml2_type_vxlan]``部分,为私有网络配置VXLAN网络识别的网络范围
1 2 3 | [ml2_type_vxlan] ... vni_ranges = 1 : 1000 |
在 ``[securitygroup]``部分,启用 ipset 增加安全组的方便性(之前已配置):
1 2 3 | [securitygroup] ... enable_ipset = True |
Linuxbridge代理为实例建立layer-2虚拟网络并且处理安全组规则。
编辑``/etc/neutron/plugins/ml2/linuxbridge_agent.ini``文件并且完成以下操作:
在``[linux_bridge]``部分,将公共虚拟网络和公共物理网络接口对应起来(之前已修改):
1 2 | [linux_bridge] physical_interface_mappings = provider:eth0,internal:eth1 |
在``[vxlan]``部分,启用VXLAN覆盖网络,配置覆盖网络的物理网络接口的IP地址,启用layer-2 population:
enable_vxlan之前配置为False
local_ip为本地ip一会修改计算节点也是计算节点的本地ip
1 2 3 4 | [vxlan] enable_vxlan = True local_ip = 192.168 . 0.112 l2_population = True |
在 ``[securitygroup]``部分,启用安全组并配置 Linux 桥接 iptables 防火墙驱动(之前已修改):
1 2 3 | [securitygroup] enable_security_group = True firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver |
配置layer-3代理
编辑``/etc/neutron/l3_agent.ini``文件并完成以下操作:
在``[DEFAULT]``部分,配置Linuxbridge接口驱动和外部网络网桥:
1 2 3 | [DEFAULT] ... interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver |
编辑``/etc/neutron/dhcp_agent.ini``文件并完成下面的操作:
在``[DEFAULT]``部分,配置Linuxbridge驱动接口,DHCP驱动并启用隔离元数据,这样在公共网络上的实例就可以通过网络来访问元数据
1 2 3 4 5 | [DEFAULT] ... interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq enable_isolated_metadata = True |
在计算节点配置
配置Linuxbridge代理
编辑``/etc/neutron/plugins/ml2/linuxbridge_agent.ini``文件并且完成以下操作
在``[linux_bridge]``部分,将公共虚拟网络和公共物理网络接口对应起来(之前已配置)
1 2 | [linux_bridge] physical_interface_mappings = provider:eth0,internal:eth1 |
在``[vxlan]``部分,启用VXLAN覆盖网络,配置覆盖网络的物理网络接口的IP地址,启用layer-2 population
1 2 3 4 | [vxlan] enable_vxlan = True local_ip = 192.168 . 0.115 l2_population = True |
在 ``[securitygroup]``部分,启用安全组并配置 Linux 桥接 iptables 防火墙驱动(之前已经配置)
1 2 3 4 | [securitygroup] ... enable_security_group = True firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver |
重启服务
控制节点
1 | systemctl restart neutron - server neutron - linuxbridge - agent neutron - l3 - agent |
计算节点
1 | systemctl status neutron - linuxbridge - agent |
验证
1 | neutron agent - list |
创建自服务网络 参考:https://docs.openstack.org/newton/zh_CN/install-guide-rdo/launch-instance-networks-selfservice.html
在控制节点获取demo权限(因为是自服务网络所以用demo)
1 | source demo - openstack |
创建网络
1 | openstack network create selfservice |
在网络上创建子网
1 2 3 | openstack subnet create - - network selfservice \ - - dns - nameserver 192.168 . 0.1 - - gateway 172.16 . 1.1 \ - - subnet - range 172.16 . 1.0 / 24 selfservice |
创建路由器(使用admin)
在控制节点上,加载 admin
凭证来获取管理员能执行的命令访问权限
1 | source admin - openstack |
更新 provider网络
1 | neutron net - update provider - - router:external |
又回到demo
1 | source demo - openstack |
创建路由(用路由把刚才创建的子网连接起来)
1 | openstack router create router |
给路由器添加一个私网子网的接口
1 | neutron router - interface - add router selfservice |
给路由器设置公有网络的网关
1 | neutron router - gateway - set router provider |
验证
使用demo登陆web界面
网络-网络拓扑
创建一台虚拟主机,选择网络的时候选择自服务网络
先修改之前的限制网络配置操作再来创建主机
编辑配置文件/etc/openstack-dashboard/local_settings把之前的以下配置改一下
全部改成True之前单一扁平网络开启了会报错,现在即使不使用也不会报错
1 2 3 4 5 6 7 8 9 10 | OPENSTACK_NEUTRON_NETWORK = { 'enable_router' : False , 'enable_quotas' : False , 'enable_ipv6' : False , 'enable_distributed_router' : False , 'enable_ha_router' : False , 'enable_lb' : False , 'enable_firewall' : False , 'enable_vpn' : False , 'enable_fip_topology_check' : False , |
1 2 3 4 5 6 7 8 9 10 | OPENSTACK_NEUTRON_NETWORK = { 'enable_router' : True , 'enable_quotas' : True , 'enable_ipv6' : True , 'enable_distributed_router' : True , 'enable_ha_router' : True , 'enable_lb' : True , 'enable_firewall' : True , 'enable_vpn' : True , 'enable_fip_topology_check' : True , |
重启apache
1 | systemctl restart httpd |
私有网络无法访问公网可以添加一个公网IP
计算-访问与安全-浮动IP-关联-选择端口
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!