news 2026/8/20 2:21:45

OpenStack核心服务配置实战:从网络到镜像的完整部署指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenStack核心服务配置实战:从网络到镜像的完整部署指南

如果你正在尝试搭建私有云,或者想深入理解云计算的底层架构,那么 OpenStack 是你绕不开的一环。然而,很多教程在讲完基础环境准备后,就戛然而止,留下一堆未配置的服务和迷茫的初学者。真正的挑战,恰恰是从“基础搭建”到“核心服务可用”的这一步——网络配置、镜像上传、安全组规则、密钥对管理,这些才是决定你的 OpenStack 是“玩具”还是“工具”的关键。

本文将聚焦于 OpenStack 基础搭建后的核心服务配置,这是整个平台能否正常提供计算、网络和存储资源的分水岭。我们将不满足于仅仅启动服务,而是深入每个配置项背后的逻辑,从 Dashboard 登录、镜像管理、网络规划,到安全策略和实例启动,提供一个清晰、可落地的操作路径。读完本文,你将能独立完成一个具备基本 IaaS 能力的 OpenStack 环境,并理解每一步配置的“为什么”,从而具备排查常见问题的能力。

1. 这篇文章真正要解决的问题

很多人在按照官方文档或教程完成 OpenStack 的初步安装后,会陷入一个尴尬的境地:服务都起来了,Dashboard 也能登录,但就是无法创建虚拟机。控制台上一片红字,错误信息五花八门,从网络找不到、镜像无效,到配额不足、安全组错误。问题根源往往不在于安装步骤,而在于安装完成后那一系列至关重要的初始配置被忽略了。

本文要解决的核心问题就是:在 OpenStack 基础服务安装完毕后,如何系统性地完成核心组件的初始配置,使其真正具备提供云服务的能力?具体来说,我们将拆解以下几个关键任务:

  1. 打通网络:如何规划并创建供虚拟机使用的虚拟网络,使其能够访问外网和相互通信?
  2. 准备镜像:从哪里获取系统镜像,如何上传并配置,使其能被计算服务正常识别和引导?
  3. 设定安全边界:如何配置安全组和密钥对,在提供便利的同时保障实例的基本安全?
  4. 分配资源:如何管理项目(租户)的配额,确保资源分配合理可控?
  5. 启动第一台实例:将以上所有配置串联,完成从零到一创建虚拟机的完整流程。

我们假设你已经完成了最小化 OpenStack 平台(至少包含 Keystone, Glance, Nova, Neutron, Horizon)的基础安装,并且所有服务状态正常。接下来的内容,就是带你跨过“安装成功”到“服务可用”的最后一道鸿沟。

2. 核心概念与配置逻辑梳理

在动手之前,理解 OpenStack 几个核心服务在创建虚拟机时的协作关系至关重要。这能帮助你在配置出错时,快速定位问题源头。

  • Keystone (身份认证):所有操作的起点。你需要一个拥有管理员权限的用户和项目(通常为adminadmin)来执行配置操作。本文的操作都将基于此。
  • Glance (镜像服务):虚拟机的“安装盘”。它存储了各种操作系统的镜像文件(如 CentOS, Ubuntu 的 QCOW2 文件)。Nova 创建实例时,需要从 Glance 拉取指定的镜像。
  • Neutron (网络服务):虚拟机的“网卡和交换机”。它管理着虚拟网络的创建、子网划分、路由以及外部网络的接入。这是配置中最复杂但也最关键的一环。
  • Nova (计算服务):虚拟机的“调度器和生命周期管理器”。它负责在计算节点上创建、启动、停止和删除虚拟机实例。
  • Horizon (仪表板):Web 管理界面。我们将主要通过它进行配置,直观且易于理解。

配置的核心逻辑链条

  1. 管理员登录 Dashboard。
  2. “管理员” -> “系统” -> “网络”中,创建外部网络(提供公网或外部网络接入)。
  3. “项目” -> “网络” -> “网络”中,创建项目内部网络和子网,并通过路由器将其连接到外部网络。
  4. “项目” -> “计算” -> “镜像”中,上传操作系统镜像。
  5. “项目” -> “计算” -> “密钥对”中,创建或导入 SSH 密钥对,用于安全登录实例。
  6. “项目” -> “网络” -> “安全组”中,配置防火墙规则,例如开放 SSH(22) 和 ICMP (ping) 端口。
  7. 最后,在“项目” -> “计算” -> “实例”中,选择镜像、选择网络(上一步创建的内部网络)、选择密钥对、选择安全组,启动实例。

