Menu Close

5.10.4. 创建自定义加密的持久性卷

创建 PersistentVolumeClaim 对象时,OpenShift Container Platform 会置备一个新的持久性卷(PV)并创建一个 PersistentVolume 对象。您可以通过加密新创建的 PV,在 Google Cloud Platform(GCP)中添加自定义加密密钥来保护集群中的 PV。

要加密,您新创建的 PV 使用新的或现有的 Google Cloud Key Management Service(KMS)密钥在集群中使用用户管理的加密密钥(CMEK)。

先决条件

  • 登陆到一个正在运行的 OpenShift Container Platform 集群。
  • 您已创建了 Cloud KMS 密钥环以及密钥版本。

有关 CMEK 和 Cloud KMS 资源的更多信息,请参阅使用客户管理的加密密钥(CMEK)

流程

要创建自定义加密 PV,请完成以下步骤:

  1. 使用 Cloud KMS 密钥创建存储类。以下示例启用加密卷的动态置备:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-gce-pd-cmek
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: "WaitForFirstConsumer"
    allowVolumeExpansion: true
    parameters:
      type: pd-standard
      disk-encryption-kms-key: projects/<key-project-id>/locations/<location>/keyRings/<key-ring>/cryptoKeys/<key> 1
    1
    此字段必须是用于加密新磁盘的密钥的资源标识符。值是区分大小写的。有关提供关键 ID 值的更多信息,请参阅检索资源 ID获取 Cloud KMS 资源 ID
    注意

    您不能将 disk-encryption-kms-key 参数添加到现有的存储类中。但是,您可以删除存储类并使用相同的名称和不同的参数集合重新创建该存储类。如果您这样做,现有类的置备程序必须是 pd.csi.storage.gke.io

  2. 使用 oc 命令在 OpenShift Container Platform 集群上部署存储类:

    $ oc describe storageclass csi-gce-pd-cmek

    输出示例

    Name:                  csi-gce-pd-cmek
    IsDefaultClass:        No
    Annotations:           None
    Provisioner:           pd.csi.storage.gke.io
    Parameters:            disk-encryption-kms-key=projects/key-project-id/locations/location/keyRings/ring-name/cryptoKeys/key-name,type=pd-standard
    AllowVolumeExpansion:  true
    MountOptions:          none
    ReclaimPolicy:         Delete
    VolumeBindingMode:     WaitForFirstConsumer
    Events:                none

  3. 创建名为 pvc.yaml 的文件,该文件与您在上一步中创建的存储类对象的名称匹配:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: csi-gce-pd-cmek
      resources:
        requests:
          storage: 6Gi
    注意

    如果将新存储类标记为默认值,可以省略 storageClassName 字段。

  4. 在集群中应用 PVC:

    $ oc apply -f pvc.yaml
  5. 获取 PVC 的状态,并验证它是否已创建并绑定到新置备的 PV:

    $ oc get pvc

    输出示例

    NAME      STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS     AGE
    podpvc    Bound     pvc-e36abf50-84f3-11e8-8538-42010a800002   10Gi       RWO            csi-gce-pd-cmek  9s

    注意

    如果您的存储类将 volumeBindingMode 字段设置为 WaitForFirstConsumer,您必须创建一个 pod 来使用 PVC,然后才能验证它。

您的 CMEK 保护 PV 现在可以与 OpenShift Container Platform 集群一起使用。