
在实际企业级私有云或虚拟化平台选型中OpenStack 因其开源、灵活和模块化的特性常被作为构建 IaaS 层基础设施的核心框架。然而对于初次接触 OpenStack 的工程师而言最大的挑战往往不是理解其复杂的架构图而是在搭建的第一步——基础环境与配置文件准备上。很多教程会直接给出命令但如果不理解每个配置文件的作用、参数间的依赖关系以及配置错误的典型表现后续的安装过程会频繁报错且难以排查。本文将以一个典型的 All-in-One单节点或最小化双节点部署场景为例深入讲解 OpenStack 搭建初期“基础文件的配置”环节。我们将不局限于复制粘贴命令而是重点剖析几个核心配置文件如网络接口、主机名、NTP、Yum源、数据库、消息队列等的配置逻辑、参数含义以及它们如何为后续的 OpenStack 组件安装铺平道路。无论你计划使用 Packstack、Kolla-Ansible 还是手动安装理解这些基础配置都是避免后续“盲人摸象”的关键。1. 理解 OpenStack 搭建前的核心准备工作在开始编辑任何配置文件之前必须明确目标环境和技术选型。OpenStack 的搭建路径多样基础文件的配置细节也因此有所不同。1.1 确定部署模式与节点规划部署模式决定了配置的复杂度和范围。对于学习和功能验证单节点All-in-One模式是最佳起点。对于生产环境则需要规划控制节点、计算节点、网络节点和存储节点。单节点部署所有服务控制、计算、网络、存储都运行在一台物理机或虚拟机上。配置相对集中但需要确保该节点有足够的 CPU、内存和磁盘资源。本文示例将主要围绕此模式展开。多节点部署服务分散在不同节点。基础配置需在所有节点上进行且要特别注意节点间的网络互通、主机名解析和时间同步。节点规划直接影响到网络配置。你需要至少准备两张网卡NIC管理网络用于 OpenStack 各组件内部通信如 API 调用、数据库访问、消息队列。通常使用一个独立的网段如 192.168.100.0/24。提供商网络/外部网络用于虚拟机实例访问外网Internet或与外部物理网络通信。这块网卡通常需要配置为桥接模式或特定 VLAN。1.2 明确基础环境要求在配置具体文件前操作系统、网络、主机名等基础环境必须就绪。操作系统主流选择是 CentOS/RHEL 7 或 8、Ubuntu 等。不同发行版的包管理工具和配置文件路径有差异。本文以 CentOS 7/Rocky Linux 8 为例。网络确保所有网卡已正确安装并能通过ip addr或ifconfig命令看到。管理网络需要配置静态 IP避免因 DHCP 导致 IP 变化引发服务不可用。主机名为节点设置一个完全限定域名FQDN例如controller.example.com。OpenStack 许多服务在通信时依赖主机名。2. 配置操作系统基础环境这是搭建 OpenStack 的基石任何一步的疏漏都可能导致后续组件安装失败。2.1 配置静态 IP 与主机名管理网络的静态 IP 是必须的。假设你的管理网卡是ens192规划的管理 IP 是192.168.100.10。编辑网络配置文件# CentOS 7 / RHEL 7 vi /etc/sysconfig/network-scripts/ifcfg-ens192 # Rocky Linux 8 / RHEL 8 / CentOS 8 (使用nmcli或编辑ifcfg此处展示ifcfg方式需确保NetworkManager已配置好) vi /etc/sysconfig/network-scripts/ifcfg-ens192修改或确保以下关键参数根据你的网络环境调整TYPEEthernet BOOTPROTOnone # 关键设置为静态不是dhcp DEFROUTEyes NAMEens192 DEVICEens192 ONBOOTyes IPADDR192.168.100.10 PREFIX24 # 或使用 NETMASK255.255.255.0 GATEWAY192.168.100.1 # 你的网关地址 DNS18.8.8.8 # 你的DNS服务器 DNS2192.168.100.1注意BOOTPROTOnone或static是配置静态 IP 的关键。如果原来是dhcp一定要改过来。配置主机名# 临时设置立即生效 hostnamectl set-hostname controller # 同时编辑 /etc/hosts 文件确保能解析自身和所有其他节点 vi /etc/hosts在/etc/hosts文件中添加一行将主机名与管理网络 IP绑定192.168.100.10 controller controller.example.com # 如果是多节点还需添加其他节点 # 192.168.100.11 compute1 compute1.example.com重启网络服务并验证# CentOS 7 systemctl restart network # Rocky Linux 8 / RHEL 8 nmcli connection reload nmcli connection up ens192 # 验证 ip addr show ens192 ping -c 4 192.168.100.1 # 测试网关 ping -c 4 controller # 测试主机名解析2.2 配置 SELinux 与防火墙学习环境在生产环境中需要精细配置 SELinux 策略和防火墙规则。但对于初次搭建的学习环境为了简化问题通常选择临时关闭或设置为宽松模式。SELinux# 查看当前状态 getenforce # 临时设置为 Permissive重启后失效 setenforce 0 # 永久修改需重启 sed -i s/^SELINUX.*/SELINUXpermissive/ /etc/selinux/config重要说明生产环境不建议直接禁用 SELinux而应安装openstack-selinux策略包并配置正确的布尔值。防火墙OpenStack 需要开放大量端口。学习环境中可以暂时停止并禁用防火墙服务但务必理解其安全风险。# CentOS 7 / RHEL 7 systemctl stop firewalld systemctl disable firewalld # Rocky Linux 8 / RHEL 8 systemctl stop firewalld systemctl disable firewalld # 或者安装iptables-services并使用iptables2.3 配置 NTP 时间同步OpenStack 集群对时间一致性要求极高证书验证、消息队列、数据库复制等都依赖精确的时间。必须配置所有节点与同一时间源同步。安装并配置 Chrony推荐yum install -y chrony编辑配置文件/etc/chrony.confvi /etc/chrony.conf注释掉默认的pool服务器添加可靠的 NTP 服务器。在中国大陆可以使用阿里云或腾讯云的 NTP 服务。# pool 2.centos.pool.ntp.org iburst server ntp.aliyun.com iburst server ntp1.tencent.com iburst如果部署多节点可以将控制节点作为其他节点的 NTP 服务器。在控制节点的chrony.conf中添加allow 192.168.100.0/24 # 允许管理网段同步在其他节点上则配置服务器指向控制节点server 192.168.100.10 iburst启动并设置开机自启验证同步状态systemctl enable --now chronyd chronyc sources -v查看输出确保^*标记出现在一个时间源前表示已成功同步。3. 配置 OpenStack 软件源与基础依赖OpenStack 发行版众多如 Victoria, Wallaby, Yoga等必须配置与之匹配的、稳定的软件源。3.1 配置 OpenStack 与 EPEL 源以 Rocky Linux 8 和 OpenStack Yoga 版本为例。启用 EPEL 和 PowerTools/CRB 仓库dnf install -y epel-release dnf config-manager --set-enabled powertools # Rocky Linux 8 # 或对于 CentOS 8 Stream: dnf config-manager --set-enabled powertools添加 OpenStack Yoga 仓库dnf install -y centos-release-openstack-yoga # 适用于CentOS/Rocky # 对于 RHEL需要订阅特定频道并启用相关仓库更新系统并安装基础工具dnf update -y dnf install -y vim wget net-tools python3-openstackclientpython3-openstackclient是统一的 OpenStack 命令行客户端后续管理会频繁用到。3.2 配置数据库MariaDBOpenStack 大多数组件使用 MariaDBMySQL 分支作为元数据存储。安装 MariaDB 服务器dnf install -y mariadb-server mariadb编辑配置文件/etc/my.cnf.d/openstack.cnfvi /etc/my.cnf.d/openstack.cnf添加以下内容。关键点在于设置bind-address为管理网络 IP或0.0.0.0仅用于学习以及调整一些适用于 OpenStack 的默认参数。[mysqld] bind-address 192.168.100.10 # 或 0.0.0.0 default-storage-engine innodb innodb_file_per_table on max_connections 4096 collation-server utf8_general_ci character-set-server utf8生产环境注意bind-address0.0.0.0会监听所有接口存在安全风险。生产环境应设置为控制节点的管理 IP并配置防火墙规则。启动服务并运行安全初始化systemctl enable --now mariadb mysql_secure_installation执行初始化脚本时建议设置 root 密码并移除匿名用户、禁止远程 root 登录等。3.3 配置消息队列RabbitMQOpenStack 服务之间通过 AMQP 消息队列进行异步通信RabbitMQ 是常用选择。安装 RabbitMQ 服务器dnf install -y rabbitmq-server启动服务并设置开机自启systemctl enable --now rabbitmq-server添加 OpenStack 用户并设置权限# 添加一个名为 openstack 的用户密码设为 OPENSTACK_PASS请替换为强密码 rabbitmqctl add_user openstack OPENSTACK_PASS # 设置 openstack 用户对所有虚拟主机的配置、读、写权限 rabbitmqctl set_permissions openstack .* .* .* # 可选查看用户列表 rabbitmqctl list_users这里创建的openstack用户和密码需要在后续各个组件的配置文件中如 Nova, Neutron, Cinder重复使用以实现身份验证。4. 配置 Memcached 与 Etcd可选但推荐一些 OpenStack 服务会用到这些组件来提升性能或实现分布式协调。4.1 配置 MemcachedMemcached 用于缓存令牌Token等数据提升身份认证Keystone性能。安装并启动dnf install -y memcached systemctl enable --now memcached配置监听地址默认只监听 127.0.0.1如需跨节点访问则需修改vi /etc/sysconfig/memcached将OPTIONS行修改为监听管理网络 IP 或所有接口学习环境OPTIONS-l 192.168.100.10,::1 # 或 OPTIONS-l 0.0.0.0,::1重启服务systemctl restart memcached4.2 配置 EtcdEtcd 是一个分布式键值存储Neutron 等组件可能用它来存储分布式锁或配置信息。对于 All-in-One 部署安装单节点即可。安装 Etcddnf install -y etcd编辑配置文件/etc/etcd/etcd.confvi /etc/etcd/etcd.conf需要配置以下几个关键参数根据你的环境替换YOUR_IPETCD_DATA_DIR/var/lib/etcd/default.etcd ETCD_LISTEN_PEER_URLShttp://192.168.100.10:2380 ETCD_LISTEN_CLIENT_URLShttp://192.168.100.10:2379,http://localhost:2379 ETCD_NAMEcontroller ETCD_INITIAL_ADVERTISE_PEER_URLShttp://192.168.100.10:2380 ETCD_ADVERTISE_CLIENT_URLShttp://192.168.100.10:2379 ETCD_INITIAL_CLUSTERcontrollerhttp://192.168.100.10:2380 ETCD_INITIAL_CLUSTER_TOKENetcd-cluster-01 ETCD_INITIAL_CLUSTER_STATEnew启动并启用服务systemctl enable --now etcd5. 验证基础服务与常见问题排查在进入具体的 OpenStack 组件如 Keystone, Glance, Nova安装之前必须确保上述所有基础服务运行正常且配置正确。5.1 基础服务状态检查清单执行以下命令逐一验证服务状态服务检查命令预期输出/状态网络与主机名ip addr show ens192hostname -fping -c 2 controller显示正确的静态 IP。返回完整主机名。能成功 ping 通。时间同步chronyc trackingchronyc sourcesLeap status : Normal。有^*标记的源。MariaDBsystemctl status mariadbmysql -u root -p -e SHOW DATABASES;active (running)。能列出数据库列表。RabbitMQsystemctl status rabbitmq-serverrabbitmqctl cluster_statusactive (running)。显示单节点运行状态。Memcachedsystemctl status memcachedss -tlnp | grep :11211active (running)。在配置的 IP 上监听 11211 端口。Etcdsystemctl status etcdetcdctl endpoint healthactive (running)。返回is healthy。5.2 常见配置问题与排查路径即使按照步骤操作也可能遇到问题。以下是几个典型问题的排查思路问题1MariaDB 无法远程连接在其他节点上现象在计算节点安装 Nova 时连接控制节点的数据库失败。排查在控制节点检查bind-address是否设置为0.0.0.0或正确的管理 IP。检查防火墙是否阻止了 3306 端口firewall-cmd --list-all。检查 MySQL 用户权限SELECT Host, User FROM mysql.user;确保root或 OpenStack 用户允许从计算节点 IP 连接。在计算节点使用telnet 控制器IP 3306测试端口连通性。问题2RabbitMQ 身份验证失败现象服务启动日志报错ACCESS_REFUSED - Login was refused using authentication mechanism AMQPLAIN。排查确认 RabbitMQ 服务正在运行。确认在配置文件中使用的用户名和密码与通过rabbitmqctl add_user创建的一致。确认用户权限已正确设置rabbitmqctl list_permissions。尝试用rabbitmqctl authenticate_user openstack PASSWORD验证密码。问题3主机名解析失败现象服务日志中频繁出现Unknown host或连接被拒绝的错误但 IP 可以 ping 通。排查检查/etc/hosts文件确保所有节点的主机名都正确映射到其管理网络 IP而不是回环地址127.0.1.1。检查/etc/hostname文件内容是否正确。使用getent hosts controller命令测试解析。问题4时间不同步导致证书错误现象服务间 SSL 通信失败日志提示证书无效或过期。排查在所有节点运行date命令检查时间是否一致差异应在秒级以内。检查 Chrony/NTP 服务状态和同步源。如果节点时间偏差巨大如几分钟以上先使用chronyc makestep强制步进同步再观察。完成以上所有基础文件的配置与验证后你的环境就已经具备了安装 OpenStack 核心服务Keystone, Glance, Nova, Neutron 等的先决条件。此时再运行组件的安装命令成功率会显著提高。记住OpenStack 搭建是一个系统性工程前期基础打得越牢后期排错就越轻松。下一步你就可以开始着手配置第一个核心服务——身份认证服务 Keystone 了。