接下来,我们将按照这个逻辑,一步步进行实操。

3. 环境准备与登录验证

在进行任何配置之前,请确保你的环境满足以下条件,并能成功登录管理界面。

前置条件确认:

  • 操作系统:本文以 Ubuntu 22.04 LTS 或 CentOS Stream 9/Rocky Linux 9 为例,这是当前 OpenStack 支持较好的发行版。
  • OpenStack 版本:假设你已部署 Yoga 或更晚的稳定版本。不同版本界面可能略有差异,但核心概念一致。
  • 服务状态:确保核心服务(nova-api,neutron-server,glance-api,httpdapache2)处于运行状态。
    # 在控制节点上检查关键服务状态(示例为 systemd) sudo systemctl status nova-api sudo systemctl status neutron-server sudo systemctl status glance-api sudo systemctl status httpd # 或 apache2
  • 网络连通性:控制节点和计算节点的管理网络、数据网络(如果分离)应畅通。

登录 OpenStack Dashboard (Horizon):

  1. 在浏览器中访问你的 Horizon 地址,通常是http://<controller-node-ip>/dashboard
  2. 使用你在安装阶段创建的管理员账户登录。
    • : 通常选择Default
    • 用户名admin
    • 密码: 你为admin用户设置的密码
  3. 登录后,界面左上角应显示当前项目和用户(例如admin@admin)。请确保你位于“管理员”视角(顶部导航栏有“管理员”选项卡)。后续配置将在“管理员”和“项目”两个区域交叉进行。

4. 核心配置流程拆解:从网络到镜像

4.1 第一步:创建外部网络(Provider Network)

这是虚拟机访问互联网或外部物理网络的桥梁。此操作通常在“管理员”视角下完成,因为它涉及物理网络接口的映射。

  1. admin用户登录后,点击顶部导航栏的“管理员”
  2. 在左侧导航栏,选择“系统” -> “网络”
  3. 点击页面右上角的“创建网络”按钮。
  4. 在弹出窗口中,填写网络信息:
    • 网络名称: 例如ext-net
    • 项目: 保持为admin
    • 网络类型: 选择“Flat”“VLAN”。在简单的实验环境中,Flat更常见。这需要你的物理网络支持。
    • 物理网络: 填写一个标签,例如physnet1这个名称必须与 Neutron 配置文件中bridge_mappings项定义的名称一致。这是连接虚拟网络和物理网卡的关键。
    • 分段 ID: 对于Flat类型,留空或填-1;对于VLAN,填写具体的 VLAN ID。
    • 共享的勾选。这样所有项目都能使用这个外部网络。
    • 外部网络必须勾选。这标志着此网络是通往外部世界的出口。
  5. 点击“下一步”,进入“子网”配置。
    • 子网名称: 例如ext-subnet
    • 网络地址: 填写你的物理网络中可以分配给虚拟机的 IP 段,例如192.168.1.0/24确保该网段与你的宿主机管理网络不冲突,且路由器(网关)可达
    • 网关 IP: 填写该网段的网关地址,例如192.168.1.1
    • 禁用网关: 不要勾选。
  6. 点击“下一步”,进入“子网详情”(DHCP 等),通常可以保持默认,直接点击“创建”

至此,一个外部网络创建完成。它现在是一个“资源”,可以被项目内的路由器使用。

4.2 第二步:创建项目内部网络与路由器

