GKE中etcd与PV存储对同一KMS密钥操作的行为差异疑问
GKE两种KMS加密场景的差异原因及底层区别
这两种场景的加密实现链路、密钥依赖逻辑完全不同,功能支持的差异是底层实现逻辑决定的:
1. etcd控制平面加密的实现逻辑
GKE的etcd加密属于K8s控制平面原生托管的能力,全链路由GKE控制平面管控:
- 所有etcd的读写请求都会经过GKE内置的KMS代理层:写入时先调用Cloud KMS接口用用户提供的密钥加密明文,再存入etcd;读取时必须先调用KMS接口解密密文,才能返回给kube-apiserver等控制平面组件使用
- 密钥操作可以直接生效的原因:
- 禁用密钥后,所有解密请求会被KMS直接拒绝,etcd内的密文完全无法被读取,对应控制平面功能直接失效
- 密钥轮转由GKE控制平面自动执行:会批量将存量etcd密文用旧密钥解密,再用新密钥加密后回写,全程不需要用户介入底层操作
2. StorageClass动态PV加密的实现逻辑
基于StorageClass配置的PV加密本质是GCP持久化磁盘(PD)的IaaS层静态加密能力,和K8s控制平面完全解耦:
- 在StorageClass中指定KMS密钥,仅作用于PV创建阶段:GKE会告诉PD服务用该密钥创建加密磁盘,加密绑定动作仅执行一次
- 磁盘挂载到GKE节点后,加密/解密操作完全在GCP存储的硬件层完成,磁盘挂载成功后,整个读写链路就不再依赖KMS:存储侧会缓存本次挂载会话对应的数据加密密钥(DEK),不需要重复调用KMS接口
- 不支持动态密钥操作的原因:
- 禁用密钥只会阻止新的磁盘挂载请求,已经挂载成功的磁盘因为会话密钥已缓存,读写不会受到任何影响
- 密钥轮转无法自动生效:PD磁盘的加密密钥和磁盘创建时的状态绑定,要更换密钥只能创建新的加密磁盘,手动迁移存量数据,GKE和PD都不支持存量磁盘的自动密钥轮转
两种场景的根本性区别
两者属于完全不同层级的加密实现,核心差异非常明显:
- etcd加密是K8s控制平面的应用层加密,加密逻辑和K8s控制面深度绑定,所有数据的加解密全程强依赖KMS的实时调用
- PV加密是IaaS层的磁盘静态加密,加密逻辑在存储硬件层实现,仅在磁盘初始化、挂载阶段依赖KMS,挂载完成后就和KMS完全解耦
内容的提问来源于stack exchange,提问作者C. Derx
相关产品推荐
相关产品推荐

