将 COS 从 Hyper Protect Crypto Services 迁移到 Key Protect

将 Hyper Protect Crypto Services (HPCS) 加密的 IBM Cloud Object Storage s3fs 插件迁移到 Key Protect (KP) 上。

准备工作

在开始之前,请按照以下步骤确定是否需要迁移 COS 插件,以使用 Key Protect 代替 HPCS。

  1. 获取 HPCS 和 KP 实例的 CRN。 为每个实例运行以下命令

    ibmcloud resource service-instance <instance-name>
    

    示例输出。

    Name:  my-hpcs-instance
    ID:    crn:v1:bluemix:public:kms:us-south:a/1ab234cd5e678fgh9a0123bc4de567:f89gh01a-bcd2-3456-e789-f0g1234h5ab6::
    
  2. 列出集群中所有 ibm/ibmc-s3fs 类型的机密。

    kubectl get secrets --field-selector type=ibm/ibmc-s3fs
    
  3. 对于每个 ibm/ibmc-s3fs 秘密,查看秘密内容,并在 data 部分找到 kp-root-key-crn 根密钥。 注意任何 kp-root-key-crn 值包含 hs-crypto 字符串的密钥,这表明它是 HPCS 根密钥,必须迁移。 保存要迁移的机密列表。 如果 kp-root-key-crn 中没有包含 hs-crypto 的值,则无需执行迁移步骤。

迁移的先决条件

在开始之前完成这些步骤。

  1. 如果群集上安装了 COS 舵图,请确保它 运行的是最新版本
  2. 如果还没有,请创建一个新的 Key Protect 实例和一组新的 Key Protect 密钥用于加密。 确保 Key Protect 实例与群集创建在同一区域。 这是 Key Protect 实例访问 COS 资源所必需的。
  3. 为 Key Protect 创建服务对服务授权,以便访问 COS 资源。 将源服务设为 Key Protect,目标服务设为 COS,并将访问级别至少设为“读者”。

迁移步骤

请按照以下步骤将 COS 插件迁移到 Key Protect。

如果您的所有 COS 保密协议和 PVC 都在特定命名空间中,您可以将以下步骤的范围扩大到该命名空间。 否则,请搜索群集上的所有 namesapces。

步骤 1. 列出要迁移的 PVC

确定哪些 PVC 必须迁移。

  1. 列出群集或相关命名空间中的所有 PVC。
    oc get pvc [-n <namespace>]
    
  2. 描述每种 PVC。
    oc describe pvc <pvc-name>
    
  3. 在 PVC 输出中,找到“注释”部分,检查 volume.kubernetes.io/storage-provisioner: ibm.io/ibmc-s3fs 是否在列。
  4. 如果注释已列出,请查找 ibm.io/secret-name 注释。
  5. 如果 volume.kubernetes.io/storage-provisioner: ibm.io/ibmc-s3fs 注释已列出 ,且 ibm.io/secret-name 值与您发现的具有 HPCS 根密钥的任何机密相匹配,则必须迁移 PVC。 注意 PVC 名称。
  6. 对每个 PVC 重复上述步骤。 保存要迁移的 PVC 列表。

步骤 2. 列出要迁移的 pod

确定哪些 pod 必须迁移。

  1. 列出群集上或相关命名空间中的所有 pod。
    oc get pods [-n <namespace>]
    
  2. 描述每个吊舱。
    oc describe pod <pod-name>
    
  3. 在输出结果中,找到 卷数 部分,检查每个 PersistentVolumeClaim 的名称。 如果输出中的任何 PVC 也包含在要迁移的 PVC 列表中,则必须迁移 pod。 注意 pod 的名称。
  4. 对每个豆荚重复上述步骤。 保存要迁移的 pod 列表。

步骤 3. 创建新秘密

创建使用 Key Protect 根密钥而非 HPCS 根密钥的新秘密。

  1. 获取 Key Protect 实例的 CRN 并将其编码为 base64。

    ibmcloud resource service-instance <kp-instance-name>
    
    echo  -n "<root_key_CRN>" | base64
    
  2. 对于必须迁移的每个秘密,请获取秘密 yaml。

    oc get secret <secret-name> -o yaml
    
  3. 将 yaml 复制到文件中,创建新的秘密。 将 kp-root-key-crn 改为指向 Key Protect 实例的 base64 编码 CRN。 在密文名称末尾添加一个字符串,以帮助区分新旧密文。

    重新创建 PVC 时,必须指定 PVC 所用密文的新副本。 确保新密文的名称与旧密文相对应,但仍能区分两者。

  4. 应用秘诀。

    kubectl apply -f <secret-file-name>
    
  5. 对每个需要迁移的秘密重复上述步骤。

步骤 4. 重新创建 PVC

重新创建 PVC,使其指向新的秘密。

  1. 为每个必须迁移的 PVC 获取 PVC yaml。

    oc get PVC <pvc-name> -o yaml
    
  2. 将 yaml 复制到文件中,创建新的 PVC。 更改 ibm.io/secret-nameibm.io/secret-namespace 注释,指向与之前列出的秘密相对应的新秘密。 在 PVC 名称末尾添加一个字符串,以帮助将其与旧的 PVC 区分开来。

  3. 使用新的 PVC。

    oc apply -f <pvc-file-name>
    
  4. 获取 PVC 的详细信息,并确认其处于绑定状态。

    oc get PVC <pvc>
    
  5. 对每个需要迁移的 PVC 重复上述步骤。

步骤 5. 更新吊舱

更新 pod,使其指向新的 PVC。

  1. 确定使用的资源类型。 在输出结果中找到 ownerReferences 部分,并记下资源的类型和列出的资源名称
    oc describe pod <pod-name>
    
  2. 根据本节中列出的资源,遵循更新策略。ownerReferences 部分所列资源的更新策略。

手动重新创建 pod

  1. 获取 pod yaml。

    oc describe <resource-type> <resource-name> -o yaml
    
  2. 将 yaml 复制到文件中,创建一个新 pod。 在 yaml 的部分,将 PersistentVolumeClaim 以指向与之前列出的 PVC 相对应的新 PVC。 在新资源名称末尾添加一个字符串,以帮助将其与旧资源区分开来。

  3. 应用新的 yaml 文件。

    oc apply -f <pod-yaml-file>
    
  4. 验证 pod 是否正在运行。

    oc get pods
    
  5. 对每个需要手动迁移的 pod 重复上述步骤。