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