令牌管理
RKE2 使用词元来保护节点加入过程,并加密持久化到数据存储中的机密信息。词元用于验证集群对加入节点的身份,以及加入节点对集群的身份。
词元格式
RKE2 词元可以以安全格式或简短格式指定。安全格式是首选,因为它使客户端能够在发送凭据之前验证其要加入的集群的身份。
安全
安全词元格式(有时称为 "完整" 词元)包含以下部分:
<prefix><cluster CA hash>::<credentials>
-
prefix:一个固定的K10前缀,用于标识词元格式 -
cluster CA hash:集群服务器 CA 证书的哈希值,用于验证服务器与加入节点之间的身份。-
对于自签名 CA 证书,这是存储在磁盘上的 PEM 格式证书的 SHA256 摘要。
-
对于自定义 CA 证书,这是根证书的 DER 编码的 SHA256 摘要;通常称为证书指纹。
-
-
credentials:用于验证加入节点与集群之间身份的用户名和密码或词元。
短
短词元格式仅包括用于验证加入节点与集群之间身份的密码或词元。
如果使用短词元,加入节点会隐式信任服务器提供的 CA 包;TLS 启动过程中的步骤 2-4 被跳过。初始连接可能会受到 中间人 攻击的威胁。
令牌类型
RKE2 支持三种类型的词元。默认情况下,仅提供服务器词元;其他词元类型必须由管理员配置或创建。
| 类型 | CLI 选项 | 环境变量 |
|---|---|---|
服务器 |
|
|
代理 |
|
|
引导 |
|
|
服务器
如果在集群中启动第一个服务器时未提供词元,则会创建一个随机密码的词元。服务器词元始终以安全格式写入 /var/lib/rancher/rke2/server/token。
服务器词元可用于将服务器和代理节点加入集群。任何拥有服务器词元的人基本上都拥有对集群的完全管理员访问权限。此词元应谨慎保管。
服务器词元还用作 PBKDF2 密码短语,以加密持久化到称为启动数据的数据存储中的机密信息。启动数据对于设置新的服务器节点或从快照恢复至关重要。因此,词元必须与集群数据存储本身一起备份。
|
除非使用自定义 CA 证书,否则在启动集群中的第一个服务器时只能使用短(仅密码)词元格式。这是因为在服务器生成自签名集群 CA 证书之前,无法知道集群 CA 哈希。 |
有关使用自定义 CA 证书的更多信息,请参见 rke2 certificate 文档。
代理
默认情况下,代理词元与服务器词元相同。可以在集群启动之前或之后,通过更改集群中所有服务器上的 CLI 选项或环境变量来设置代理词元。代理词元与服务器词元类似,都是静态配置的,并且不会过期。
代理词元以安全格式写入 /var/lib/rancher/rke2/server/agent-token。如果未指定代理词元,则此文件是服务器词元的链接。
引导
RKE2 支持动态生成、自动过期的代理 启动词元。
RKE2 词元 CLI
RKE2 词元 CLI 工具处理:
-
启动词元的生命周期,使用与 kubeadm 启动词元相同的生成和验证代码。请注意,这两个 CLI 是相似的。
-
服务器词元的轮换
NAME: rke2 token - Manage tokens USAGE: rke2 token command [command options] [arguments...] COMMANDS: create Create bootstrap tokens on the server delete Delete bootstrap tokens on the server generate Generate and print a bootstrap token, but do not create it on the server list List bootstrap tokens on the server rotate Rotate original server token with a new server token OPTIONS: --help, -h show help
rke2 token create [token]
创建一个新的启动词元。[token] 是实际要写入的词元,由 rke2 token generate 生成。如果未提供词元,将生成一个随机词元。
以安全格式写入的词元,包括集群CA哈希,将输出到标准输出。此命令的输出应保存,因为词元的秘密部分无法再次显示。
| 标志 | 说明 |
|---|---|
`--data-dir`值 |
用于保存状态的文件夹(默认:"/var/lib/rancher/rke2") |
`--kubeconfig`值 |
要连接的服务器[$KUBECONFIG] |
`--description`值 |
对该词元使用方式的友好描述 |
`--groups`值 |
当用于身份验证时,此词元将被认证为附加组。 |
`--ttl`值 |
词元自动删除之前的持续时间(例如:1s, 2m, 3h)。如果设置为 '0',则词元将永远不会过期(默认:24h0m0s) |
`--usages`值 |
描述此词元可以使用的方式。(默认:"签名,认证") |
rke2 token delete
删除一个或多个启动词元。可以提供完整的词元,或仅提供词元 ID。
| 标志 | 说明 |
|---|---|
`--data-dir`值 |
用于保存状态的文件夹(默认:/var/lib/rancher/rke2) |
`--kubeconfig`值 |
要连接的服务器[$KUBECONFIG] |
服务器词元轮换
rke2 token rotate 命令允许您轮换并替换用于服务器启动的原始词元。在单个服务器上运行命令后,所有使用原始词元的服务器和代理应使用新词元重新启动。原始词元将被作废,无法用于将任何新服务器或代理加入集群。
| 标志 | 说明 | 默认值 |
|---|---|---|
`--data-dir`值 |
用于保存状态的文件夹 |
/var/lib/rancher/rke2 |
`--kubeconfig`值 |
用于对服务器进行身份验证的 Kubeconfig |
/etc/rancher/rke2/rke2.yaml |
`--server`值 |
要连接的服务器 |
"https://127.0.0.1:9345" |
`--token`值 |
用于将服务器或代理加入集群的现有词元 |
不适用 |
`--new-token`值 |
用于替换原始词元的新词元 |
如果未指定,将生成一个随机的 16 个字符的词元 |