openstack不能通过yum install openstack或apt install openstack安装,它是一组需按角色手动部署、依赖mariadb/rabbitmq/memcached等底层服务并严格配置主机名与hosts匹配的协同服务集合。

openstack 不是能直接 yum install openstack 或 apt install openstack 装出来的操作系统,它是一组必须按角色手动部署、协同通信的服务集合。控制节点不是“装一个包”,而是要逐个配置 Keystone、Nova、Neutron 等服务,并确保底层支撑服务全部就位且互通。
控制节点必须先跑通 MariaDB + RabbitMQ + Memcached
没这三样,Keystone 启都启不了,后续所有服务注册全卡死在 Connection refused 或 ServiceUnavailable。
-
mariadb-server:所有 OpenStack 服务共用一个数据库实例;建库时统一用openstack用户 + 统一密码,别在 SQL 命令里写错,也别在user_variables.yml里漏配 -
rabbitmq-server:启动后必须立即执行rabbitmqctl add_user openstack RABBIT_PASS和rabbitmqctl set_permissions openstack ".*" ".*" ".*";缺权限会导致nova-conductor持续报AMQP connection failed -
memcached:Keystone 的 token 缓存强依赖它;CentOS 上运行systemctl enable --now memcached,Ubuntu 则检查/etc/memcached.conf中-l 127.0.0.1是否被注释——被注释就等于缓存不可用
主机名和 /etc/hosts 必须严格匹配且不含域名后缀
很多服务(比如 neutron-server)启动时调用 socket.gethostname(),再反查 /etc/hosts 得 IP。不一致就直接连不上自己或对端。
- 用
hostnamectl set-hostname controller设置主机名,不要带.local或.lan这类后缀 -
/etc/hosts中必须有形如10.0.0.11 controller的纯 IP + 短主机名条目;不能只写10.0.0.11 controller.local - 执行
ping -c1 $(hostname)必须成功返回;失败意味着所有服务初始化阶段都会中断
Neutron 外部网络桥接 br-ex 不是配置项自动创建的
neutron_external_network_bridge 在 neutron.conf 里设成 br-ex,不代表系统真有这个网桥。外部流量进不来,虚拟机就拿不到浮动 IP。
- 手动创建网桥:
ip link add br-ex type bridge,再ip link set br-ex up - 把物理网卡(如
ens33)的 IP 剥离:ip addr flush dev ens33 - 将网卡挂到桥上:
ip link set ens33 master br-ex - 确认
br-ex已获取外部网络 IP(如192.168.1.10/24),否则neutron-server会报Failed to bind port
Keystone 初始化失败常因 Fernet 密钥未生成或权限不对
keystone-manage fernet_setup 不只是运行命令,还涉及目录所有权和 SELinux 上下文(CentOS)。
- 运行前确保
/etc/keystone/fernet-keys/目录存在且属主为keystone:keystone - CentOS 上若启用 SELinux,需执行
chcon -t etc_t /etc/keystone/fernet-keys/ -R,否则keystone-server启动时读密钥失败,日志只报Permission denied,不提示 SELinux - 生成后必须执行
keystone-manage credential_setup,漏掉这步会导致openstack project create报HTTP 401 Unauthorized
mysql+pymysql:// 协议拼写错误,或是 RabbitMQ 权限没刷进 Erlang 数据库(rabbitmqctl list_users 查不到 openstack 用户)。这些细节不显眼,但卡住整个流程。











