将 COS 从 Hyper Protect Crypto Services 迁移到 Key Protect
将 Hyper Protect Crypto Services (HPCS) 加密的 IBM Cloud Object Storage s3fs 插件迁移到 Key Protect (KP) 上。
准备工作
在开始之前,请按照以下步骤确定是否需要迁移 COS 插件,以使用 Key Protect 代替 HPCS。
-
获取 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:: -
列出集群中所有
ibm/ibmc-s3fs类型的机密。kubectl get secrets --field-selector type=ibm/ibmc-s3fs -
对于每个
ibm/ibmc-s3fs秘密,查看秘密内容,并在data部分找到kp-root-key-crn根密钥。 注意任何kp-root-key-crn值包含hs-crypto字符串的密钥,这表明它是 HPCS 根密钥,必须迁移。 保存要迁移的机密列表。 如果kp-root-key-crn中没有包含hs-crypto的值,则无需执行迁移步骤。
迁移的先决条件
在开始之前完成这些步骤。
迁移步骤
请按照以下步骤将 COS 插件迁移到 Key Protect。
如果您的所有 COS 保密协议和 PVC 都在特定命名空间中,您可以将以下步骤的范围扩大到该命名空间。 否则,请搜索群集上的所有 namesapces。
步骤 1. 列出要迁移的 PVC
确定哪些 PVC 必须迁移。
- 列出群集或相关命名空间中的所有 PVC。
oc get pvc [-n <namespace>] - 描述每种 PVC。
oc describe pvc <pvc-name> - 在 PVC 输出中,找到“注释”部分,检查
volume.kubernetes.io/storage-provisioner: ibm.io/ibmc-s3fs是否在列。 - 如果注释已列出,请查找
ibm.io/secret-name注释。 - 如果
volume.kubernetes.io/storage-provisioner: ibm.io/ibmc-s3fs注释已列出 ,且ibm.io/secret-name值与您发现的具有 HPCS 根密钥的任何机密相匹配,则必须迁移 PVC。 注意 PVC 名称。 - 对每个 PVC 重复上述步骤。 保存要迁移的 PVC 列表。
步骤 2. 列出要迁移的 pod
确定哪些 pod 必须迁移。
- 列出群集上或相关命名空间中的所有 pod。
oc get pods [-n <namespace>] - 描述每个吊舱。
oc describe pod <pod-name> - 在输出结果中,找到 卷数 部分,检查每个 PersistentVolumeClaim 的名称。 如果输出中的任何 PVC 也包含在要迁移的 PVC 列表中,则必须迁移 pod。 注意 pod 的名称。
- 对每个豆荚重复上述步骤。 保存要迁移的 pod 列表。
步骤 3. 创建新秘密
创建使用 Key Protect 根密钥而非 HPCS 根密钥的新秘密。
-
获取 Key Protect 实例的 CRN 并将其编码为 base64。
ibmcloud resource service-instance <kp-instance-name>echo -n "<root_key_CRN>" | base64 -
对于必须迁移的每个秘密,请获取秘密 yaml。
oc get secret <secret-name> -o yaml -
将 yaml 复制到文件中,创建新的秘密。 将
kp-root-key-crn改为指向 Key Protect 实例的 base64 编码 CRN。 在密文名称末尾添加一个字符串,以帮助区分新旧密文。重新创建 PVC 时,必须指定 PVC 所用密文的新副本。 确保新密文的名称与旧密文相对应,但仍能区分两者。
-
应用秘诀。
kubectl apply -f <secret-file-name> -
对每个需要迁移的秘密重复上述步骤。
步骤 4. 重新创建 PVC
重新创建 PVC,使其指向新的秘密。
-
为每个必须迁移的 PVC 获取 PVC yaml。
oc get PVC <pvc-name> -o yaml -
将 yaml 复制到文件中,创建新的 PVC。 更改
ibm.io/secret-name和ibm.io/secret-namespace注释,指向与之前列出的秘密相对应的新秘密。 在 PVC 名称末尾添加一个字符串,以帮助将其与旧的 PVC 区分开来。 -
使用新的 PVC。
oc apply -f <pvc-file-name> -
获取 PVC 的详细信息,并确认其处于绑定状态。
oc get PVC <pvc> -
对每个需要迁移的 PVC 重复上述步骤。
步骤 5. 更新吊舱
更新 pod,使其指向新的 PVC。
- 确定使用的资源类型。 在输出结果中找到 ownerReferences 部分,并记下资源的类型和列出的资源名称。
oc describe pod <pod-name> - 根据本节中列出的资源,遵循更新策略。ownerReferences 部分所列资源的更新策略。
DaemonSet: 滚动更新 DaemonSetDeployment: 更新部署StatefulSet: 更新战略 StatefulSets- 未列出资源:如果未列出资源,则该 pod 是一个独立 pod,必须使用新的 PVC 名称手动重新创建。 按照 手动重新创建 pod 中的步骤操作。
手动重新创建 pod
-
获取 pod yaml。
oc describe <resource-type> <resource-name> -o yaml -
将 yaml 复制到文件中,创建一个新 pod。 在 yaml 的卷部分,将 PersistentVolumeClaim 以指向与之前列出的 PVC 相对应的新 PVC。 在新资源名称末尾添加一个字符串,以帮助将其与旧资源区分开来。
-
应用新的 yaml 文件。
oc apply -f <pod-yaml-file> -
验证 pod 是否正在运行。
oc get pods -
对每个需要手动迁移的 pod 重复上述步骤。