我正在 3 个 CentOS 8 节点 (1=Control+Compute,2 和 3=Compute) 上使用 kolla-ansible 部署 Openstack(我尝试了 victoria 和 ussuri)。部署工作正常,没有任何问题,但是当我使用 ubuntu 映像 (focal-server-cloudimg-amd64.img) 从这里看起来它没有干净地出现。这导致 cloud-init 脚本无法完成,因此配置的 SSH 密钥未在 VM 内设置,所以我无法登录。
[email protected]: Permission denied (publickey).
但是它的 IP 地址是可 ping 通的,并且所有网络规则(安全组等)都正常。现在奇怪的部分开始了。如果我现在执行硬重启实例,它会干净地启动,并且我能够通过 SSH 登录。以前有人见过这个问题吗,因为我有另一个/较旧的 OpenStack ussuri 实例在运行(大约 15 个月前),并且相同的 ubuntu 映像运行良好(我也验证了这一点)。
第一次运行的日志输出(仅最后一行):
-----END SSH HOST KEY KEYS-----
[ 49.380046] cloud-init[1387]: Cloud-init v. 21.4-0ubuntu1~20.04.1 running 'modules:final' at Wed, 05 Jan 2022 11:17:08 +0000. Up 49.23 seconds.
[ 49.380186] cloud-init[1387]: ci-info: no authorized SSH keys fingerprints found for user ubuntu.
[ 49.380481] cloud-init[1387]: Cloud-init v. 21.4-0ubuntu1~20.04.1 finished at Wed, 05 Jan 2022 11:17:08 +0000. Datasource DataSourceNone. Up 49.37 seconds
[ 49.380779] cloud-init[1387]: 2022-01-05 11:17:08,288 - cc_final_message.py[WARNING]: Used fallback datasource
硬重启实例后的日志输出(仅最后几行):
-----END SSH HOST KEY KEYS-----
[ 15.105333] cloud-init[851]: Cloud-init v. 21.4-0ubuntu1~20.04.1 running 'modules:final' at Wed, 05 Jan 2022 11:46:21 +0000. Up 14.95 seconds.
[ 15.106253] cloud-init[851]: Cloud-init v. 21.4-0ubuntu1~20.04.1 finished at Wed, 05 Jan 2022 11:46:22 +0000. Datasource DataSourceOpenStackLocal [net,ver=2]. Up 15.10 seconds
[[0;32m OK [0m] Finished [0;1;39mExecute cloud user/final scripts[0m.
[[0;32m OK [0m] Reached target [0;1;39mCloud-init target[0m.
Ubuntu 20.04.3 LTS asdfff ttyS0
asdfff login:
因此,我还测试了 debian 映像(debian-10-openstack-amd64.qcow2)这里并且第一次启动时运行良好。
还有人见过这种行为吗?或者看看我能做些什么来解决这个问题。
亲切的问候,
迈克尔
答案1
一些附加信息:
- Openstack Ussuri 和 Victoria 存在问题。
- 在外部 openstack 网络中具有一个接口的 Ubuntu VM 中发现了此问题。
- 在创建虚拟机期间,cloud-init 无法从源“http://169.254.169.254/openstack”请求与虚拟机相关的元数据。这会导致超时并使用默认密钥进行初始化。启动日志显示:“警告,不是元数据源”
一种解决方法是对虚拟机进行“硬启动”。在“硬启动”期间,日志文件“/var/log/cloud-init.log”指示已添加一条似乎可以解决问题的路由。请参阅下面的日志条目 14:27:08,314,该条目位于“硬启动”的开头。10.20.34.100 是外部网络内的 IP,它提供元数据。
ubuntu@external-server:/var/log$ grep "169.254.169.254" cloud-init.log
2022-01-06 14:25:33,037 - util.py[DEBUG]: Resolving URL: http://169.254.169.254 took 0.000 seconds
2022-01-06 14:25:33,037 - url_helper.py[DEBUG]: [0/1] open 'http://169.254.169.254/openstack' with {'url': 'http://169.254.169.254/openstack', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/21.4-0ubuntu1~20.04.1'}} configuration
2022-01-06 14:25:43,050 - url_helper.py[DEBUG]: Calling 'http://169.254.169.254/openstack' failed [10/-1s]: request error [HTTPConnectionPool(host='169.254.169.254', port=80): Max retries exceeded with url: /openstack (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7fa3b80d8a60>, 'Connection to 169.254.169.254 timed out. (connect timeout=10.0)'))]
2022-01-06 14:25:43,050 - DataSourceOpenStack.py[DEBUG]: Giving up on OpenStack md from ['http://169.254.169.254/openstack'] after 10 seconds
2022-01-06 14:25:54,772 - util.py[DEBUG]: Resolving URL: http://169.254.169.254 took 10.014 seconds
2022-01-06 14:25:54,772 - url_helper.py[DEBUG]: [0/1] open 'http://169.254.169.254/openstack' with {'url': 'http://169.254.169.254/openstack', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/21.4-0ubuntu1~20.04.1'}} configuration
2022-01-06 14:26:04,785 - url_helper.py[DEBUG]: Calling 'http://169.254.169.254/openstack' failed [10/-1s]: request error [HTTPConnectionPool(host='169.254.169.254', port=80): Max retries exceeded with url: /openstack (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7fdefd568700>, 'Connection to 169.254.169.254 timed out. (connect timeout=10.0)'))]
2022-01-06 14:26:04,785 - DataSourceOpenStack.py[DEBUG]: Giving up on OpenStack md from ['http://169.254.169.254/openstack'] after 10 seconds
2022-01-06 14:27:08,314 - subp.py[DEBUG]: Running command ['ip', '-4', 'route', 'add', '169.254.169.254/32', 'via', '10.20.34.100', 'dev', 'ens3'] with allowed return codes [0] (shell=False, capture=True)
2022-01-06 14:27:08,317 - util.py[DEBUG]: Resolving URL: http://169.254.169.254 took 0.000 seconds
2022-01-06 14:27:08,318 - url_helper.py[DEBUG]: [0/1] open 'http://169.254.169.254/openstack' with {'url': 'http://169.254.169.254/openstack', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/21.4-0ubuntu1~20.04.1'}} configuration
2022-01-06 14:27:08,930 - url_helper.py[DEBUG]: Read from http://169.254.169.254/openstack (200, 105b) after 1 attempts
2022-01-06 14:27:08,930 - DataSourceOpenStack.py[DEBUG]: Using metadata source: 'http://169.254.169.254'
2022-01-06 14:27:08,930 - url_helper.py[DEBUG]: [0/6] open 'http://169.254.169.254/openstack' with {'url': 'http://169.254.169.254/openstack', 'allow_redirects': True, 'method': 'GET', 'timeout': 10.0, 'headers': {'User-Agent': 'Cloud-Init/21.4-0ubuntu1~20.04.1'}} configuration
2
重启后,就可以使用配置的凭据进行 SSH 访问。
问题可能是 cloud-init 脚本,该脚本在 VM 的第一个 cloud_init 期间没有将路由添加到元数据服务器。
答案2
我在 Microstack 上的 Ussuri 上遇到了这个问题。我尝试了建议的“硬启动”方法,但得到了同样的错误。我在 Fedora 36 映像上也遇到了同样的错误。
我解决了错误,但禁用了 Microstack 然后重新启用。
sudo snap disable microstack
sudo snap disable microstack