總覽
本程序說明如何在 Hashicorp Vault 中輪替 Cassandra 憑證。如要輪替叢集中 Kubernetes 密鑰中的憑證,請參閱「輪替 Kubernetes 密鑰中的 Cassandra 憑證」。
這項功能可讓平台管理員:
- 在 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.auth.secretProviderClass設為新的密鑰提供者類別 (newSecretProviderClass)。cassandra: auth: secretProviderClass: NEW_SPC_NAME
- 備份 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.auth.secretProviderClass設為新的密鑰提供者類別 (newSecretProviderClass)。cassandra: auth: secretProviderClass: NEW_SPC_NAME
- 備份 Cassandra 資料庫。這項備份功能可確保旋轉後的憑證可進行還原。
- 從 Vault 中刪除舊的 Cassandra 憑證、角色和政策。
復原旋轉
如果是多個區域,請在每個區域執行回溯作業。
- 
    使用下列範本建立新的 SecretRotation 自訂資源:
    # rollback-rotation.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROLLBACK_NAME namespace: APIGEE_NAMESPACE spec: organizationId: APIGEE_ORG rotationId: ROTATION_ID # match the current rotation. timeoutMinutes: TIMEOUT_MINUTES # optional. precheck: false cassandra: oldSecretProviderClass: OLD_SPC_NAME # Must match the previous oldSecretProviderClass. newSecretProviderClass: NEW_SPC_NAME # Must match the previous newSecretProviderClass. jobType: ROLLBACK其中: - ROLLBACK_NAME:回溯作業的名稱,例如 sr-1-rollback。
- APIGEE_NAMESPACE:您的 Apigee 命名空間。
- APIGEE_ORG:您的 Apigee 機構組織 ID。
- ROTATION_ID:您要回溯的目前輪替項目 ID,例如:rot-1。
- TIMEOUT_MINUTES:選用。覆寫預設值 (480m == 8hr)。<=0 表示無限超時。
- OLD_SPC_NAME:此值必須與您在單一區域設定或多區域設定程序中使用的輪替 YAML 檔案中 oldSecretProviderClass:的機密名稱相符。
- NEW_SPC_NAME:此值必須與您在單一地區設定或多地區設定程序中使用的輪替 YAML 檔案中 newSecretProviderClass:的祕密名稱相符。
 
- ROLLBACK_NAME:回溯作業的名稱,例如 
- 
    套用復原:kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE 
- 
    查看工作狀態,並等待工作完成。
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME 
- 回溯作業完成後,請確認流量仍能正確流動。
- 如果是多區域安裝,請在流量正常傳送後,在各個區域重複執行復原程序。
- 
    完成回溯作業並確認所有區域仍可正常流量後,請開始清理程序。
    請在輪替 YAML 檔案中進行下列變更: - 將 metadata.name變更為表示這是清理工作的名稱,例如sr-1-cleanup-rollback。
- 將 spec.cassandra.jobType變更為CLEANUP_ROLLBACK。
 
- 將 
- 
    套用檔案以觸發清理工作:
    kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE 
- 
    查看工作狀態,並等待工作完成。
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME 清理工作完成後,還原程序就會完成。 
- 
    更新覆寫檔案,並將 cassandra.auth.secretProviderClass設為舊的密鑰提供者類別 (oldSecretProviderClass)。cassandra: auth: secretProviderClass: OLD_SPC_NAME