现在切换到普通项目视角,为你的虚拟机创建私有的内部网络,并通过路由器连接到上一步创建的外部网络。

  1. 点击顶部导航栏,从“管理员”切换回“项目”选项卡。确保当前项目是你想操作的项目(如admin项目)。
  2. 在左侧导航栏,选择“网络” -> “网络”
  3. 点击“创建网络”
    • 网络名称: 例如private-net
    • 项目: 自动填充为当前项目。
    • 网络类型: 选择“Local”“VXLAN”“GRE”。在单节点或简单覆盖网络环境中,LocalVXLAN均可。
  4. 点击“下一步”,配置子网:
    • 子网名称: 例如private-subnet
    • 网络地址: 定义一个与外部网络不同的私有网段,例如10.0.0.0/24
    • 网关 IP: 可以设置为该子网的第一个 IP,如10.0.0.1,或留空(不启用网关,由路由器提供)。
  5. 点击“下一步”,在“子网详情”中,你可以启用 DHCP,并设置 DHCP 地址池(例如10.0.0.100,10.0.0.200)。这允许虚拟机自动获取 IP。
  6. 点击“创建”。现在你有了一个内部网络private-net
  7. 接下来创建路由器。在左侧导航栏,选择“网络” -> “路由器”
  8. 点击“创建路由器”
    • 路由器名称: 例如router1
    • 外部网络这是关键一步。从下拉菜单中选择你刚才在管理员视角创建的ext-net
  9. 点击“创建路由器”
  10. 路由器创建后,点击它的名称进入详情页。
  11. 在“接口”选项卡,点击“添加接口”
    • 子网: 选择你刚创建的private-net的子网(private-subnet)。
    • IP 地址: 可以留空,路由器会自动使用该子网的网关 IP(如10.0.0.1)作为接口地址。
  12. 点击“提交”

至此,网络拓扑已建立完成:虚拟机连接private-net-> 路由器router1连接private-netext-net->ext-net通往外部物理网络。虚拟机可以通过路由器进行 NAT,访问外部互联网。

4.3 第三步:上传系统镜像至 Glance

没有镜像,Nova 无法创建虚拟机。我们需要一个操作系统的磁盘镜像文件。

  1. 在“项目”视角下,选择左侧导航栏的“计算” -> “镜像”
  2. 点击“创建镜像”
  3. 填写镜像信息:
    • 名称: 例如centos-9-stream
    • 描述: 可选。
    • 镜像源: 选择“镜像文件”
    • 镜像文件: 点击“选择文件”,从本地选择你下载好的镜像文件。强烈推荐使用 QCOW2 格式,它支持稀疏文件,节省空间。例如CentOS-Stream-GenericCloud-9-latest.x86_64.qcow2
    • 格式: 选择QCOW2
    • 架构: 选择x86_64
    • 最小磁盘(GB): 根据镜像大小填写,例如10
    • 最小内存(MB): 根据镜像要求填写,例如1024
    • 公开勾选。这样所有项目都能看到和使用此镜像。
    • 受保护的: 可选,防止误删。
  4. 点击“创建镜像”。上传过程需要一些时间,取决于镜像大小和网络速度。上传完成后,状态会变为“活跃”。

镜像获取途径

  • 官方云镜像: 这是最可靠的方式。
    • CentOS: https://cloud.centos.org/centos/
    • Ubuntu: https://cloud-images.ubuntu.com/
    • CirrOS: 一个极小的测试镜像,适合快速验证。
  • 你也可以使用qemu-img命令转换已有的 ISO 或 RAW 镜像为 QCOW2 格式。

4.4 第四步:管理密钥对与安全组

为了安全地通过 SSH 登录虚拟机,我们需要密钥对。同时,需要配置安全组来开放必要的端口。

创建密钥对:

  1. 在“项目”视角下,选择“计算” -> “密钥对”
  2. 点击“创建密钥对”
  3. 输入一个名称,例如my-keypair
  4. 点击“创建密钥对”。浏览器会自动下载一个my-keypair.pem文件。请妥善保管此文件,它是登录虚拟机的唯一凭证。如果丢失,将无法直接 SSH 登录。
  5. 下载后,需要设置正确的权限:
    chmod 600 my-keypair.pem

配置安全组:安全组是实例级别的虚拟防火墙。

  1. 在“项目”视角下,选择“网络” -> “安全组”
  2. 默认会有一个default安全组。我们可以编辑它,或创建一个新的。点击“管理规则”(针对default组)。
  3. 默认规则通常只允许组内通信。我们需要添加两条规则:
    • 允许 SSH (TCP 22): 点击“添加规则”。
      • 规则:SSH
      • 方向:入口
      • 点击“添加”。
    • 允许 ICMP (Ping): 点击“添加规则”。
      • 规则:所有ICMP
      • 方向:入口
      • 点击“添加”。
  4. 这样,来自任何 IP 的 SSH 和 Ping 请求都将被允许。在生产环境中,你应该将“远程”字段限制为特定的 CIDR(如公司 IP 段),而不是0.0.0.0/0

