總覽
這項功能可讓平台管理員:
- 在 HashiCorp 保管箱中輪替 Cassandra 憑證。
 - 如果密碼輪替期間發生任何問題,請回復使用 Vault 中的舊 Cassandra 憑證。
 - 請一次輪替一個區域的 Cassandra 密碼,以確保對服務可用性的影響降到最低,並維持輪替程序的控管權。
 - 追蹤單一區域的旋轉作業開始、進度和完成情況。
 
這項功能適用於 Apigee Hybrid 1.13.1 以上版本。
中的操作說明進行。事前準備
設定憑證輪替前:
- 備份 Cassandra 資料庫。這項備份功能可確保可復原先前輪替的憑證。
 - 請確認叢集處於正常運作狀態 (也就是所有 Apigee 資源皆在執行中,沒有待處理的狀態變更)。
 
單一區域設定
- 
    在 Apigee 命名空間中,為新的 Cassandra 憑證建立新的 
SecretProviderClassKubernetes 資源。請參閱「在 Hashicorp Vault 中儲存 Cassandra 機密」一文,瞭解可用的範本。這樣一來,Vault 角色就能存取 Kubernetes 命名空間中的密鑰。 - 
    使用下列範本建立新的 
SecretRotation自訂資源:# rotation.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_PROCESS_NAME namespace: APIGEE_NAMESPACE spec: organizationId: ORG_NAME rotationId: ROTATION_ID timeoutMinutes: 480 # optional. overrides the default (480m == 8hr). # less than or equal to 0 means infinite timeout. precheck: true cassandra: oldSecretProviderClass: OLD_SPC_NAME newSecretProviderClass: NEW_SPC_NAME jobType: ROTATE- ROTATION_PROCESS_NAME:輪替工作專屬名稱。您必須將 
metadata.name設為旋轉預檢工作和旋轉工作的專屬值。例如sr-1-precheck後面接著sr-1。 - ROTATION_ID:將 
spec.rotationId設為自訂 ID,例如rotation-1-precheck。 - NEW_SPC_NAME:將 
spec.cassandra.newSecretProviderClass設為您在上一個步驟中建立的新密鑰提供者類別名稱。 - OLD_SPC_NAME:將 
spec.cassandra.oldSecretProviderClass設為ApigeeDatastore目前使用的 SPC 名稱。 
 - ROTATION_PROCESS_NAME:輪替工作專屬名稱。您必須將 
 - 
    套用 
rotation.yaml檔案,觸發旋轉預先檢查工作。kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
 - 
    查看工作狀態,確認預先檢查工作是否已完成。
    
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
 - 
    旋轉預先檢查工作完成後,請變更 
metadata.name的值,並將spec.precheck設為false。再次套用檔案即可旋轉。kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
 - 
    輪替工作完成後,如果您已驗證流量仍可正常流動,請按照下列兩個步驟清理程序:
    
- 
        更新 
metadata.name的值,並將spec.cassandra.jobType設為CLEANUP。 - 
        套用檔案即可觸發清理工作。
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
 
清除工作完成後,輪替程序就會結束。
 - 
        更新 
 - 備份 Cassandra 資料庫。這項備份功能可確保旋轉後的憑證可進行還原。
 - 從 Vault 中刪除舊的 Cassandra 憑證、角色和政策。
 
多區域設定
多區域設定程序分為兩個部分:第一個區域的設定,以及其餘區域的設定。
- 請先在第一個區域完成下列步驟,再開始處理後續區域。
    
- 
        為新的 Cassandra 憑證,在 
APIGEE_NAMESPACE命名空間中建立新的SecretProviderClassKubernetes 資源。請參閱「在 Hashicorp Vault 中儲存 Cassandra 機密」一文,瞭解可用的範本。這樣一來,Vault 角色就能存取 Kubernetes 命名空間中的密鑰。 - 
        使用下列範本建立新的 
