如何在Kubernetes中利用Storage-Class配置自动加密的持久化后端存储

胖磊小哥_3520

胖磊小哥_3520

2026-05-03

429人浏览

原创

storageclass 本身不提供加密能力,仅作为定义存储供应策略的模板;真正的加密需由底层存储系统支持,并通过 storageclass 的 parameters 显式启用,kubernetes 仅透传参数。

如何在kubernetes中利用storage-class配置自动加密的持久化后端存储

StorageClass 本身不直接提供加密能力,它只是定义存储供应策略的“模板”。真正的加密必须由底层存储系统(如云厂商块存储、企业级NAS或CSI驱动)支持,并通过 StorageClass 的 parameters 显式启用。Kubernetes 层面不参与加解密过程,只负责将加密参数透传给供应器。

确认底层存储是否原生支持加密

这是前提。不同后端支持方式差异大:

  • AWS EBS:支持 KMS 加密,需在 StorageClass 中指定 encrypted: "true" 和 kmsKeyId(可选)
  • Azure Disk:通过 kind: Managed + diskEncryptionSetID 参数启用 Azure 磁盘加密集
  • GCP PD:默认启用 Google 托管加密,也可用 diskType: pd-ssd + encryptionKmsKey 指定客户托管密钥
  • NFS/本地存储:通常不支持服务端加密;若需加密,得依赖文件系统层(如 LUKS)或应用层加密,StorageClass 无法控制
  • CSI 驱动(如 Portworx、Rook/Ceph):部分支持卷级加密,需查阅对应 CSI 文档并配置特定参数(如 encrypted: "true" 或 encryptionProvider: vault)

编写启用加密的 StorageClass 清单

以 AWS EBS 为例,以下 StorageClass 将为所有动态创建的 PV 启用 KMS 加密:

Kubernetes Security Posture Scorecard
Kubernetes Security Posture Scorecard

评估 Kubernetes 集群安全态势,覆盖 RBAC、工作负载安全、网络策略、基础设施即代码(IaC)、运行时监控和密钥管理等 30 项控制项……

下载
apiVersion: storage.k8s.io/v1<br>kind: StorageClass<br>metadata:<br>  name: encrypted-gp3<br>provisioner: kubernetes.io/aws-ebs<br>parameters:<br>  type: gp3<br>  encrypted: "true"<br>  kmsKeyId: arn:aws:kms:us-east-1:123456789012:key/abcd1234-1234-1234-1234-123456789012<br>  fsType: xfs<br>reclaimPolicy: Delete<br>volumeBindingMode: Immediate

关键点:

  • encrypted: "true" 是布尔字符串,必须加引号
  • kmsKeyId 若不填,则使用 AWS 默认密钥(AWS managed CMK)
  • volumeBindingMode: Immediate 表示 PVC 创建即绑定 PV,适合无拓扑约束场景;若需节点亲和性,改用 WaitForFirstConsumer

验证加密是否生效

仅靠 PVC 绑定成功不能证明加密启用。需分两层验证:

  • Kubernetes 层:检查 PVC 绑定的 PV 是否带有 annotations.volume.kubernetes.io/storage-provisioner 且状态为 Bound;再 describe PV,确认其 spec.awsElasticBlockStore.encrypted 字段为 true
  • 云平台层:登录 AWS 控制台 → EC2 → Volumes,找到对应卷,查看 “Encryption” 列是否显示 “Encrypted”,并确认 KMS 密钥 ARN 匹配

注意事项与常见误区

加密不是万能开关,实际使用中要注意:

  • 已存在的未加密 PV/PVC 无法通过修改 StorageClass 反向加密;必须新建 PVC 触发新 PV 创建
  • 加密密钥权限必须授予 EKS 节点角色(IAM Role),否则 provisioner 会因权限拒绝而失败
  • 加密仅保护静态数据(at-rest),不涉及传输中(in-transit)或内存中数据;Pod 内读写仍为明文
  • 某些 CSI 驱动加密功能需额外部署密钥管理组件(如 HashiCorp Vault 插件),并非开箱即用

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2243

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5950

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5266

10

C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2849

3

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

2023.07.25

2188

9

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

2023.08.02

1160

5

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.09

1098

4

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

2023.09.05

1296

5

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2023.09.20

2018

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程