06.OpenStack网络管理

OpenStack 网络管理基础知识

文章目录

  • [OpenStack 网络管理基础知识](#OpenStack 网络管理基础知识)
    • [OpenStack 网络的 "核心骨架"](#OpenStack 网络的 “核心骨架”)
      • [1. 3 个最基础的网络 "积木"](#1. 3 个最基础的网络 “积木”)
      • [2. 让网络 "互联互通" 的关键:路由器(Router)](#2. 让网络 “互联互通” 的关键:路由器(Router))
      • [3. 让虚拟机 "暴露在外":浮动 IP(Floating IP)](#3. 让虚拟机 “暴露在外”:浮动 IP(Floating IP))
    • [3 种常用网络场景](#3 种常用网络场景)
      • [场景 1:搭建 "仅内部通信" 的私有网络(适合测试环境)](#场景 1:搭建 “仅内部通信” 的私有网络(适合测试环境))
        • [1. 用 Horizon 配置(图形化,简单)](#1. 用 Horizon 配置(图形化,简单))
        • [2. 用命令行配置(适合批量操作)](#2. 用命令行配置(适合批量操作))
      • [场景 2:搭建 "能访问外网" 的网络(适合生产环境的应用服务器)](#场景 2:搭建 “能访问外网” 的网络(适合生产环境的应用服务器))
        • [配置步骤(以 Horizon 为例)](#配置步骤(以 Horizon 为例))
      • [场景 3:搭建 "隔离的租户网络"(多租户环境必备)](#场景 3:搭建 “隔离的租户网络”(多租户环境必备))
    • [5 个最常见的网络问题及解决方法](#5 个最常见的网络问题及解决方法)
      • [1. 虚拟机启动后没有 IP?](#1. 虚拟机启动后没有 IP?)
      • [2. 虚拟机能 ping 通同网段,却 ping 不通其他网段?](#2. 虚拟机能 ping 通同网段,却 ping 不通其他网段?)
      • [3. 虚拟机能访问外网,外部却访问不了虚拟机(浮动 IP 没用)?](#3. 虚拟机能访问外网,外部却访问不了虚拟机(浮动 IP 没用)?)
      • [4. 不同项目的虚拟机无法互通(需要互通时)?](#4. 不同项目的虚拟机无法互通(需要互通时)?)
      • [5. 网络速度慢?](#5. 网络速度慢?)
    • [总结:OpenStack 网络管理的核心逻辑](#总结: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 虚拟机访问数据库虚拟机:

  1. 创建一个名为 "web-db-router" 的路由器;

  2. 把路由器的一个 "接口" 绑定到 "web-network" 的子网(192.168.10.0/24),自动分配网关 IP(比如 192.168.10.1);

  3. 再把路由器的另一个 "接口" 绑定到 "db-network" 的子网(192.168.20.0/24),自动分配网关 IP(比如 192.168.20.1);

  4. 此时,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 机:

  1. 在 Neutron 中创建一个 "浮动 IP 池",把 "203.0.113.0/24" 加入池中;

  2. 从池中分配一个浮动 IP,比如 203.0.113.10;

  3. 把 203.0.113.10 绑定到 Web 虚拟机的私有 IP(192.168.10.10)上;

  4. 外部用户通过访问 "203.0.113.10",就能直接连接到这台 Web 虚拟机了。

3 种常用网络场景

了解了基础概念后,我们结合实际工作中最常见的 3 个场景,一步步教你配置,所有操作都提供Horizon(Web 界面)命令行(CLI) 两种方式,新手可以先从 Web 界面入手。

场景 1:搭建 "仅内部通信" 的私有网络(适合测试环境)

需求:创建一个网络,让多台虚拟机在内部互相通信,但不访问外网。

1. 用 Horizon 配置(图形化,简单)
  1. 登录 Horizon,进入 "项目"→"网络"→"网络",点击 "创建网络";

  2. 填写网络名称(比如 "test-network"),勾选 "创建子网",点击 "下一步";

  3. 填写子网信息:

  • 子网名称: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 范围);

  1. 点击 "创建",网络和子网就建好了;

  2. 创建虚拟机时,"网络" 选择 "test-network",启动后虚拟机就能自动获取 192.168.30.x 的 IP,并且能和同网络的其他虚拟机互相 ping 通。

2. 用命令行配置(适合批量操作)
cmd 复制代码
\# 1. 创建网络test-network

openstack network create test-network

\# 2. 在test-network下创建子网test-subnet

openstack 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-network

openstack subnet list   # 能看到test-subnet

场景 2:搭建 "能访问外网" 的网络(适合生产环境的应用服务器)

需求:Web 虚拟机不仅能内部通信,还能访问外网(比如下载 Docker、安装软件),同时外部用户能通过浮动 IP 访问 Web 服务。

配置步骤(以 Horizon 为例)
  1. 先确认 "外部网络" 已存在

    外部网络是 OpenStack 连接物理公网的 "桥梁",通常由管理员提前创建(新手不用自己建,找管理员要名称即可,比如 "public-network")。

  2. 创建内部网络和子网

    参考场景 1,创建 "web-network" 和子网 "192.168.10.0/24"。

  3. 创建路由器并连接内外网

  • 进入 "项目"→"网络"→"路由器",点击 "创建路由器";

  • 名称填 "web-router","外部网络" 选择管理员提供的 "public-network",点击 "创建";

  • 进入刚创建的 "web-router",点击 "接口"→"添加接口";

  • "子网" 选择 "web-network" 的子网(192.168.10.0/24),点击 "添加";

  • 此时路由器会自动获取一个公网 IP(来自 public-network),同时内部子网的网关会指向路由器。

  1. 给虚拟机分配浮动 IP
  • 进入 "项目"→"网络"→"浮动 IP",点击 "分配 IP 到项目";

  • "浮动网络" 选择 "public-network",点击 "分配 IP";

  • 找到分配好的浮动 IP(比如 203.0.113.10),点击 "关联";

  • "端口" 选择 Web 虚拟机的端口(通常显示为 "虚拟机名称 - eth0"),点击 "关联"。

  1. 验证效果
  • 登录 Web 虚拟机,执行ping ``8.8.8.8(谷歌 DNS),能 ping 通说明可以访问外网;

  • 外部电脑执行telnet ``203.0.113.10`` 80(假设 Web 服务在 80 端口),能连接说明浮动 IP 生效。

场景 3:搭建 "隔离的租户网络"(多租户环境必备)

需求:企业有两个部门(研发部、测试部),各自的虚拟机要在独立的网络中,互相不能访问,保证数据隔离。

核心原理:租户隔离

OpenStack 通过 "项目(Project)" 实现租户隔离,每个项目的网络资源(网络、子网、路由器)默认只能自己使用,其他项目看不到也访问不了。

配置示例
  1. 管理员创建两个项目:"dev-project"(研发部)、"test-project"(测试部);

  2. 研发人员登录 "dev-project",创建 "dev-network"(子网 192.168.40.0/24)和 "dev-router",连接到外部网络;

  3. 测试人员登录 "test-project",创建 "test-network"(子网 192.168.50.0/24)和 "test-router",连接到外部网络;

  4. 此时,研发部的虚拟机(192.168.40.10)无法 ping 通测试部的虚拟机(192.168.50.20),因为它们属于不同项目,网络资源完全隔离。

5 个最常见的网络问题及解决方法

即使配置步骤对了,也可能遇到各种问题,这里总结了新手最常踩的坑,附带排查方法:

1. 虚拟机启动后没有 IP?

可能原因

  • 子网没有启用 DHCP;

  • 虚拟机的端口没有绑定到正确的网络;

  • Neutron 的 DHCP 服务(dhcp-agent)没启动。

解决步骤

  1. 检查子网:进入 "子网"→"test-subnet"→"详情",确认 "DHCP" 是 "启用" 状态;

  2. 检查虚拟机端口:进入 "网络"→"端口",找到虚拟机对应的端口,确认 "网络" 是正确的(比如 test-network);

  3. 检查 dhcp-agent 状态:在控制节点执行openstack network agent list | grep dhcp,确认 "状态" 是 "UP",如果是 "DOWN",执行systemctl restart neutron-dhcp-agent重启服务。

2. 虚拟机能 ping 通同网段,却 ping 不通其他网段?

可能原因

  • 没有创建路由器,或者路由器没有添加对应子网的接口;

  • 路由器的网关配置错误。

解决步骤

  1. 检查路由器接口:进入 "路由器"→"web-router"→"接口",确认两个子网的接口都已添加;

  2. 验证网关:登录虚拟机,执行ip route,查看默认网关是否是路由器在该子网的接口 IP(比如 192.168.10.1),如果不是,重新配置虚拟机网关。

3. 虚拟机能访问外网,外部却访问不了虚拟机(浮动 IP 没用)?

可能原因

  • 浮动 IP 没有正确关联到虚拟机端口;

  • 虚拟机的防火墙(比如 iptables)禁止了外部访问;

  • Neutron 的 L3 代理(l3-agent)没启动。

解决步骤

  1. 检查浮动 IP 关联:进入 "浮动 IP",确认浮动 IP 的 "关联端口" 是虚拟机的正确端口;

  2. 关闭虚拟机防火墙:登录虚拟机,执行systemctl stop firewalld(CentOS)或ufw disable(Ubuntu),再测试外部访问;

  3. 检查 l3-agent 状态:在控制节点执行openstack network agent list | grep l3,确认 "状态" 是 "UP",否则重启服务:systemctl restart neutron-l3-agent

4. 不同项目的虚拟机无法互通(需要互通时)?

可能原因:项目隔离导致网络不通,默认情况下不同项目的网络是隔离的。

解决方法

  • 管理员可以创建 "共享网络":进入 "管理员"→"网络"→"网络",找到需要共享的网络,点击 "编辑",勾选 "共享",这样其他项目就能使用这个网络;

  • 或者通过 "对等连接(Peering)":在两个项目的路由器之间创建对等连接,实现跨项目通信(适合不需要共享网络,只需要部分虚拟机互通的场景)。

5. 网络速度慢?

可能原因

  • 物理网卡带宽不足;

  • Neutron 的网络模式选择不当(比如用了 "Linux Bridge" 而不是 "Open vSwitch",后者性能更好);

  • 虚拟机的网卡配置错误(比如没启用多队列)。

解决方法

  1. 检查物理网卡:在计算节点执行iftop,查看物理网卡(比如 eth0)的带宽使用情况,若已满,考虑升级网卡或增加网卡;

  2. 切换网络模式:生产环境建议用 "Open vSwitch"(OVS),检查控制节点的 Neutron 配置文件/etc/neutron/plugins/ml2/ml2_conf.ini,确认mechanism_drivers = openvswitch

  3. 启用虚拟机网卡多队列:创建虚拟机时,在 "网卡" 配置中,"多队列数" 设为 2 或 4(根据物理 CPU 核心数调整),能提升网络吞吐量。

总结:OpenStack 网络管理的核心逻辑

其实 OpenStack 网络并没有那么复杂,核心就是 "先搭积木,再连线路":

  1. 搭积木:创建网络(虚拟交换机)、子网(IP 段)、端口(交换机端口),把虚拟机 "插" 到端口上;

  2. 连线路:用路由器连接不同的网络,实现内部互通;用浮动 IP 连接虚拟网络和公网,实现外部访问;

  3. 保安全:通过项目隔离、防火墙(Neutron 的 Security Group)控制网络访问,避免风险。

相关推荐
asdfsdgss3 小时前
多项目共享资源:Ruby 定时任务基于 Whenever 的动态扩缩容
java·网络·ruby
R.lin5 小时前
红包实现方案
java·开发语言·网络·后端·架构
王道长服务器 | 亚马逊云5 小时前
AWS Auto Scaling:自动扩容,让服务器像呼吸一样灵活
运维·网络·自动化·云计算·aws
Xの哲學5 小时前
Linux ioctl 深度剖析:从原理到实践
linux·网络·算法·架构·边缘计算
非凡的世界5 小时前
ThinkPHP6 集成TCP长连接 GatewayWorker
网络·网络协议·tcp/ip·gateway·thinkphp·worker·workman
国科安芯6 小时前
国产MCU芯片在船舶压力传感器中的应用探索与实践
网络·单片机·嵌入式硬件·fpga开发·车载系统
sanzk6 小时前
S7-PLCSIM Advanced V3.0下载PLC显示红色IP
服务器·网络·tcp/ip
❀͜͡傀儡师6 小时前
网络嗅探抓包工具 Wireshark v4.6.0
网络·测试工具·wireshark
white-persist6 小时前
Linux中,vi(vim)编辑器大部分快捷键
linux·运维·服务器·网络·安全·编辑器·vim