Secret 加密
#
Secret 加密配置从 v1.17.4+k3s1 开始可用
K3s 支持通过在 server 上传递标志--secrets-encryption
来启用 Secret 加密;该标志将自动完成以下工作:
- 生成 AES-CBC 密钥
- 用生成的密钥生成一个加密配置文件
- 将该配置作为 encryption-provider-config 传递给 KubeAPI
加密配置文件的例子:
#
Secret 加密工具从 v1.21.8+k3s1 起可用
K3s 包含一个实用工具 secrets-encrypt
,它可以自动控制以下内容:
- 禁用/启用 Secret 加密功能
- 添加新的加密密钥
- 轮换和删除加密密钥
- 重新加密 Secret
警告:如果不按照正确的方式轮换加密密钥,可能会使你的集群永久损坏。请慎重行事。
#
单节点 server 加密密钥轮换要在一个单节点集群上轮换 Secret 加密密钥:
--secrets-encryption
启动 K3s server#
使用标志 注意:目前不支持在没有加密的情况下启动 K3s,并且以后再启用加密
准备
杀死并以相同的参数重新启动 K3s server
轮换
杀死并以相同的参数重新启动 K3s server
重新加密
#
高可用加密密钥轮换嵌入式数据库和外部数据库集群的步骤都是一样的。
要在 HA 上轮换 Secret 的加密密钥:
注意:
目前不支持在没有加密的情况下启动 K3s,并且以后再启用加密
虽然不是必须的,但建议你选择一个 server 节点来运行
secrets-encrypt
命令。
--secrets-encryption
标志启动所有三个 K3s server。为简单起见,这些 server 将被称为 S1、S2、S3#
用 在 S1 上做准备
杀死并以相同的参数重新启动 S1
一旦 S1 启动,杀死并重新启动 S2 和 S3
在 S1 上进行轮换
杀死并以相同的参数重新启动 S1
一旦 S1 启动,杀死并重新启动 S2 和 S3
在 S1 上重新加密
杀死并以相同的参数重新启动 S1
一旦 S1 启动,杀死并重新启动 S2 和 S3
#
单节点 Secret 加密的禁用/启用在启动带有 --secrets-encryption
标志的 server 后,可以禁用 secrets 加密。
要在一个单节点集群上禁用 Secret 加密:
禁用
杀死并重新启动 K3s server,参数相同
用标志重新加密
要在一个单节点集群上重新启用 Secret 加密:
启用
杀死并以相同的参数重新启动 K3s server
使用标志重新加密
#
高可用 Secret 加密的禁用/启用在使用 --secrets-encryption
标志启动 HA 集群后,可以禁用 Secret 加密。
注意:虽然不是必须的,但建议你选择一个 server 节点来运行
secrets-encrypt
命令。
为简单起见,本指南中使用的三个 server 将被称为 S1、S2、S3。
要在一个 HA 集群上禁用 Secret 加密:
在 S1 上禁用
杀死并以相同的参数重新启动 S1
一旦 S1 启动,杀死并重新启动 S2 和 S3
用 S1 上的标志重新加密
要在一个 HA 集群上重新启用 Secret 加密:
在 S1 上启用
杀死并以相同的参数重新启动 S1
一旦 S1 启动,杀死并重新启动 S2 和 S3
用 S1 上的标志重新加密
#
Secret 加密状态secrets-encrypt 工具包括一个 status
命令,显示节点上 Secret 加密的当前状态的信息。
单节点 server 上的命令示例:
HA 集群上的另一个示例,在轮换密钥之后,但在重新启动 server 之前:
各部分的详细信息如下:
- Encryption Status:显示节点上的 Secret 加密是否被禁用或启用
- Current Rotation Stage:表示节点当前的轮换阶段。
阶段有:
start
,prepare
,rotate
,reencrypt_request
,reencrypt_active
,reencrypt_finished
。 - Server Encryption Hashes:对 HA 集群很有用,这表明所有 server 的本地文件是否处于同一阶段。这可以用来确定在进行下一阶段之前是否需要重新启动 server。在上面的 HA 例子中,node-1 和 node-2 有不同的哈希值,表明它们目前没有相同的加密配置。重新启动 server 将同步它们的配置。
- Key Table:汇总有关在节点上找到的 Secret 加密密钥的信息。
- Active:如果有的话,"*"表示哪些密钥目前被用于 Secret 加密。Kubernetes 会使用一个激活的密钥来加密任何新的 Secret。
- Key Type:所有使用此工具的密钥都是
AES-CBC
类型。参见更多信息这里。 - Name: 加密密钥的名称。