如何验证在 Kubernetes 中运行的 AWX 中的 ssh 密钥?

如何验证在 Kubernetes 中运行的 AWX 中的 ssh 密钥?

背景

我们使用在 Kubernetes 中运行的 Ansible/AWX(awx-operator)来管理具有动态主机名的工作站。身份验证由 Red Hat IDM(FreeIPA)处理,并使用相同的凭据登录每个工作站。

问题

主机名并不总是立即更新,有时 Ansible 会连接到错误的主机(例如test1.domain.local-> 的DNS 172.1.1.10,它实际上现在属于test2.domain.local)。由于凭据仍可用于登录test2.domain.local,因此 ansible 不知道它连接到了错误的主机,并继续愉快地运行,造成各种破坏。

解决方法/尝试的解决方案

注意:我确实计划解决更改主机名(例如 DHCP 保留或静态 IP)的根本问题,但我还想解决 ansible 顺利连接到错误主机的问题,而且我认为会有一个简单的解决方案。

我实施了一种解决方法,即使用静态known_hosts文件(使用 从 IDM 生成sss_ssh_knownhostsproxy)并使用卷挂载将其传递给 EE。这种方法可行,但效果不佳,因为在 IDM 中添加/删除/重建主机时无法动态更新它。

理想情况下,我只想sss_ssh_knownhostsproxy从 EE 内部使用(ProxyCommand就像ssh_config在主机上一样),但这似乎依赖于主机加入 IDM 本身(我在这里不太确定,但从sss_ssh_knownhostsproxy容器内部运行不起作用)。

我还尝试了 IDM 中的 Kerberos 主体和容器中的 keytab,但这似乎又引发了另一堆麻烦,主机需要的文件以及容器主机名的动态特性。更不用说我不知道​​仅仅拥有有效的 kerberos 令牌是否能解决这个问题,或者是否还有另一个麻烦。

问题

  1. 其他人在使用 ansible 连接时会验证主机密钥吗?似乎没有太多关于启用 StrictHostKeyChecking在 ansible 中 — 我看到的所有内容都建议禁用它,但我认为这是不好的做法。
  2. 其他人如何处理 k8s 中的服务身份验证?我是 Kubernetes 新手,所以任何最佳实践都会有帮助。
  3. 它如何sss_ssh_knownhostsproxy工作?它具体依赖哪些文件/配置?
  4. 您将如何处理我的问题?我是否走在正确的轨道上StrictHostKeyChecking,或者sss_ssh_knownhostsproxy我是否忽略了其他显而易见的东西?

相关内容