Agent Token

目的

Agent Token 的概念是为了提供一种机制,用于验证 Bare Metal Service 的运行部署与 ironic-python-agent 实例之间的关系。从某种意义上说,这个 Token 可以被视为会话标识符或身份验证 Token。

警告

此功能并不能消除可能因连接拦截或未对所有通信使用 TLS 而发生的中间人攻击风险。

这在部署“边缘”节点时非常有用,因为中间网络不可信。

工作原理

这些 Token 以两种方式之一提供给正在运行的 Agent。

  1. 预先生成的 Token,嵌入到虚拟媒体 ISO 中。

  2. 在首次“查找”节点时生成的一次性 Token。

在两种情况下,Token 都是使用 Python 的 secrets 库随机生成的。截至 2020 年中,默认长度为 43 个字符。

Token 提供后,无法检索或访问该 Token。它仍然可供 Conductor 使用,并存储在 ironic-python-agent 的内存中。

注意

如果 Token 嵌入在虚拟媒体中,则从镜像中的配置文件中读取它。理想情况下,这应该与 Swift 临时 URL 配对使用。

当 Agent 内存中可用 Token 时,该 Token 会嵌入到发送到 ironic API 端点的 heartbeat 操作中。这使得 API 能够验证 heartbeat 请求,并拒绝来自 ironic-python-agent 的“heartbeat”请求。从 Victoria 版本开始,Agent Token 对所有 Agent 都是必需的,并且之前可用的设置 [DEFAULT]require_agent_token 用于强制执行此功能,已被删除并且不再有效。

警告

如果更新了 Bare Metal Service,并且应更新 ironic-python-agent 的版本以启用此功能。

除了验证 heartbeat 之外,从 ironic-conductor 服务到 ironic-python-agent 的命令也包含 Token,允许 Agent 验证调用者。

使用虚拟媒体

../_images/agent-token-with-virtual-media.svg

使用 PXE/iPXE/等

../_images/agent-token-with-pxe-ipxe.svg

Agent 配置

一个可以与 ironic-python-agent 结合使用的附加设置是 agent_token_required 设置。在正常情况下,可以通过 Bare Metal 服务部署提供的配置断言此设置,也可以通过 ramdisk 中的 Agent 嵌入配置断言此设置。此设置还可通过内核命令行作为 ipa-agent-token-required 提供。