5. 启动你的第一个实例:完整流程

现在,所有拼图都已就位,可以创建第一台虚拟机了。

  1. 在“项目”视角下,选择“计算” -> “实例”
  2. 点击“启动实例”
  3. “详情”选项卡
    • 实例名称test-vm-1
    • 可用域: 通常选择nova
    • 计数1
  4. “源”选项卡
    • 在“选择启动源”中,确保选中“镜像”
    • 点击你之前上传的镜像(如centos-9-stream)旁边的+号。
    • 分配到的类型: 保持为Volume(从镜像创建新卷)或选择Image(直接启动)。对于测试,Image即可。
  5. “实例类型”选项卡
    • 选择一个合适的实例类型(Flavor),它定义了 vCPU、内存和磁盘大小。例如,选择m1.small(1 vCPU, 2GB RAM, 20GB Disk)。点击其旁边的+号。
  6. “网络”选项卡
    • 这是关键。从可用网络列表中,选择你创建的内部网络private-net,点击其旁边的+号。不要选择ext-net,虚拟机应该连接私有网络。
  7. “网络端口”“安全组”“密钥对”选项卡通常会自动继承或提供选择。
    • 安全组: 确认已选中你配置好的安全组(如default)。
    • 密钥对必须选择你之前创建的my-keypair
  8. “配置”“服务器组”“调度提示”“元数据”选项卡可以保持默认。
  9. 最后,点击“启动实例”

实例创建需要几分钟。你可以在“实例”列表页面看到它的状态从“构建中”变为“运行中”。

6. 验证与访问实例

实例状态变为“运行中”后,还需要获取其 IP 地址并测试连通性。

  1. 获取浮动 IP(Floating IP): 实例目前只有私有网络 IP (10.0.0.x)。要从外部网络(如你的办公电脑)SSH 它,需要为其分配一个浮动 IP(来自ext-net池)。
    • 在“项目” -> “网络” -> “浮动 IP”中,点击“分配 IP 给项目”。
    • “池”选择你创建的外部网络ext-net,然后点击“分配 IP”。
    • 分配成功后,在浮动 IP 列表中找到该 IP,点击其右侧的“关联”按钮。
    • 选择你的实例test-vm-1和要关联的端口(通常只有一个),点击“关联”。
  2. 测试连通性
    • 在实例列表页,现在可以看到实例同时拥有“固定 IP”(私有IP)和“浮动 IP”(公网IP)。
    • 首先 Ping 一下浮动 IP,测试网络是否通畅:
      ping <floating-ip>
    • 如果 Ping 通,尝试 SSH 登录。使用之前下载的密钥对文件:
      ssh -i /path/to/my-keypair.pem centos@<floating-ip> # 对于 CentOS 镜像,默认用户通常是 `centos`。 # 对于 Ubuntu 镜像,默认用户通常是 `ubuntu`。
    • 如果登录成功,恭喜你!你的 OpenStack 私有云已经可以正常提供计算服务了。

7. 常见问题与排查思路

在配置和启动过程中,你可能会遇到以下问题。这里提供一个排查路径。

