為 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 輸出中,找到 Annotations 區段,檢查是否列出
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>] - 描述每個 pod。
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 的詳細資訊,並驗證其是否處於 Bound 狀態。
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 的 volumes 部分,將 PersistentVolumeClaim 以指向與之前列出的 PVC 相對應的新 PVC。 在新資源名稱的末尾附加一個字串,以協助與舊資源區分。
-
套用新的 yaml 檔案。
oc apply -f <pod-yaml-file> -
驗證 Pod 在執行中。
oc get pods -
對每個需要手動移轉的 pod 重複這些步驟。