Jon*_*Jon 7 linux ssh ansible docker ansible-awx
我们的 Ansible AWX 实例在 v5.0.0 上运行了一年多,突然所有作业都停止工作——没有输出输出。它们将开始“运行”,但无限期地挂起,而不打印任何日志记录。
AWX 实例在 docker compose 容器设置中运行,如下定义: https: //github.com/ansible/awx/blob/5.0.0/INSTALL.md#docker-compose
标准故障排除(例如重新启动容器、主机操作系统等)并没有帮助。任一环境中都没有配置更改。
在调试实际的 playbook 命令时,我们观察到从 UI 运行 playbook 的命令如下所示:
ssh-agent sh -c ssh-add /tmp/awx_11021_0fmwm5uz/artifacts/11021/ssh_key_data && rm -f /tmp/awx_11021_0fmwm5uz/artifacts/11021/ssh_key_data && ansible-playbook -vvvvv -u ubuntu --become --ask-vault-pass -i /tmp/awx_11021_0fmwm5uz/tmppo7rcdqn -e @/tmp/awx_11021_0fmwm5uz/env/extravars playbook.yml
这按顺序分为三个命令:
ssh-agent sh -c ssh-add /tmp/awx_11021_0fmwm5uz/artifacts/11021/ssh_key_datarm -f /tmp/awx_11021_0fmwm5uz/artifacts/11021/ssh_key_dataansible-playbook -vvvvv -u ubuntu --become --ask-vault-pass -i /tmp/awx_11021_0fmwm5uz/tmppo7rcdqn -e @/tmp/awx_11021_0fmwm5uz/env/extravars playbook.yml您可以在第 3 部分中看到,这-vvvvv是调试参数——但是,挂起发生在命令 #1 上。这与 ansible 或 AWX 具体无关,但它不会为我们提供太多调试信息。
我尝试做一个strace来看看发生了什么,但由于下面给出的原因,很难跟踪它实际的情况。如果有帮助的话我可以提供这个输出。
因此,关于命令 #1 的一个自然问题是:“ssh_key_data”是什么?
这就是我们在 AWX 中设置的机器凭证(SSH 密钥)——它已经有一段时间没有改变了,并且在直接 SSH 命令中使用时工作得很好。它显然也被 AWX 设置为文件管道:
prw------- 1 root root 0 Dec 10 08:29 ssh_key_data
这开始解释为什么它可能会挂起(如果没有从管道的另一侧读入任何内容)。
从命令行运行普通的 ansible-playbook (并以更正常的方式提供 SSH 密钥)工作得很好,所以我们仍然可以部署,但现在只能通过 CLI —— 只是 AWX 被破坏了。
那么问题就变成了“为什么是现在”?以及“如何调试”?我已检查 awx_postgres 的运行状况,并验证机器凭证确实以预期格式存在(在表中main_credential)。我还验证了可以在 awx_task 容器上使用 ssh-agent,而无需使用该管道密钥文件。因此,问题似乎确实出在这个管道文件上——但我无法从任何日志中收集到管道另一端(发送者)应该存在的位置,或者他们不发送数据的原因。
小智 3
从本周五开始,在与您相同的时间范围内遇到了同样的问题。事实证明,Crowdstrike(猎鹰传感器)特工才是罪魁祸首。我猜他们推送的定义更新会破坏或阻塞 fifo 管道。当我们停止 CS 代理后,AWX 再次开始正常工作,没有出现任何问题。查看您是否正在运行类似的安全产品。
| 归档时间: |
|
| 查看次数: |
4447 次 |
| 最近记录: |