保姆级教程:在CentOS 7.9上用OpenStack All-in-One搞定虚拟机上网(附浮动IP配置)
从零搭建OpenStack实验环境:CentOS 7.9下虚拟机外网访问全攻略
当你在本地实验室尝试构建云计算环境时,OpenStack无疑是首选的开源平台。但许多初学者在完成基础安装后,常会遇到一个棘手问题——虚拟机实例无法访问外部网络。本文将手把手带你解决这个痛点,从网桥配置到浮动IP分配,构建完整的网络通路。
1. 实验环境准备与网络架构设计
在CentOS 7.9上采用All-in-One模式部署OpenStack时,网络配置需要特别注意三个关键组件:
- br-ex(外部网桥):负责连接虚拟机与物理网络
- br-int(集成网桥):处理虚拟机内部的网络流量
- 浮动IP池:实现外部对虚拟机的访问
典型的网络拓扑故障往往出现在br-ex网桥与主机物理网卡的连接环节。通过以下命令可以快速诊断当前网桥状态:
ovs-vsctl list-br # 查看已存在的网桥 ovs-vsctl list-ports br-ex # 检查外部网桥端口连接如果输出结果显示br-ex没有绑定物理网卡(如ens33),就需要进行以下配置调整。
2. 物理网卡与网桥的绑定配置
2.1 修改网桥配置文件
进入网络配置目录创建br-ex的配置文件:
cd /etc/sysconfig/network-scripts/ vi ifcfg-br-ex关键配置参数示例:
TYPE="OVSBridge" DEVICETYPE=ovs NAME="br-ex" DEVICE="br-ex" ONBOOT="yes" IPADDR=192.168.1.100 # 替换为你的实际IP PREFIX=24 GATEWAY=192.168.1.1 # 替换为你的网关 DNS1=8.8.8.82.2 调整物理网卡配置
修改原网卡配置文件(假设为ens33):
vi ifcfg-ens33确保包含以下关键行:
TYPE="OVSPort" DEVICETYPE=ovs OVS_BRIDGE=br-ex注意:配置完成后务必验证IP地址、子网掩码和网关是否与你的实际网络环境匹配。
2.3 应用网络变更
执行以下命令使配置生效:
systemctl restart network ifdown ens33 && ifup ens33 ifdown br-ex && ifup br-ex验证配置是否成功:
ovs-vsctl show # 应看到ens33已绑定到br-ex ping 8.8.8.8 # 测试外网连通性3. OpenStack网络服务配置
3.1 清理现有网络配置
登录OpenStack Dashboard后,按顺序执行:
- 在"管理员 > 网络"中删除public网络的现有子网
- 在"项目 > 网络 > 路由器"中移除已有路由器的网关设置
3.2 重建外部网络
创建新的public网络时需特别注意以下参数:
| 参数项 | 推荐配置 | 注意事项 |
|---|---|---|
| 网络类型 | Flat | 简单实验环境首选 |
| 物理网络 | physnet1 | 需与bridge_mappings对应 |
| 启用DHCP | 否 | 浮动IP需要静态配置 |
| 分配池 | 设置可用IP范围 | 避开网关和物理主机IP |
3.3 路由器网关配置
- 在demo项目中创建新路由器
- 将外部网络设置为路由器网关
- 连接内部子网到路由器
完成后检查网络拓扑图,应看到清晰的三个层级:
- 外部网络(public)
- 路由器(router1)
- 内部网络(private)
4. 浮动IP分配与SSH访问
4.1 分配浮动IP流程
- 在"项目 > 网络 > 浮动IP"中申请新地址
- 将浮动IP关联到目标虚拟机实例
- 检查安全组规则是否放行SSH(默认端口22)
4.2 SSH连接实战
假设已获取密钥文件mykey.pem,执行:
chmod 600 mykey.pem ssh -i mykey.pem cirros@<浮动IP>常见连接问题排查表:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| Connection timed out | 安全组未放行端口 | 检查安全组入站规则 |
| Permission denied | 密钥权限或用户名错误 | 确认密钥权限600和实例用户名 |
| No route to host | 浮动IP未正确关联 | 在控制台重新绑定浮动IP |
5. 高级调试与性能优化
当基础网络连通后,可以考虑以下优化措施:
MTU调整:在/etc/neutron/plugins/ml2/ml2_conf.ini中设置:
[ml2_type_flat] flat_networks = physnet1 [ovs] bridge_mappings = physnet1:br-exARP响应优化:防止IP冲突
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce网络性能监控:
ovs-vsctl show # 查看网桥状态 ovs-ofctl dump-flows br-ex # 检查流表规则
经过这些配置,你的OpenStack实验环境应该已经具备完整的网络功能。在实际测试中,建议先创建CirrOS小型镜像进行连通性测试,确认网络正常后再部署更复杂的应用。
