Longhorn加密卷通过dm-crypt在存储层实现静态数据保护,需创建密钥Secret并配置启用encrypted的StorageClass,确保数据库数据目录完整挂载其上。

直接对数据库文件所在的存储卷加密,是最底层、最可靠的静态数据保护方式。它不依赖数据库自身功能,即使数据库被卸载或磁盘被物理移走,数据仍处于加密状态。
选择支持加密的存储后端
不是所有存储方案都原生支持卷级加密。优先选用以下类型:
- Kubernetes环境:Longhorn、OpenEBS(Mayastor/CSI)、Rook-Ceph(配合LUKS或KMS)
- 云平台托管存储:AWS EBS 加密卷、Azure 托管磁盘(默认启用平台密钥加密)、GCP Persistent Disk(支持客户管理密钥)
- 本地服务器:LVM + LUKS 组合,或 ZFS 原生加密(需 ZFS 0.8+ 和 Linux 5.4+)
以 Longhorn 为例配置加密卷
Longhorn 是 Kubernetes 中轻量且易用的分布式块存储,其加密能力基于 Linux 内核 dm-crypt,由 CSI 驱动透明处理。
- 创建密钥 Secret,存入
longhorn-system命名空间,使用 AES-XTS-PLAIN64 算法和 SHA-256 哈希 - 定义 StorageClass,开启
encrypted: "true",并正确引用密钥 Secret 的四个 CSI 密钥字段(provisioner/node-publish/node-stage) - 部署 PVC 时指定该 StorageClass;Longhorn 控制器会在创建卷时自动生成加密设备,挂载到 Pod 前自动解密
- 验证方式:进入节点执行
lsblk -f,加密卷会显示为crypt类型,底层设备不可直接读取明文
数据库文件目录必须落在加密卷内
加密卷本身不自动保护数据库——关键在于把 MySQL 或 PostgreSQL 的数据目录完整挂载进去。
- MySQL 示例:将
/var/lib/mysql目录作为 volumeMount 挂载点,指向 PVC,禁用宿主机上的原数据目录 - PostgreSQL 示例:在 StatefulSet 中通过
volumeMounts把/var/lib/postgresql/data映射到加密 PVC,同时确保 initContainer 不误初始化非加密路径 - 切勿只加密部分子目录(如仅加密
pg_wal),否则表空间文件、WAL 日志、临时文件等仍可能泄露明文
密钥与生命周期协同管理
加密卷的安全强度取决于密钥管理是否闭环:
- 密钥不硬编码:Secret 中的
CRYPTO_KEY_VALUE应来自外部 KMS(如 HashiCorp Vault、AWS KMS),而非明文口令 - 支持密钥轮换:Longhorn 和 OpenEBS 均提供 re-encrypt 工具,可在不中断服务前提下更换卷密钥
- 备份也加密:使用
velero或restic备份 PVC 时,确保备份目标启用服务端加密(如 S3 SSE-KMS) - 销毁即失效:删除 PVC 后,Longhorn 会自动擦除加密密钥缓存;若使用外部 KMS,还需同步撤销对应密钥权限

















