本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

k3s 词元

K3s 使用词元来保护节点加入过程,并加密持久化到数据存储中的机密信息。词元用于验证集群对加入节点的身份,以及加入节点对集群的身份。

词元格式

K3s 词元可以以安全格式或简短格式指定。安全格式是首选,因为它使客户端能够在发送凭据之前验证其要加入的集群的身份。

安全

安全词元格式(有时称为 "完整" 词元)包含以下部分:

<prefix><cluster CA hash>::<credentials>

  • prefix:一个固定的 K10 前缀,用于标识词元格式

  • cluster CA hash:集群服务器 CA 证书的哈希值,用于验证服务器与加入节点之间的身份。

    • 对于自签名 CA 证书,这是存储在磁盘上的 PEM 格式证书的 SHA256 摘要。

    • 对于自定义 CA 证书,这是根证书的 DER 编码的 SHA256 摘要;通常称为证书指纹。

  • credentials:用于验证加入节点与集群之间身份的用户名和密码或词元。

TLS 启动

当指定安全词元时,加入节点执行以下步骤以验证其连接的服务器的身份,然后再传输凭据:

  1. 在禁用 TLS 验证的情况下,从其要加入的服务器上的 /cacerts 下载 CA 包。

  2. 计算 CA 证书的 SHA256 哈希值,如上所述。

  3. 将计算出的 SHA256 哈希与词元中的哈希进行比较。

  4. 如果哈希匹配,验证服务器提供的证书是否可以通过服务器的 CA 包进行验证。

  5. 如果服务器证书有效,则根据词元类型,使用基本或词元身份验证提供凭据以加入集群。

短词元格式仅包括用于验证加入节点与集群之间身份的密码或词元。

如果使用短词元,加入节点会隐式信任服务器提供的 CA 包;TLS 启动过程中的步骤 2-4 被跳过。初始连接可能会受到 中间人 攻击的威胁。

令牌类型

K3s 支持三种类型的词元。默认情况下,仅提供服务器词元;其他词元类型必须由管理员配置或创建。

类型 CLI 选项 环境变量

服务器

--token

K3S_TOKEN

代理

--agent-token

K3S_AGENT_TOKEN

引导

n/a

n/a

服务器

如果在集群中启动第一个服务器时未提供词元,则会创建一个随机密码的词元。服务器词元始终以安全格式写入 /var/lib/rancher/k3s/server/token

服务器词元可用于将服务器和代理节点加入集群。任何拥有服务器词元的人基本上都拥有对集群的完全管理员访问权限。此词元应谨慎保管。

服务器词元还用作 PBKDF2 密码短语,以加密持久化到称为启动数据的数据存储中的机密信息。启动数据对于设置新的服务器节点或从快照恢复至关重要。因此,词元必须与集群数据存储本身一起备份。

除非使用自定义 CA 证书,否则在启动集群中的第一个服务器时只能使用短(仅密码)词元格式。这是因为在服务器生成自签名集群 CA 证书之前,无法知道集群 CA 哈希。

有关使用自定义 CA 证书的更多信息,请参见 k3s certificate 文档
有关备份集群的更多信息,请参见 备份和恢复 文档。

代理

默认情况下,代理词元与服务器词元相同。可以在集群启动之前或之后,通过更改集群中所有服务器上的 CLI 选项或环境变量来设置代理词元。代理词元与服务器词元类似,都是静态配置的,并且不会过期。

代理词元以安全格式写入 /var/lib/rancher/k3s/server/agent-token.如果未指定代理词元,则此文件是服务器词元的链接。

引导

版本门控

从2023-02版本(v1.26.2+k3s1,v1.25.7+k3s1,v1.24.11+k3s1,v1.23.17+k3s1)开始,支持`k3s token`命令以及使用启动词元连接节点的能力。

K3s支持动态生成、自动过期的代理https://kubernetes.io/docs/reference/access-authn-authz/bootstrap-tokens/[启动词元]。

k3s 词元

k3s词元CLI工具处理:

  • 启动词元的生命周期,使用与`kubeadm token`启动词元相同的生成和验证代码。请注意,这两个 CLI 是相似的。

  • 服务器词元的轮换

NAME:
   k3s token - Manage tokens

USAGE:
   k3s 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 token

OPTIONS:
   --help, -h  show help

k3s token create [token]

创建一个新词元。`[token]`是实际要写入的词元,由`k3s token generate`生成。如果未提供词元,将生成一个随机词元。

以安全格式写入的词元,包括集群CA哈希,将输出到标准输出。此命令的输出应保存,因为词元的秘密部分无法再次显示。

标志 说明

`--data-dir`值

用于保存状态的文件夹(默认:/var/lib/rancher/k3s或${HOME}/.rancher/k3s,如果不是root)

`--kubeconfig`值

要连接的服务器[$KUBECONFIG]

`--description`值

对该词元使用方式的友好描述

`--groups`值

当用于身份验证时,此词元将作为额外组进行身份验证。(默认:默认: "system:bootstrappers:k3s:default-node-token")

`--ttl`值

词元自动删除之前的持续时间(例如:1s, 2m, 3h)。如果设置为 '0',则词元将永远不会过期(默认:24h0m0s)

`--usages`值

描述此词元可以使用的方式。(默认:"签名,认证")

k3s token delete

删除一个或多个词元。可以提供完整的词元,或仅提供词元 ID。

标志 说明

`--data-dir`值

用于保存状态的文件夹(默认:/var/lib/rancher/k3s或${HOME}/.rancher/k3s,如果不是root)

`--kubeconfig`值

要连接的服务器[$KUBECONFIG]

k3s token generate

生成一个随机生成的启动词元。

您不必使用此命令来生成词元。只要格式为 [a-z0-9]{6}.[a-z0-9]{16},您可以自己完成,其中第一部分是词元 ID,第二部分是密钥。

标志 说明

`--data-dir`值

用于保存状态的文件夹(默认:/var/lib/rancher/k3s或${HOME}/.rancher/k3s,如果不是root)

`--kubeconfig`值

要连接的服务器[$KUBECONFIG]

k3s token list

列出启动词元,显示其 ID、描述和剩余生存时间。

标志 说明

`--data-dir`值

用于保存状态的文件夹(默认:/var/lib/rancher/k3s或${HOME}/.rancher/k3s,如果不是root)

`--kubeconfig`值

要连接的服务器[$KUBECONFIG]

`--output`值

输出格式。有效选项:文本,json(默认:"文本")

k3s token rotate

版本门控

自2023年10月发布以来可用(v1.28.2+k3s1,v1.27.7+k3s1,v1.26.10+k3s1,v1.25.15+k3s1)。

用新服务器词元旋转原始服务器词元。运行此命令后,所有服务器和任何最初使用旧词元加入的代理必须使用新词元重新启动。

如果您未指定新词元,将为您生成一个。

标志 说明

`--data-dir`值

用于保存状态的文件夹(默认:/var/lib/rancher/k3s或${HOME}/.rancher/k3s,如果不是root)

`--kubeconfig`值

要连接的服务器[$KUBECONFIG]

`--server`值

要连接的服务器(默认:"https://127.0.0.1:6443")[$K3S_URL]

`--token`值

用于将服务器或代理加入集群的现有词元 [$K3S_TOKEN]

`--new-token`值

替换现有词元的新词元

在旋转之前拍摄的快照在恢复集群时将需要旧服务器词元。