跳至主要内容

k3s secrets-encrypt

K3s 支持启用静态加密密钥。有关更多信息,请参阅密钥加密

密钥加密工具

版本门槛

v1.21.8+k3s1起可用

K3s 包含一个 CLI 工具 secrets-encrypt,它可以自动控制以下内容:

  • 禁用/启用密钥加密
  • 添加新的加密密钥
  • 轮换和删除加密密钥
  • 重新加密密钥
警告

不按照轮换加密密钥的正确程序操作可能会导致您的集群永久损坏。请谨慎操作。

新的密钥轮换(实验性)

版本门槛

v1.28.1+k3s1起可用。此新版本的工具利用了 K8s 自动配置重新加载,该功能目前处于测试阶段。预计将在 v1.29.0 中正式发布。

对于较旧的版本,请参阅经典密钥轮换

要轮换单服务器集群上的密钥,请执行以下操作:

  1. 使用标志 --secrets-encryption 启动 K3s 服务器。

    注意

    目前不支持在没有加密的情况下启动 K3s,并在稍后启用加密。

  2. 轮换密钥

    k3s secrets-encrypt rotate-keys
  3. 等待重新加密完成。监视服务器日志,或等待

    $ k3s secrets-encrypt status
    Encryption Status: Enabled
    Current Rotation Stage: reencrypt_finished

经典密钥轮换

要轮换单服务器集群上的密钥,请执行以下操作:

  1. 使用标志 --secrets-encryption 启动 K3s 服务器。

    注意

    目前不支持在没有加密的情况下启动 K3s,并在稍后启用加密。

  2. 准备

    k3s secrets-encrypt prepare
  3. 使用相同的参数停止并重新启动 K3s 服务器。如果以服务的形式运行 K3s,则

    # If using systemd
    systemctl restart k3s
    # If using openrc
    rc-service k3s restart
  4. 轮换

    k3s secrets-encrypt rotate
  5. 使用相同的参数停止并重新启动 K3s 服务器。

  6. 重新加密

    信息

    K3s 将以每秒约 5 个密钥的速度重新加密密钥。
    包含大量密钥的集群可能需要几分钟才能重新加密。

    k3s secrets-encrypt reencrypt

禁用/重新启用密钥加密

使用 --secrets-encryption 标志启动服务器后,可以禁用密钥加密。

要在单节点集群上禁用密钥加密,请执行以下操作:

  1. 禁用

    k3s secrets-encrypt disable
  2. 使用相同的参数停止并重新启动 K3s 服务器。如果以服务的形式运行 K3s,则

    # If using systemd
    systemctl restart k3s
    # If using openrc
    rc-service k3s restart
  3. 使用标志重新加密

    k3s secrets-encrypt reencrypt --force --skip

要在单节点集群上重新启用密钥加密,请执行以下操作:

  1. 启用

    k3s secrets-encrypt enable
  2. 使用相同的参数停止并重新启动 K3s 服务器。

  3. 使用标志重新加密

    k3s secrets-encrypt reencrypt --force --skip

密钥加密状态

secrets-encrypt 工具包含一个 status 命令,该命令显示有关节点上密钥加密当前状态的信息。

单服务器节点上的命令示例:

$ k3s secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: start
Server Encryption Hashes: All hashes match

Active Key Type Name
------ -------- ----
* AES-CBC aescbckey

另一个高可用性集群的示例,在轮换密钥后但重新启动服务器之前:

$ k3s secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: rotate
Server Encryption Hashes: hash does not match between node-1 and node-2

Active Key Type Name
------ -------- ----
* AES-CBC aescbckey-2021-12-10T22:54:38Z
AES-CBC aescbckey

每个部分的详细信息如下:

  • 加密状态:显示节点上是否禁用了或启用了密钥加密。
  • 当前轮换阶段:指示节点上的当前轮换阶段。
    阶段包括:startpreparerotatereencrypt_requestreencrypt_activereencrypt_finished
  • 服务器加密哈希值:对于高可用性集群很有用,它指示所有服务器的本地文件是否处于相同的阶段。这可以用来识别在继续执行下一个阶段之前是否需要重新启动服务器。在上面的高可用性示例中,节点 1 和节点 2 的哈希值不同,表示它们当前没有相同的加密配置。重新启动服务器将同步其配置。
  • 密钥表:汇总有关节点上找到的密钥加密密钥的信息。
    • 活动:"*" 表示哪些(如果有)密钥当前用于密钥加密。活动密钥由 Kubernetes 用于加密任何新的密钥。
    • 密钥类型:使用此工具的所有密钥均为 AES-CBC 类型。更多信息请参阅此处
    • 名称:加密密钥的名称。