SecretRotation自訂資源:# rotation.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_PROCESS_NAME namespace: APIGEE_NAMESPACE spec: organizationId: ORG_NAME rotationId: ROTATION_ID timeoutMinutes: -1 # this value is required and should not be changed. precheck: true cassandra: oldSecretProviderClass: OLD_SPC_NAME newSecretProviderClass: NEW_SPC_NAME jobType: ROTATE- ROTATION_PROCESS_NAME:輪替工作專屬名稱。您必須將 
metadata.name設為旋轉預檢工作和旋轉工作的專屬值。例如sr-1-precheck後面接著sr-1。 - ROTATION_ID:將 
spec.rotationId設為自訂 ID,例如rotation-1-precheck。 - NEW_SPC_NAME:將 
spec.cassandra.newSecretProviderClass設為您在上一個步驟中建立的新密鑰提供者類別名稱。 - OLD_SPC_NAME:將 
spec.cassandra.oldSecretProviderClass設為ApigeeDatastore目前使用的 SPC 名稱。 
 - ROTATION_PROCESS_NAME:輪替工作專屬名稱。您必須將 
 - 
        套用 
rotation.yaml檔案,觸發旋轉預先檢查工作。kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
 - 
        查看工作狀態,確認預先檢查工作是否已完成。
        
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
 - 
        輪替預先檢查工作完成後:
        
- 變更 
metadata.name的值,例如從sr-1-precheck變更為sr-1。 - 將 
spec.precheck設為false即可關閉預先檢查並執行旋轉。 - 將 
spec.rotationId設為新的 ID,例如rotation-1。 
 - 變更 
 - 
        再次套用檔案即可旋轉。
        
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
 - 
        請檢查 
SecretRotation的狀態,並等待狀態變成complete。kubectl -n APIGEE_NAMESPACE get sr SR_NAME
 
 - 
        為新的 Cassandra 憑證,在 
 - 
    在後續每個區域中,完成下列步驟:
    
- 在 Apigee 命名空間中,為新的 Cassandra 憑證建立新的 
SecretProviderClassKubernetes 資源。請參閱「在 Hashicorp Vault 中儲存 Cassandra 機密」一文,瞭解可用的範本。這個定義應與步驟 1a 相同。 - 更新 
overrides.yaml,並將cassandra.auth.secretProviderClass設為與rotation.yaml檔案中的spec.cassandra.newSecretProviderClass值相符。cassandra: auth: secretProviderClass: NEW_SPC_NAME - 套用運算子圖表:
        
helm upgrade operator apigee-operator/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
 - 
        系統會建立新的 
ReplicaSet。確認新的控制器管理員 Pod 是否使用新的 SPC:export POD=NEW_CONTROLLER_MANAGER_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'結果應與您在
rotation.yaml中為spec.cassandra.newSecretProviderClass設定的值相符,例如:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'my-new-spc - 套用資料儲存庫圖表:
        
helm upgrade datastore apigee-datastore/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
 - 資料儲存庫會進入釋出狀態。請等待資料儲存庫釋出完成,並處於執行狀態。
kubectl -n APIGEE_NAMESPACE get apigeedatastore DATASTORE_NAME
在大多數安裝作業中,DATASTORE_NAME 為
default。 - 確認新的資料儲存庫 Pod 是否使用新的 SPC:
export POD=NEW_DATASTORE_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'結果應與您在
rotation.yaml中為spec.cassandra.newSecretProviderClass設定的值相符,例如:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'my-new-spc - 等待機構和環境的發布作業完成,並已恢復執行狀態。
        
kubectl -n APIGEE_NAMESPACE get apigeeorg ORG_NAME
kubectl -n APIGEE_NAMESPACE get apigeeenv ENV_NAME - 確認新的 MART、執行階段和同步器 Pod 是否使用新的 SPC:
export POD=NEW_MART_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'export POD=NEW_RUNTIME_POD_NAMEkubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'export POD=NEW_SYNCHRONIZER_POD_NAMEkubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'結果應與您在
rotation.yaml中為spec.cassandra.newSecretProviderClass設定的值相符,例如:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'my-new-spc 
 - 在 Apigee 命名空間中,為新的 Cassandra 憑證建立新的 
 - 
    完成每個區域的步驟後,請確認流量仍可正常傳送,然後按照下列兩個步驟清理第一個區域的程序:
    
- 
        在第一個區域中,更新 
metadata.name的值,並將spec.cassandra.jobType設為CLEANUP。 - 
        套用檔案即可觸發清理工作。
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
 - 請檢查工作狀態並查看工作記錄,確認清理工作何時完成。
 
清除工作完成後,輪替程序就會結束。
 - 
        在第一個區域中,更新 
 - 備份 Cassandra 資料庫。這項備份功能可確保旋轉後的憑證可進行還原。
 - 從 Vault 中刪除舊的 Cassandra 憑證、角色和政策。