OpenStack Dashboard登录故障排查:从“无法连接Keystone”到服务恢复
1. 遇到无法连接Keystone时的第一反应那天早上刚到办公室就接到同事的紧急电话OpenStack控制台登不进去了作为运维老手我立刻意识到问题的严重性。打开浏览器尝试登录Horizon Dashboard果然看到了那个熟悉的错误提示Unable to establish connection to keystone endpoint。这个错误意味着前端界面无法与后端的身份认证服务建立连接就像你拿着门禁卡却找不到刷卡机一样尴尬。首先需要明确的是Keystone是OpenStack的身份认证核心组件负责管理用户、角色和服务目录。当Dashboard报这个错误时通常意味着以下几种可能Keystone服务本身宕机HTTP服务通常是Apache或Nginx无法转发请求到Keystone网络连接问题导致前端无法访问Keystone端点环境变量配置异常导致认证信息传递失败我建议先做个简单的服务状态检查这个命令能快速确认Keystone基础服务是否存活systemctl status openstack-keystone如果服务显示为active (running)至少说明Keystone进程还在。但别高兴太早我遇到过很多次服务进程活着但实际无法响应请求的情况。2. 从用户端开始的排查流程2.1 检查账号和环境变量首先确认是不是自己的账号出了问题。在任意控制节点执行openstack user list这个命令会列出所有有效用户。如果看不到你的账号那问题就明确了——有人误删了账号。这时需要用管理员权限重建账号openstack user create --domain default --password-prompt your_username但更多时候账号是存在的问题出在环境变量上。记得有次我调试到半夜最后发现居然是环境变量文件被误修改了。检查你的admin-openrc或类似的环境变量文件cat ~/admin-openrc关键要确认这几个变量是否正确export OS_AUTH_URLhttp://controller:5000/v3 export OS_IDENTITY_API_VERSION3 export OS_USERNAMEadmin export OS_PASSWORDyour_password特别是OS_AUTH_URL我见过有人把controller写成localhost导致的问题。加载环境变量source ~/admin-openrc2.2 验证端点可达性即使环境变量正确端点也可能不可达。试试直接用curl测试curl -v http://controller:5000/v3如果连接被拒绝或超时说明网络层就有问题。这时需要检查防火墙规则特别是5000和35357端口网络连通性ping controller是否通DNS解析是否正确nslookup controller3. 服务端深度排查3.1 检查HTTP服务状态Keystone通常通过HTTP服务暴露API。先看Apache/Nginx状态systemctl status httpd netstat -tulnp | grep :5000\|:35357有一次我们的问题就出在Apache的worker进程全部卡死了虽然服务显示运行中但实际上已经无法处理新请求。查看错误日志很重要tail -f /var/log/httpd/error_log典型的错误可能包括无法连接到memcached数据库连接失败证书验证失败3.2 Keystone服务诊断如果HTTP服务正常接下来深入检查Keystoneopenstack catalog list这个命令列出所有服务的端点。如果返回错误或空白说明Keystone的服务目录出了问题。检查Keystone日志tail -f /var/log/keystone/keystone.log我曾在日志中发现过数据库连接失败的记录原因是MySQL连接数被耗尽。3.3 依赖服务检查Keystone依赖几个关键服务Memcached用于token缓存RabbitMQ用于服务间通信数据库存储认证数据检查Memcachedsystemctl status memcached echo stats | nc localhost 11211如果Memcached挂了会导致token验证失败。检查RabbitMQrabbitmqctl status数据库连接检查mysql -u keystone -p -h db_host -e SHOW DATABASES;4. 常见修复方案根据多年经验90%的无法连接Keystone问题可以通过以下步骤解决重载环境变量source ~/admin-openrc重启HTTP服务systemctl restart httpd重启Keystonesystemctl restart openstack-keystone检查依赖服务systemctl restart memcached rabbitmq-server对于更复杂的情况可能需要修复数据库连接调整max_connections等参数重建服务端点openstack endpoint create检查SSL证书有效期调整防火墙规则5. 预防措施为了避免半夜被叫起来处理认证问题我建立了这些预防机制监控关键指标Keystone API响应时间HTTP服务worker进程数Memcached命中率数据库连接数定期检查openstack token issue这个命令可以验证整个认证流程是否正常。配置备份 定期备份/etc/keystone//etc/httpd/conf.d/环境变量文件文档记录 维护一个故障排查手册记录每次问题的现象和解决方法。这个习惯帮我节省了无数个小时的重复排查时间。遇到OpenStack登录问题时最重要的是保持冷静按照从外到内、从简单到复杂的顺序逐步排查。大多数情况下问题都比想象的要简单。