每天晚上我都会运行大型ansible playbook(30-40分钟),其中我使用hashi_vault插件从vault中获取一些变量,有时(并非每天)我会收到错误
Error was a <class 'ansible.errors.AnsibleError'>, original message: An unhandled exception occurred while running the lookup plugin 'hashi_vault'. Error was a <class 'requests.exceptions.ConnectTimeout'>, original message: HTTPSConnectionPool(host='vault.totalbattle.tech', port=443): Max retries exceeded with url: /v1/auth/approle/login (Caused by ConnectTimeoutError(<urllib3.connection.VerifiedHTTPSConnection object at 0x7f0707e26dc0>, 'Connection to xxx timed out. (connect timeout=30)')). HTTPSConnectionPool(host='xxx', port=443): Max retries exceeded with url: /v1/auth/approle/login (Caused by ConnectTimeoutError(<urllib3.connection.VerifiedHTTPSConnection object at 0x7f0707e26dc0>, 'Connection to xxx timed out. (connect timeout=30)'))"}
如果我运行 hashi_vault 插件使用几次的小型剧本 - 一切都很好
我的hashicorp使用外部google LB并部署在后面的5台主机上
我尝试检查谷歌LB日志,但没有找到任何有趣的信息 我不明白到底问题出在哪里,是在 LB 还是在金库
您的一个选择是调整 ansible 任务的超时设置,也许您运行剧本的地方会出现一些网络延迟。 根据官方文档,超时是可定制的。
另一个选项将运行:
curl -I -vvv <your_vault_url>
跟踪http连接行为。无论哪种方式,超时都会发生在您的 ansible 客户端和负载均衡器之间。
这很难调试,在 Stackoverflow 上更难。但您标记了 Google Cloud,所以也许您正在 Kubernetes 中运行实例?
我会查看您的 Vault 节点的
livenessProbe
。也许 Vault 运行得很好,但监控其运行状况的某些东西失败并声明实例已死亡。您可以将此建议转化为用于运行 Vault 的平台上的等效概念。您的负载均衡器可能会执行类似的活跃度测试,但我会从实例级别开始。
发生这种情况时,实例将重新启动,如果在集群陷入选举循环时收到请求(或者每个节点恰好同时关闭),您将遇到超时。