DR 容灾etcd 加密:确定性密钥派生
etcd 加密:确定性密钥派生
主题入口与阅读顺序
etcd 加密:确定性密钥派生
容灾场景下,etcd 开启 encryption at rest 后,Active 与 Standby 必须使用相同的加密密钥,否则 Standby 拿到 etcd-sync 同步过来的密文会无法解密。本主题说明在 Global 集群上如何用 etcd-encryption-manager 的 deterministic 模式拉齐两边的密钥。
总体架构
要点:
- 密钥本身不过网——只同步 SeedBundle;两侧分别基于"相同 root secret + 相同 SeedBundle"独立派生,输出一致
- Root Secret 不同步——由部署阶段在 Active 和 Standby 各自创建同样内容
- 本地状态不同步——
EtcdKeySeedBundleState、EtcdEncryptionConfig、本地派生出的 key Secret 全部由 etcd-sync 显式忽略
文档地图
| 角色 | 该读哪一篇 |
|---|---|
| 部署 / 运维 Active+Standby Global | installation-handbook.md |
想了解派生算法、CRD、与 etcd-sync 的契约、approvalDelay 时序约束 | key-derivation-spec.md |
一页速查
关键参数
| 参数 | 取值 | 是否必填 | 说明 |
|---|---|---|---|
key_strategy | deterministic | 是 | Global 集群必须设置为此值 |
replication_group_id | 单独规划的不透明标识,推荐 UUID | 是 | 同一对 Active/Standby 必须完全一致 |
root_secret_name | 默认 etcd-derivation-root | 是 | Secret 位于 kube-system,两边内容必须完全一致 |
关键 CRD
| CRD | 作用 | 是否需要同步到 Standby |
|---|---|---|
EtcdKeySeedBundle (cluster scope) | 共享种子,决定每个 revision 的派生输入 | 是 |
EtcdKeySeedBundleState (cluster scope) | 本集群派生执行的本地状态 | 否 |
EtcdEncryptionConfig (cluster scope) | 加密总配置,含 rotation / strategy / deterministic 子字段 | 否(两边各自由 chart 渲染) |
关键 etcd-sync 规则
| 类型 | etcd 路径 | 备注 |
|---|---|---|
| 同步 | /registry/etcdkeyseedbundles.cluster.alauda.io/ | Standby 用它派生相同密钥 |
| 忽略 | /registry/etcdkeyseedbundlestates.cluster.alauda.io/ | 本地状态 |
| 忽略 | /registry/etcdencryptionconfigs.cluster.alauda.io/default | 本地配置 |
| 忽略 | /registry/secrets/kube-system/<root_secret_name> | Root Secret,两边各自部署 |
| 忽略 | /registry/secrets/kube-system/etcd-encryption-key- | 本地派生出的 key Secret 前缀 |
| 忽略 | /registry/configmaps/kube-public/etcd-sync | runtime 角色 marker,由本地 etcd-sync 维护 |
完整接入规则与字段语义见同仓 etcd-sync-dynamic-configmap-migration/provider-spec.md。
与其他主题的关系
- 与 active-standby-controller-coordination 共享同一个 runtime 角色信号(
kube-public/etcd-syncConfigMap)。一个判定 Active/Standby 的来源,两边都按它行动。 - 加密层不直接同步 key,而是只同步 SeedBundle,Active 与 Standby 各自基于共享的 root secret 独立派生出相同的 key。