OpenStack Antelope三节点测试环境使用自签名证书创建实例时触发Nova API SSL错误
看起来你遇到的是自签名证书导致Nova内部服务间通信SSL验证失败的问题——虽然你在CLI命令里加了--insecure,也在配置里设了insecure = true,但Nova API在和其他服务(比如Neutron、Keystone、Placement)交互时,可能没正确跳过SSL验证,这才触发了这个500错误。我帮你梳理下排查和解决的步骤:
1. 确保所有Nova相关配置都正确设置了SSL跳过验证
你需要检查控制节点和计算节点的nova.conf,确保所有涉及服务调用的配置段都加上insecure = true:
配置示例片段:
# Keystone认证相关 [keystone_authtoken] auth_url = https://<你的控制器IP>:5000/v3 auth_type = password username = nova password = <你的nova服务密码> user_domain_name = Default project_domain_name = Default project_name = service insecure = true # 关键参数:跳过SSL证书验证 # Neutron服务通信相关 [neutron] url = https://<你的控制器IP>:9696 auth_url = https://<你的控制器IP>:5000/v3 auth_type = password username = neutron password = <你的neutron服务密码> project_name = service project_domain_name = Default user_domain_name = Default insecure = true # 关键参数:跳过SSL证书验证 # Placement服务通信相关 [placement] region_name = RegionOne auth_url = https://<你的控制器IP>:5000/v3 auth_type = password username = placement password = <你的placement服务密码> project_name = service project_domain_name = Default user_domain_name = Default insecure = true # 关键参数:跳过SSL证书验证
修改完成后,重启Nova相关服务:
- 控制节点:
systemctl restart nova-api nova-scheduler nova-conductor - 计算节点:
systemctl restart nova-compute
2. 检查Neutron服务的SSL验证配置
创建实例时Nova会调用Neutron API创建网络端口,所以控制节点的neutron.conf也要确保Keystone认证部分设置了insecure = true:
[keystone_authtoken] auth_url = https://<你的控制器IP>:5000/v3 auth_type = password username = neutron password = <你的neutron服务密码> user_domain_name = Default project_domain_name = Default project_name = service insecure = true
重启Neutron服务:systemctl restart neutron-server
3. 验证服务Endpoint的一致性
用命令检查所有服务的Endpoint是否为HTTPS格式,且和配置文件里的URL一致:
openstack --insecure endpoint list
如果某个服务的Endpoint是HTTP,但你在配置里写了HTTPS,或者反过来,都会导致通信失败,需要确保两者匹配。
4. 可选:让系统信任自签名CA证书(替代跳过验证)
如果你不想用insecure = true(生产环境不建议用),可以把自签名证书的CA根证书复制到所有节点的/usr/local/share/ca-certificates/目录,然后运行:
update-ca-certificates
之后在各个服务的配置文件里,把insecure = true替换为cafile = /path/to/你的CA证书.crt,这样服务之间通信就会信任这个自签名证书了。
5. 查看更详细的日志定位具体问题
如果上面的步骤都没解决,建议查看Nova API的完整日志(不要只看最后100行),找更具体的SSL错误细节:
- 比如可能是主机名不匹配:
SSLError: hostname 'xxx.xxx.xxx.xxx' doesn't match 'cert-hostname',这种情况需要修改证书的CN/SAN字段包含控制器的IP/主机名,或者在配置里额外加verify_hostname = false。 - 或者是证书未被信任,这时候回到步骤4配置CA信任即可。
完成上述操作后,再重新运行你的实例创建命令试试:
netID=$(openstack --insecure network list | grep private | awk '{ print $2 }') openstack --insecure server create --flavor m1.medium --image Ubuntu2204 --security-group secgroup01 --nic net-id=$netID --key-name mykey Ubuntu-2204
备注:内容来源于stack exchange,提问作者aclaverie




