總覽
本程序說明如何在 Hashicorp Vault 中輪替 Cassandra 憑證。如要在叢集的 Kubernetes Secret 中輪替憑證,請參閱「在 Kubernetes Secret 中輪替 Cassandra 憑證」。
這項功能可讓平台管理員:
- 在 Hashicorp Vault 中輪換 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。
- :將 spec.rotationId設為自訂 ID,例如rotation-1-precheck。ROTATION_ID
- 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 憑證、角色和政策。
多區域設定
多區域設定程序分為兩節:第一個區域的設定,以及其餘區域的設定。
- 請先在第一個區域完成下列步驟,再開始後續區域的作業。
    - 
        在 APIGEE_NAMESPACE命名空間中,為新的 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: -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。
- :將 spec.rotationId設為自訂 ID,例如rotation-1-precheck。ROTATION_ID
- 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 
 
- 
        在 
- 
    在每個後續區域中,完成下列步驟:
    - 在 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