Microstack添加计算节点失败:hostname 'localhost'与证书中的主机名/IP不匹配
别担心,这个问题其实是典型的SSL证书主机名不匹配导致的,咱们一步步来排查解决:
问题根源分析
你遇到的ssl.SSLCertVerificationError是因为计算节点在连接控制节点时,使用了localhost作为目标地址,但你的控制节点SSL证书的**Subject Alternative Name(SAN)**里只包含了black(主机名)和192.168.1.21(IP),并没有localhost,所以证书验证环节直接失败了。
解决方案步骤
1. 修正计算节点连接控制节点的地址
你在添加计算节点时,应该使用控制节点的实际主机名black或者IP192.168.1.21,而不是localhost。检查你执行的添加节点命令,把其中指向控制节点的地址替换成正确的主机名或IP。
比如,如果之前的命令是类似:
microstack add-compute --control-node localhost
要改成:
microstack add-compute --control-node black # 或者用IP microstack add-compute --control-node 192.168.1.21
2. 确保计算节点能解析控制节点的主机名
如果选择用主机名black连接,需要在计算节点的/etc/hosts文件中添加一行解析规则:
echo "192.168.1.21 black" | sudo tee -a /etc/hosts
这样计算节点就能正确把black映射到控制节点的IP了。
3. 验证控制节点服务的绑定地址
检查控制节点上Microstack服务的监听地址,确保它们没有只绑定到localhost(127.0.0.1)。你可以查看snap相关的配置目录(比如/var/snap/microstack/common/etc/下的服务配置文件),确认服务的监听地址是192.168.1.21或者0.0.0.0(允许所有IP访问)。
4. 备选:更新控制节点证书(非必要,优先前几步)
如果因为某些特殊需求必须用localhost连接,你可以更新控制节点的SSL证书,把localhost和127.0.0.1加入SAN:
sudo microstack config set ssl.cert_subject_alt_names "DNS:black,DNS:localhost,IP:192.168.1.21,IP:127.0.0.1" # 重启Microstack服务生效 sudo snap restart microstack
不过对于多节点部署来说,更推荐使用实际的节点IP或主机名,这样更符合生产环境的配置逻辑。
额外排查建议
- 在计算节点上测试与控制节点的网络连通性:
ping 192.168.1.21 ping black - 用curl测试控制节点的API服务(临时忽略证书验证看是否能连通):
curl -k https://192.168.1.21:5000/v3
备注:内容来源于stack exchange,提问作者Johan

