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

k3s 密文加密

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

密文加密工具

版本门控

v1.21.8+k3s1 起可用

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

  • 禁用/启用密文加密

  • 添加新的加密密钥

  • 轮换和删除加密密钥

  • 重新加密密文

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

加密密钥轮换

版本门控

自 2024 年 9 月发布起可用:v1.30.5+k3s1,v1.31.1+k3s1。

  • 单服务器

  • 高可用性

要在单服务器集群上轮换密文加密密钥:

  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. 启动所有三个K3s服务器,使用`--secrets-encryption`标志。为了简洁,服务器将被称为S1、S2、S3。

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

  2. 在S1上轮换密文加密密钥

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

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

    K3s将每秒重新加密约5个密文。具有大量密文的集群可能需要几分钟才能重新加密。您可以在服务器日志中跟踪进度。

  4. 使用相同的参数重新启动S1上的K3s。如果将K3s作为服务运行:

    # If using systemd
    systemctl restart k3s
    # If using openrc
    rc-service k3s restart
  5. 一旦S1启动,重新启动S2和S3上的K3s。

旧版加密密钥轮换

新程序

如果使用K3s版本v1.30+,我们建议使用加密密钥旋转

  • 单服务器

  • 高可用性

要在单服务器集群上轮换密文加密密钥:

  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

嵌入式数据库和外部数据库集群的步骤是相同的。

在HA设置中轮换密文加密密钥:

  1. 启动所有三个K3s服务器,使用`--secrets-encryption`标志。为了简洁,服务器将被称为S1、S2、S3。

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

    • 虽然不是必需的,但建议您选择一个服务器节点来运行`secrets-encrypt`命令。

  2. 在S1上准备

    k3s secrets-encrypt prepare
  3. 使用相同的参数杀死并重启S1。如果将K3s作为服务运行:

    # If using systemd
    systemctl restart k3s
    # If using openrc
    rc-service k3s restart
  4. 一旦S1启动,杀死并重启S2和S3。

  5. 在S1上轮换

    k3s secrets-encrypt rotate
  6. 使用相同的参数杀死并重启S1。

  7. 一旦S1启动,杀死并重启S2和S3。

  8. 在S1上重新加密

    K3s 将每秒重新加密约5个密文。
    具有大量密文的集群可能需要几分钟才能重新加密。

    k3s secrets-encrypt reencrypt
  9. 使用相同的参数杀死并重启S1。

  10. 一旦S1启动,杀死并重启S2和S3。

禁用/重新启用密文加密

  • 单服务器

  • 高可用性

在启动带有`--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-encryption`标志的高可用性集群后,可以禁用密文加密。

虽然不是必需的,但建议您选择一个服务器节点来运行`secrets-encrypt`命令。

为简洁起见,本指南中使用的三台服务器将被称为S1、S2、S3。

要在高可用性集群上禁用密文加密:

  1. 在S1上禁用

    k3s secrets-encrypt disable
  2. 使用相同的参数杀死并重启S1。如果将K3s作为服务运行:

    # If using systemd
    systemctl restart k3s
    # If using openrc
    rc-service k3s restart
  3. 一旦S1启动,杀死并重启S2和S3。

  4. 在S1上使用标志重新加密

    k3s secrets-encrypt reencrypt --force --skip

要在高可用性集群上重新启用密文加密:

  1. 在 S1 上启用

    k3s secrets-encrypt enable
  2. 使用相同的参数杀死并重启S1。

  3. 一旦S1启动,杀死并重启S2和S3。

  4. 在S1上使用标志重新加密

    k3s secrets-encrypt reencrypt --force --skip

密文加密状态

密文加密工具包含一个 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

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

  • 加密状态:显示节点上是否禁用或启用 Secrets 加密

  • 当前旋转阶段:指示节点上的当前旋转阶段。
    阶段为:startpreparerotatereencrypt_requestreencrypt_activereencrypt_finished

  • 服务器加密哈希:对于高可用性集群,这指示所有服务器的本地文件是否处于相同阶段。这可以用来确定在进入下一个阶段之前是否需要重启服务器。在上面的高可用性示例中,节点 1 和节点 2 的哈希不同,表明它们当前没有相同的加密配置。重启服务器将同步它们的配置。

  • 密钥表:总结节点上找到的秘密加密密钥的信息。

    • 活动:"*" 表示当前用于密文加密的密钥(如果有的话)。Kubernetes 使用活动密钥来加密任何新密文。

    • 密钥类型:使用此工具的所有密钥都是 AES-CBC 类型。查看更多信息 这里。

    • 名称:加密密钥的名称。