OpenStack安装报错求助:执行openstack service list返回HTTP 500错误
openstack service list时的HTTP 500错误 嘿,我之前部署OpenStack时也踩过这个一模一样的坑!这个错误核心是Keystone(身份认证服务)在处理请求时内部抛错了,没法正常返回版本信息。咱们一步步来排查解决:
先确认Keystone及依赖服务状态
首先得确保Keystone和它依赖的Apache服务都在正常运行,执行命令:systemctl status openstack-keystone.service httpd.service如果看到服务是
inactive或者failed状态,先启动它们:systemctl start openstack-keystone.service httpd.service systemctl enable openstack-keystone.service httpd.service检查Keystone数据库连接配置
打开Keystone的主配置文件/etc/keystone/keystone.conf,找到[database]段的connection配置项,确认它的格式正确:connection = mysql+pymysql://keystone:你的数据库密码@controller/keystone可以手动测试数据库连接是否正常:
mysql -u keystone -p -h controller输入配置里的密码,如果连不上,要么是密码错误,要么是Keystone用户没有数据库访问权限,或者压根没创建Keystone数据库。
验证Keystone数据库是否完成同步
Keystone初始化必须执行数据库同步,生成必要的表结构。你之前有没有执行过这条命令?su -s /bin/sh -c "keystone-manage db_sync" keystone要是没执行或者执行失败,登录数据库检查Keystone库的表:
mysql -u root -p use keystone; show tables;如果输出是空的,说明数据库没同步,重新执行
keystone-manage db_sync命令,确保没有报错。查看Apache及Keystone日志找细节
HTTP 500错误的具体原因通常藏在日志里,去看Apache的错误日志:tail -f /var/log/httpd/error_log还有Keystone的日志:
tail -f /var/log/keystone/keystone.log日志里会明确告诉你是数据库连接失败、权限不足还是配置错误,比如常见的“Access denied for user 'keystone'@'controller'”就是数据库权限问题。
确认环境变量配置正确
执行openstack命令需要加载admin用户的环境变量,你有没有source过对应的rc文件?比如:source admin-openrc.sh可以用这条命令检查当前环境变量:
env | grep OS_确保
OS_AUTH_URL是http://controller:35357/v3,OS_USERNAME、OS_PASSWORD等参数都和你部署时设置的一致。排查防火墙与SELinux限制
检查防火墙是否开放了Keystone的端口(5000和35357):firewall-cmd --list-all如果没看到
keystone服务,添加并重载防火墙:firewall-cmd --add-service=keystone --permanent firewall-cmd --reloadSELinux如果是强制模式,可能会阻止Apache访问Keystone资源,可以临时设置为宽容模式测试:
setenforce 0如果测试有效,再配置持久化的SELinux规则,比如给Keystone文件设置正确的上下文:
chcon -R system_u:object_r:httpd_sys_content_t:s0 /usr/share/keystone/
一般来说,80%的情况都是数据库连接配置错误或者没同步数据库,先从这两个方向排查最快。
内容的提问来源于stack exchange,提问作者Difettoso

