OpenStack Yoga(Ubuntu22.04)HA+SSL配置中Nova令牌验证失败求助
问题背景
Ubuntu 22.04环境下搭建启用SSL的OpenStack Yoga高可用集群,除Neutron、Cinder和Dashboard外其他服务已通过HTTPS正常运行,但Nova API日志/var/log/nova/nova-api.log出现以下错误:
CRITICAL keystonemiddleware.auth_token [-] Unable to validate token: Failed to fetch token data from identity server: keystonemiddleware.auth_token._exceptions.ServiceError: Failed to fetch token data from identity server
手动执行以下命令可成功为nova用户获取令牌:
openstack --os-auth-url https://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name service --os-username nova --os-password <nova-passwd> token issue
controller为3台控制节点的虚拟主机名,已在所有节点/etc/hosts中配置。
排查步骤
1. 修正auth_url路径配置
nova.conf中auth_url缺少v3后缀,与手动命令使用的端点不一致,Keystone v3身份验证需要完整的v3路径:
编辑/etc/nova/nova.conf的[keystone_authtoken]段:
auth_url = https://controller:5000/v3
重启nova-api服务:
systemctl restart nova-api
2. 统一域名大小写配置
手动命令中使用Default(首字母大写),而nova.conf中为default(小写),虽然Keystone默认不区分大小写,但部分场景下可能导致匹配异常,统一配置为一致值:
修改nova.conf的[keystone_authtoken]段:
project_domain_name = Default user_domain_name = Default
或保持全小写,确保与Keystone中配置的域名完全一致,修改后重启nova-api服务。
3. 解决SSL证书信任问题
手动执行命令时依赖当前用户的证书信任链,但Nova服务运行时使用nova用户,可能未信任Keystone的SSL CA证书:
- 方案1:将Keystone的CA证书添加到系统信任列表
cp /path/to/keystone-ca.crt /usr/local/share/ca-certificates/ update-ca-certificates - 方案2:在nova.conf中直接指定CA证书路径
编辑[keystone_authtoken]段添加:cafile = /path/to/keystone-ca.crt
完成后重启nova-api服务。
4. 检查Memcached集群连通性
配置了Memcached集群用于令牌缓存,需确保Nova节点能正常连接所有Memcached实例:
逐个测试连通性:
telnet 192.168.120.11 11211 telnet 192.168.120.12 11211 telnet 192.168.120.13 11211
若无法连接,检查Memcached服务状态:
systemctl status memcached
确保所有节点的Memcached服务正常运行,且防火墙未拦截11211端口。
5. 验证配置文件权限
确保nova.conf的权限正确,Nova服务能读取配置:
chown nova:nova /etc/nova/nova.conf chmod 600 /etc/nova/nova.conf
重启nova-api服务。
6. 检查负载均衡器转发状态
controller虚拟主机对应负载均衡器,需确认负载均衡器正确转发HTTPS请求到Keystone的5000端口,健康检查正常,无转发失败或节点下线情况。
内容的提问来源于stack exchange,提问作者gbayi_omo

