k3s token
K3s 使用 Token 来保护加入节点的过程 and to encrypt confidential information that is persisted to the datastore。Token 用于验证加入的节点和集群。
Token 格式
K3s Token 可以使用安全(secure)或短(short)格式。安全格式能让客户端在发送凭证之前验证加入的集群的身份,因此首选安全格式。
Secure
安全 Token 格式(有时称为"`完整`" Token 格式)包含以下部分:
<prefix><cluster CA hash>::<credentials>
-
prefix
:固定的K10
前缀,用来标识 token 格式 -
cluster CA hash
:集群的 Server CA 证书的哈希,用于为加入的节点验证 Server。-
对于自签名 CA 证书,这是存储在磁盘上的 PEM 格式证书的 SHA256 总和。
-
对于自定义 CA 证书,这是根证书的 DER 编码的 SHA256 总和,也称为证书指纹。
-
-
credentials
:用户名和密码,或持有者 Token,用于验证加入集群的节点。
Short
短 Token 格式仅包括用于验证加入集群的节点的密码或持有者 Token。
如果使用了短 Token,则加入的节点会隐式信任 Server 提供的 CA 包,以及跳过 TLS 引导过程中的步骤 2-4。初始连接可能容易受到中间人攻击。
Token 类型
K3s 支持三种类型的 Token。默认情况下只有 Server Token 可用,其他类型的 Token 必须由管理员配置或创建。
类型 | CLI 选项 | 环境变量 |
---|---|---|
Server |
|
|
Agent |
|
|
Bootstrap |
|
|
Server
如果在启动集群中的第一个 Server 时未提供 Token,则会使用随机密码创建。Server Token 始终以安全格式写入 /var/lib/rancher/k3s/server/token
。
The server token can be used to join both server and agent nodes to the cluster. Anyone with access to the server token essentially has full administrator access to the cluster. This token should be guarded carefully.
The server token is also used as the PBKDF2 passphrase to encrypt confidential information that is persisted to the datastore known as bootstrap data. Bootstrap data is essential to set up new server nodes or restore from a snapshot. For this reason, the token must be backed up alongside the cluster datastore itself.
除非使用了自定义 CA 证书,否则在启动集群的第一个 Server 时只能使用短 Token 格式(仅密码)。这是因为只有在 Server 生成自签名集群 CA 证书后才能知道集群 CA 哈希值。 |
有关使用自定义 CA 证书的更多信息,请参阅 k3s certificate
文档。
有关备份集群的更多信息,请参阅备份和恢复文档。
Agent
默认情况下,Agent Token 与 Server Token 相同。你可以通过更改集群中所有 Server 上的 CLI 选项或环境变量,在集群启动之前或之后设置 Agent Token。Agent Token 类似于 Server Token,是静态配置的并且不会过期。
Agent Token 以安全格式写入 /var/lib/rancher/k3s/server/agent-token
。如果未指定 Agent Token,则此文件是指向 Server Token 的链接。
Bootstrap
版本
从 2023-02 版本(v1.26.2+k3s1、v1.25.7+k3s1、v1.24.11+k3s1、v1.23.17+k3s1)开始,支持 |
K3s supports dynamically generated, automatically expiring agent bootstrap tokens.
k3s token
K3s Bootstrap Token 使用与 kubeadm token
Bootstrap Token 相同的生成和验证代码,k3s token
CLI 也是类似的。
NAME: k3s token - Manage bootstrap 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 OPTIONS: --help, -h show help
k3s token create [token]
创建一个新 Token。[token]
是要写入的实际 Token,由 k3s token generate
生成。如果没有指定 Token,将生成一个随机 Token。
安全格式的 Token(包括集群 CA 哈希)会写入到 stdout。Token 的 secret 部分只显示一次,因此你需要保存此命令的输出。
标志 | 描述 |
---|---|
|
保存状态的(数据)文件夹,如果不是 root,则默认为 |
|
要连接到 [$KUBECONFIG] 的(集群)Server |
|
有关如何使用此 Token 的描述 |
|
该 Token 用于认证的其他组(默认值:“system:bootstrappers:k3s:default-node-token”) |
|
自动删除 Token 的时间(例如 1s、2m、3h)。如果设置为 |
|
描述可使用此 Token 的方式。(默认值:"signing,authentication") |
k3s token delete
删除一个或多个 Token。你可以提供完整的 Token,也可以仅提供 Token ID。
标志 | 描述 |
---|---|
|
保存状态的(数据)文件夹,如果不是 root,则默认为 |
|
要连接到 [$KUBECONFIG] 的(集群)Server |
k3s token generate
生成一个随机的 Bootstrap Token。
你不需要使用此命令来生成 Token。只要格式为 [a-z0-9]{6}.[a-z0-9]{16}
(其中第一部分是 Token ID,第二部分是 Secret),你就可以自己进行操作。
标志 | 描述 |
---|---|
|
保存状态的(数据)文件夹,如果不是 root,则默认为 |
|
要连接到 [$KUBECONFIG] 的(集群)Server |
k3s token list
列出 Bootstrap Token,这将显示 Token 的 ID、描述和剩余 TTL。
标志 | 描述 |
---|---|
|
保存状态的(数据)文件夹,如果不是 root,则默认为 |
|
要连接到 [$KUBECONFIG] 的(集群)Server |
|
输出格式。可选值:text、json(默认值: |
k3s token rotate
Version Gate
Available as of the October 2023 releases (v1.28.2+k3s1, v1.27.7+k3s1, v1.26.10+k3s1, v1.25.15+k3s1). |
Rotate original server token with a new server token. After running this command, all servers and any agents that originally joined with the old token must be restarted with the new token.
If you do not specify a new token, one will be generated for you.
Flag | Description |
---|---|
|
Folder to hold state (default: /var/lib/rancher/k3s or ${HOME}/.rancher/k3s if not root) |
|
Server to connect to [$KUBECONFIG] |
|
Server to connect to (default: "https://127.0.0.1:6443") [$K3S_URL] |
|
Existing token used to join a server or agent to a cluster [$K3S_TOKEN] |
|
New token that replaces existing token |
Snapshots taken before the rotation will require the old server token when restoring the cluster. |