问题现象可能原因排查方式解决方案
Dashboard 无法登录1. Keystone 服务异常。
2. Apache/Nginx 服务异常。
3. 防火墙阻止端口。
1.systemctl status httpdsystemctl status apache2
2.systemctl status keystone
3. 检查iptablesfirewalld规则。
1. 重启相关服务。
2. 检查 Keystone 日志 (/var/log/keystone/keystone.log)。
3. 开放 80/443 端口。
创建网络时失败1. Neutron 服务异常。
2. 物理网络标签 (physnet1) 与配置不符。
3. 底层 OVS 或 Linux Bridge 代理未正确配置。
1.systemctl status neutron-server
2. 检查控制节点/etc/neutron/plugins/ml2/ml2_conf.ini中的bridge_mappings
3.neutron agent-list查看代理状态。
1. 确保 Neutron 相关服务运行。
2. 确保bridge_mappings配置正确且与 Dashboard 输入一致。
3. 重启异常的 Neutron 代理。
实例状态长时间为“构建中”或变为“错误”1. Nova 调度失败(资源不足)。
2. Glance 镜像不可用或格式问题。
3. 计算节点 Hypervisor 问题(如 KVM 未启用)。
4. 网络配置错误,端口创建失败。
1. 查看实例详情页的“日志”选项卡。
2. 在控制节点查看 Nova 日志 (/var/log/nova/nova-conductor.log,nova-scheduler.log)。
3. 在计算节点查看 Nova 日志 (/var/log/nova/nova-compute.log)。
4.nova listnova show <instance-id>查看详细错误信息。
1. 检查计算节点资源(nova hypervisor-stats)。
2. 确认镜像状态为“活跃”,格式正确。
3. 计算节点运行egrep -c ‘(vmx|svm)’ /proc/cpuinfo确认虚拟化支持,并安装qemu-kvm
4. 检查 Neutron 日志。
实例启动后无法 Ping 通或 SSH1. 安全组未正确配置(未开放 ICMP/22)。
2. 浮动 IP 未关联或关联错误。
3. 路由器网关配置错误,或外部网络不通。
4. 实例内部防火墙(如 firewalld, iptables)未关闭。
1. 检查实例关联的安全组规则。
2. 检查浮动 IP 是否已关联到该实例的正确端口。
3. 在实例内部ip addr查看是否获取到 IP。
4. 尝试从同一私有网络的其他实例 Ping 其固定 IP,排查内部网络。
1. 添加正确的安全组规则。
2. 重新关联浮动 IP。
3. 检查路由器接口和网关设置。登录路由器命名空间排查 (ip netns exec qrouter-<id> bash)。
4. 对于测试,可在镜像制作时禁用内部防火墙,或通过控制台登录实例后关闭。
无法从实例访问外网1. 路由器上没有设置 NAT 规则或网关。
2. 外部网络网关本身不可达。
3. 实例的 DNS 配置错误。
1. 登录路由器命名空间,检查iptables -t nat -L和路由表ip route
2. 在路由器命名空间 Ping 外部网关。
3. 在实例内cat /etc/resolv.conf查看 DNS。
1. 确认路由器已正确连接外部网络且网关 IP 正确。
2. 确保物理网络层面,外部网关 IP 是可达的。
3. 在实例子网创建时指定正确的 DNS 服务器,或通过 DHCP 下发。

8. 最佳实践与工程建议

完成基础配置只是第一步。要让 OpenStack 环境稳定、可维护,还需要遵循一些最佳实践。

  1. 网络规划先行

    • 在物理部署前,就规划好管理网络、数据网络、外部网络(VLAN)的网段和 VLAN ID,避免冲突。
    • 为不同租户(项目)规划独立的内部网络段(如10.10.0.0/16,10.20.0.0/16)。
    • 考虑使用VXLAN作为租户网络类型,以获得更好的扩展性和隔离性。
  2. 镜像管理

    • 建立内部镜像仓库,统一管理经过优化和安全加固的基础镜像。
    • 使用cloud-init在实例首次启动时注入主机名、SSH 密钥、用户数据等,实现自动化初始化。
    • 定期更新基础镜像的安全补丁。
  3. 安全加固

    • 最小权限原则: 为不同角色的用户创建不同的项目和用户,分配最小必要权限。
    • 安全组精细化: 不要滥用0.0.0.0/0。为不同服务类型(Web, DB, App)创建专用的安全组,只开放必要的端口和源IP。
    • 密钥对管理: 强制使用密钥对登录,禁用密码登录。定期轮换密钥。
    • Dashboard 安全: 为 Horizon 配置 HTTPS,并考虑将其置于反向代理(如 Nginx)之后,增加 WAF 等安全层。
  4. 资源配额管理

    • 在“管理员” -> “项目” -> 选择项目 -> “配额”中,为每个项目设置合理的 vCPU、内存、实例数、浮动 IP 等配额,防止资源滥用。
    • 定期通过nova usage-list等命令审计资源使用情况。
  5. 日志与监控

    • 所有核心服务(Nova, Neutron, Glance, Keystone, Cinder)的日志都应集中收集(如 ELK Stack)。
    • 部署监控系统(如 Prometheus + Grafana),监控服务状态、资源利用率、API 响应时间等关键指标。
    • 为 Dashboard 操作设置审计日志。
  6. 备份与恢复

    • 定期备份关键数据库(MariaDB/MySQL 中的 Nova, Neutron, Keystone 等数据库)。
    • 备份 Glance 镜像存储后端。
    • 制定实例和数据卷的备份策略(如使用 Cinder Backup 服务)。

