06.OpenStack网络管理
OpenStack 网络管理基础知识
文章目录
- OpenStack 网络管理基础知识
- OpenStack 网络的 “核心骨架”
- 1. 3 个最基础的网络 “积木”
- 2. 让网络 “互联互通” 的关键:路由器(Router)
- 3. 让虚拟机 “暴露在外”:浮动 IP(Floating IP)
- 3 种常用网络场景
- 场景 1:搭建 “仅内部通信” 的私有网络(适合测试环境)
- 1. 用 Horizon 配置(图形化,简单)
- 2. 用命令行配置(适合批量操作)
- 场景 2:搭建 “能访问外网” 的网络(适合生产环境的应用服务器)
- 配置步骤(以 Horizon 为例)
- 场景 3:搭建 “隔离的租户网络”(多租户环境必备)
- 核心原理:租户隔离
- 配置示例
- 5 个最常见的网络问题及解决方法
- 1. 虚拟机启动后没有 IP?
- 2. 虚拟机能 ping 通同网段,却 ping 不通其他网段?
- 3. 虚拟机能访问外网,外部却访问不了虚拟机(浮动 IP 没用)?
- 4. 不同项目的虚拟机无法互通(需要互通时)?
- 5. 网络速度慢?
- 总结:OpenStack 网络管理的核心逻辑
对于 OpenStack 运维人员来说,网络管理绝对是整个平台的 “命脉”—— 虚拟机能不能联网、不同租户的网络隔不隔离、业务访问快不快,全靠它来把控。很多新手刚接触时会被 “ neutron ”“网桥”“浮动 IP” 这些概念绕晕,今天这篇文章就用最通俗的语言,结合实际操作示例,把 OpenStack 网络管理讲透,让你看完就能上手配置。
OpenStack 网络的 “核心骨架”
在开始配置前,我们得先明确 OpenStack 网络的核心组件 ——Neutron。它就像 OpenStack 的 “网络管家”,负责创建和管理网络、子网、路由器、防火墙等所有网络资源。但光有 Neutron 还不够,它需要和其他组件配合才能工作,我们先理清几个关键概念:
1. 3 个最基础的网络 “积木”
这三个概念是所有配置的起点,必须先吃透:
-
网络(Network):可以理解为 “虚拟交换机”,比如我们在物理环境中买的交换机,一个网络就是一个独立的虚拟交换设备,不同网络之间默认不互通。
-
子网(Subnet):给 “虚拟交换机” 分配的 IP 地址段,比如 192.168.1.0/24,虚拟机的 IP 就是从子网里自动分配的。
-
端口(Port):“虚拟交换机” 上的端口,虚拟机要联网,必须先 “插” 在这个端口上 —— 每个虚拟机的网卡都会对应一个 Neutron 端口,IP、MAC 地址都是通过端口绑定的。
举个实际例子:
假设我们要搭建一个 “Web 服务集群”,需要先创建一个名为 “web-network” 的虚拟交换机(Network),然后给它分配一个子网 “192.168.10.0/24”(Subnet),最后把 3 台 Web 虚拟机的网卡分别绑定到这个网络的 3 个端口(Port)上,这样 3 台虚拟机就能在同一个网段内互相通信了。
2. 让网络 “互联互通” 的关键:路由器(Router)
上面的例子中,3 台 Web 虚拟机只能在 “web-network” 里通信,但如果想让它们访问外网(比如下载软件),或者和其他网络(比如数据库网络 “db-network”)通信,就需要路由器(Router) 了。
Neutron 的路由器有两个核心作用:
-
连接不同的 “虚拟交换机”(Network),实现跨子网通信;
-
连接 “虚拟网络” 和 “物理网络”(比如企业的公网),实现虚拟机访问外网。
配置示例:
我们已经有 “web-network(192.168.10.0/24)” 和 “db-network(192.168.20.0/24)”,现在要让 Web 虚拟机访问数据库虚拟机:
-
创建一个名为 “web-db-router” 的路由器;
-
把路由器的一个 “接口” 绑定到 “web-network” 的子网(192.168.10.0/24),自动分配网关 IP(比如 192.168.10.1);
-
再把路由器的另一个 “接口” 绑定到 “db-network” 的子网(192.168.20.0/24),自动分配网关 IP(比如 192.168.20.1);
-
此时,Web 虚拟机(比如 192.168.10.10)会把网关设为 192.168.10.1,数据库虚拟机(比如 192.168.20.20)的网关设为 192.168.20.1,两者就能通过路由器互相访问了。
3. 让虚拟机 “暴露在外”:浮动 IP(Floating IP)
虚拟机的 IP(比如 192.168.10.10)是 “私有 IP”,只能在 OpenStack 内部或企业内网访问,如果你想让外部用户访问这台 Web 虚拟机(比如通过公网访问网站),就需要浮动 IP—— 它是一个 “公网 IP”,可以绑定到虚拟机的私有 IP 上,相当于给虚拟机一个 “公网门牌号”。
操作示例:
假设企业有一个公网 IP 段 “203.0.113.0/24”,我们要让外部用户访问 192.168.10.10 这台 Web 机:
-
在 Neutron 中创建一个 “浮动 IP 池”,把 “203.0.113.0/24” 加入池中;
-
从池中分配一个浮动 IP,比如 203.0.113.10;
-
把 203.0.113.10 绑定到 Web 虚拟机的私有 IP(192.168.10.10)上;
-
外部用户通过访问 “203.0.113.10”,就能直接连接到这台 Web 虚拟机了。
3 种常用网络场景
了解了基础概念后,我们结合实际工作中最常见的 3 个场景,一步步教你配置,所有操作都提供Horizon(Web 界面) 和命令行(CLI) 两种方式,新手可以先从 Web 界面入手。
场景 1:搭建 “仅内部通信” 的私有网络(适合测试环境)
需求:创建一个网络,让多台虚拟机在内部互相通信,但不访问外网。
1. 用 Horizon 配置(图形化,简单)
-
登录 Horizon,进入 “项目”→“网络”→“网络”,点击 “创建网络”;
-
填写网络名称(比如 “test-network”),勾选 “创建子网”,点击 “下一步”;
-
填写子网信息:
-
子网名称:test-subnet;
-
网络地址:192.168.30.0/24(自定义,只要不与其他子网冲突);
-
网关 IP:默认(192.168.30.1,可选填,不填则无网关);
-
DHCP:勾选 “启用 DHCP”(让虚拟机自动获取 IP);
-
地址池:起始 IP 192.168.30.10,结束 IP 192.168.30.100(分配给虚拟机的 IP 范围);
-
点击 “创建”,网络和子网就建好了;
-
创建虚拟机时,“网络” 选择 “test-network”,启动后虚拟机就能自动获取 192.168.30.x 的 IP,并且能和同网络的其他虚拟机互相 ping 通。
2. 用命令行配置(适合批量操作)
\# 1. 创建网络test-networkopenstack network create test-network\# 2. 在test-network下创建子网test-subnetopenstack subnet create --network test-network \\  \--subnet-range 192.168.30.0/24 \\  \--gateway 192.168.30.1 \\  \--dhcp \\  \--allocation-pool start=192.168.30.10,end=192.168.30.100 \\  test-subnet\# 3. 验证网络和子网是否创建成功openstack network list # 能看到test-networkopenstack subnet list # 能看到test-subnet
场景 2:搭建 “能访问外网” 的网络(适合生产环境的应用服务器)
需求:Web 虚拟机不仅能内部通信,还能访问外网(比如下载 Docker、安装软件),同时外部用户能通过浮动 IP 访问 Web 服务。
配置步骤(以 Horizon 为例)
-
先确认 “外部网络” 已存在:
外部网络是 OpenStack 连接物理公网的 “桥梁”,通常由管理员提前创建(新手不用自己建,找管理员要名称即可,比如 “public-network”)。
-
创建内部网络和子网:
参考场景 1,创建 “web-network” 和子网 “192.168.10.0/24”。
-
创建路由器并连接内外网:
-
进入 “项目”→“网络”→“路由器”,点击 “创建路由器”;
-
名称填 “web-router”,“外部网络” 选择管理员提供的 “public-network”,点击 “创建”;
-
进入刚创建的 “web-router”,点击 “接口”→“添加接口”;
-
“子网” 选择 “web-network” 的子网(192.168.10.0/24),点击 “添加”;
-
此时路由器会自动获取一个公网 IP(来自 public-network),同时内部子网的网关会指向路由器。
- 给虚拟机分配浮动 IP:
-
进入 “项目”→“网络”→“浮动 IP”,点击 “分配 IP 到项目”;
-
“浮动网络” 选择 “public-network”,点击 “分配 IP”;
-
找到分配好的浮动 IP(比如 203.0.113.10),点击 “关联”;
-
“端口” 选择 Web 虚拟机的端口(通常显示为 “虚拟机名称 - eth0”),点击 “关联”。
- 验证效果:
-
登录 Web 虚拟机,执行
ping ``8.8.8.8(谷歌 DNS),能 ping 通说明可以访问外网; -
外部电脑执行
telnet ``203.0.113.10`` 80(假设 Web 服务在 80 端口),能连接说明浮动 IP 生效。
场景 3:搭建 “隔离的租户网络”(多租户环境必备)
需求:企业有两个部门(研发部、测试部),各自的虚拟机要在独立的网络中,互相不能访问,保证数据隔离。
核心原理:租户隔离
OpenStack 通过 “项目(Project)” 实现租户隔离,每个项目的网络资源(网络、子网、路由器)默认只能自己使用,其他项目看不到也访问不了。
配置示例
-
管理员创建两个项目:“dev-project”(研发部)、“test-project”(测试部);
-
研发人员登录 “dev-project”,创建 “dev-network”(子网 192.168.40.0/24)和 “dev-router”,连接到外部网络;
-
测试人员登录 “test-project”,创建 “test-network”(子网 192.168.50.0/24)和 “test-router”,连接到外部网络;
-
此时,研发部的虚拟机(192.168.40.10)无法 ping 通测试部的虚拟机(192.168.50.20),因为它们属于不同项目,网络资源完全隔离。
5 个最常见的网络问题及解决方法
即使配置步骤对了,也可能遇到各种问题,这里总结了新手最常踩的坑,附带排查方法:
1. 虚拟机启动后没有 IP?
可能原因:
-
子网没有启用 DHCP;
-
虚拟机的端口没有绑定到正确的网络;
-
Neutron 的 DHCP 服务(dhcp-agent)没启动。
解决步骤:
-
检查子网:进入 “子网”→“test-subnet”→“详情”,确认 “DHCP” 是 “启用” 状态;
-
检查虚拟机端口:进入 “网络”→“端口”,找到虚拟机对应的端口,确认 “网络” 是正确的(比如 test-network);
-
检查 dhcp-agent 状态:在控制节点执行
openstack network agent list | grep dhcp,确认 “状态” 是 “UP”,如果是 “DOWN”,执行systemctl restart neutron-dhcp-agent重启服务。
2. 虚拟机能 ping 通同网段,却 ping 不通其他网段?
可能原因:
-
没有创建路由器,或者路由器没有添加对应子网的接口;
-
路由器的网关配置错误。
解决步骤:
-
检查路由器接口:进入 “路由器”→“web-router”→“接口”,确认两个子网的接口都已添加;
-
验证网关:登录虚拟机,执行
ip route,查看默认网关是否是路由器在该子网的接口 IP(比如 192.168.10.1),如果不是,重新配置虚拟机网关。
3. 虚拟机能访问外网,外部却访问不了虚拟机(浮动 IP 没用)?
可能原因:
-
浮动 IP 没有正确关联到虚拟机端口;
-
虚拟机的防火墙(比如 iptables)禁止了外部访问;
-
Neutron 的 L3 代理(l3-agent)没启动。
解决步骤:
-
检查浮动 IP 关联:进入 “浮动 IP”,确认浮动 IP 的 “关联端口” 是虚拟机的正确端口;
-
关闭虚拟机防火墙:登录虚拟机,执行
systemctl stop firewalld(CentOS)或ufw disable(Ubuntu),再测试外部访问; -
检查 l3-agent 状态:在控制节点执行
openstack network agent list | grep l3,确认 “状态” 是 “UP”,否则重启服务:systemctl restart neutron-l3-agent。
4. 不同项目的虚拟机无法互通(需要互通时)?
可能原因:项目隔离导致网络不通,默认情况下不同项目的网络是隔离的。
解决方法:
-
管理员可以创建 “共享网络”:进入 “管理员”→“网络”→“网络”,找到需要共享的网络,点击 “编辑”,勾选 “共享”,这样其他项目就能使用这个网络;
-
或者通过 “对等连接(Peering)”:在两个项目的路由器之间创建对等连接,实现跨项目通信(适合不需要共享网络,只需要部分虚拟机互通的场景)。
5. 网络速度慢?
可能原因:
-
物理网卡带宽不足;
-
Neutron 的网络模式选择不当(比如用了 “Linux Bridge” 而不是 “Open vSwitch”,后者性能更好);
-
虚拟机的网卡配置错误(比如没启用多队列)。
解决方法:
-
检查物理网卡:在计算节点执行
iftop,查看物理网卡(比如 eth0)的带宽使用情况,若已满,考虑升级网卡或增加网卡; -
切换网络模式:生产环境建议用 “Open vSwitch”(OVS),检查控制节点的 Neutron 配置文件
/etc/neutron/plugins/ml2/ml2_conf.ini,确认mechanism_drivers = openvswitch; -
启用虚拟机网卡多队列:创建虚拟机时,在 “网卡” 配置中,“多队列数” 设为 2 或 4(根据物理 CPU 核心数调整),能提升网络吞吐量。
总结:OpenStack 网络管理的核心逻辑
其实 OpenStack 网络并没有那么复杂,核心就是 “先搭积木,再连线路”:
-
搭积木:创建网络(虚拟交换机)、子网(IP 段)、端口(交换机端口),把虚拟机 “插” 到端口上;
-
连线路:用路由器连接不同的网络,实现内部互通;用浮动 IP 连接虚拟网络和公网,实现外部访问;
-
保安全:通过项目隔离、防火墙(Neutron 的 Security Group)控制网络访问,避免风险。