9. 总结与后续方向

通过本文的步骤,你应该已经成功地将一个“刚安装好”的 OpenStack 环境,配置成了一个可以创建、启动并访问虚拟机的“可用”私有云。我们重点攻克了从外部网络创建、内部网络规划、路由器互联,到镜像上传、安全策略配置和实例启动的完整链路。理解这个链路,是掌握 OpenStack 运维的基础。

然而,这仅仅是开始。一个生产可用的 OpenStack 集群还涉及更多深度内容:

  • 存储进阶: 集成 Cinder 块存储和 Swift 对象存储,为实例提供持久化卷和对象存储服务。
  • 高可用部署: 将控制节点、网络节点、存储节点分离,并采用集群化部署,避免单点故障。
  • 负载均衡即服务: 使用 Octavia 为实例提供负载均衡能力。
  • 编排服务: 学习 Heat 模板,实现基础设施即代码(IaC),一键部署复杂应用栈。
  • 性能调优: 针对 KVM 参数、Neutron 后端(OVS vs Linux Bridge)、Ceph 存储等进行性能优化。

建议你在当前稳定运行的单节点或双节点环境上,反复练习本文的配置流程,直到完全理解每个配置项的影响。然后,可以尝试阅读官方文档中关于上述进阶主题的指南,逐步构建更强大、更健壮的企业级云平台。OpenStack 的学习曲线虽然陡峭,但每一步的实践都会让你对云计算的理解更加深刻。建议收藏本文,在后续的搭建和运维中作为参考清单使用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/20 2:13:43

英飞凌XMC微控制器开发实战:从老技术文档挖掘核心价值与避坑指南

1. 从一份研讨会资料说起&#xff1a;为什么老技术文档依然值得深挖&#xff1f;最近在整理硬盘里的技术资料库&#xff0c;翻到了2014年英飞凌XMC微控制器巡回研讨会的一整套PDF和演示文稿。说实话&#xff0c;第一反应是“这都多少年前的东西了&#xff0c;还有用吗&#xff…

作者头像 李华
网站建设 2026/8/20 2:12:22

基于Claude构建AI代理团队:从架构设计到自动化部署实战

这次我们来看一个基于Claude构建自动化生活代理团队的项目。这个项目的核心不是教你写一个简单的脚本&#xff0c;而是如何利用Claude这样的高级语言模型作为“大脑”&#xff0c;结合自动化框架&#xff0c;打造一个能协同工作、处理复杂任务的AI代理团队。如果你对AI代理、自…

作者头像 李华
网站建设 2026/8/20 2:11:48

宝马M43B19发动机重建全记录:从诊断到组装的经典引擎焕新

1. 项目缘起&#xff1a;一台“小王子”的涅槃重生 在汽车爱好者的圈子里&#xff0c;总有一些代号被赋予了特殊的情感。对于老宝马车主而言&#xff0c;“小王子”这三个字&#xff0c;指的绝不是童话里的角色&#xff0c;而是那台代号为M43B19的1.9升四缸自然吸气发动机。它广…

作者头像 李华
网站建设 2026/8/20 2:11:20

从奔驰G63 AMG到天价车牌:解码中东汽车文化与社会符号传播

1. 从“提车”到“社交货币”&#xff1a;一次现象级的消费传播最近&#xff0c;一则“中东土豪全球首提全新奔驰G63 AMG”的消息&#xff0c;在社交媒体和车迷圈里不胫而走。这事儿有意思的点&#xff0c;其实不完全在于车本身。全新G63固然是硬派越野与豪华性能的图腾&#x…

作者头像 李华
网站建设 2026/8/20 2:10:05

OpenStack Neutron网络配置实战:从VXLAN到生产部署全解析

1. 先搞清楚 OpenStack 网络配置到底在解决什么问题 OpenStack 的网络配置&#xff0c;是很多人在搭建私有云时最容易卡住、也最影响后续使用体验的环节。它解决的远不止是“让虚拟机通网”这么简单&#xff0c;核心是 在物理服务器集群上&#xff0c;虚拟化出一套可以按需创建…

作者头像 李华