在 Kubernetes 密鑰中輪替 Cassandra 密鑰
本程序說明如何輪替叢集中 Kubernetes 密鑰中的 Cassandra 憑證。如要瞭解如何在 HashiCorp Vault 中輪替憑證,請參閱「在 HashiCorp Vault 中輪替 Cassandra 憑證」。
這個程序會自動執行並觸發三項工作,讓您能夠輪替用於實際工作環境 Apigee Hybrid 服務的 Cassandra 憑證,而不會造成停機時間:
- 輪替使用者憑證
 - 輪替作業的復原
 - 清理舊憑證和新憑證
 
在 Kubernetes 密鑰中輪替 Cassandra 密鑰
共有六組 Cassandra 憑證 (使用者名稱 + 密碼) 可輪替:
- 預設*
 - 管理員
 - DDL
 - DML
 - JMX
 - Jolokia
 
為輪替憑證做好準備
	如要執行這些步驟,您必須具備在叢集中執行 kubectl apply -f 的權限。
- 備份 Cassandra 資料庫。這項備份功能可確保可復原先前輪替的憑證。請參閱 Cassandra 備份總覽。
 - 請確認叢集處於正常運作狀態,所有 Apigee 資源皆處於執行狀態,且沒有待處理的狀態變更。
 
單一區域憑證輪替
- 按照「在 Kubernetes 密鑰中設定使用者名稱和密碼」的說明,在 Apigee 命名空間中建立新的 Kubernetes 密鑰,用於儲存要輪替的 Cassandra 使用者憑證。
 - 執行旋轉預先檢查。
- 
        使用下列範本建立新的 SecretRotation 自訂資源:
# rotation-k8s-secrets.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_NAME namespace: APIGEE_NAMESPACE spec: organizationId: APIGEE_ORG rotationId: ROTATION_ID timeoutMinutes: TIMEOUT_MINUTES # optional. 480 recommended. precheck: true cassandra: oldSecretRef: OLD_SECRET_REF newSecretRef: NEW_SECRET_REF jobType: ROTATE其中:
- ROTATION_NAME:輪播工作名稱,例如 
sr-1-precheck。 - APIGEE_NAMESPACE:您的 Apigee 命名空間。
 - APIGEE_ORG:您的 Apigee 機構組織 ID。
 - ROTATION_ID:自訂 ID,例如 
rot-1-precheck。 - TIMEOUT_MINUTES:選用。覆寫預設值 (480m == 8hr)。<=0 表示無限超時。
 - PRECHECK :觸發模擬執行作業。將其設為 true 時,輪替程序會執行所有步驟,但不會實際套用新憑證。
 - OLD_SECRET_REF:
apigeedatastore目前使用的密鑰名稱。您可以使用下列指令查看這個值:kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}' - NEW_SECRET_REF:在前一個步驟中建立的密鑰名稱。
 
 - ROTATION_NAME:輪播工作名稱,例如 
 - 
        套用旋轉 YAML 檔案,觸發旋轉預檢工作:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
 - 
    查看工作狀態,並等待工作完成。
    
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
工作完成後,輸出內容會包含:
Status: Message: rotation complete State: complete
kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
 
 - 
        使用下列範本建立新的 SecretRotation 自訂資源:
 - 
    輪替預先檢查工作完成後,請執行輪替作業:
    
- 在旋轉 YAML 檔案中進行下列變更:
        
- 將 
metadata.name變更為表示這不是預先勾選的名稱,例如:sr-1。 - 將 
spec.precheck設為false。 - 將 
spec.rotationId變更為新的 ID,例如rot-1。 
 - 將 
 - 再次套用檔案即可旋轉。
        
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
 
 - 在旋轉 YAML 檔案中進行下列變更:
        
 - 輪替工作完成後,請驗證流量是否仍能正常流動。
 - 驗證流量後,請清理舊密鑰。
- 
       在旋轉 YAML 檔案中進行下列變更:
        
- 將 
metadata.name變更為表示這是清理工作的名稱,例如sr-1-cleanup。 - 將 
spec.cassandra.jobType設為CLEANUP。 - 確認 
spec.precheck已設為false。 
 - 將 
 - 再次套用檔案即可執行清理作業。
        
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
 - 
        查看工作狀態,並等待工作完成。
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
清除工作完成後,輪替程序就會結束。
 
 - 
       在旋轉 YAML 檔案中進行下列變更:
        
 - 
    更新覆寫檔案,並將 
cassandra.auth.secret設為新的密鑰名稱 (newSecretRef)。cassandra: auth: secret: NEW_SECRET_REF - 備份 Cassandra 資料庫。這項備份功能可確保旋轉後的憑證可進行還原。
 - 刪除舊的 Cassandra 憑證密鑰。
 
多區域憑證輪替
- 
    在每個區域中,按照「在 Kubernetes 密鑰中設定使用者名稱和密碼」的說明,在 Apigee 命名空間中建立新的 Kubernetes 密鑰,用於儲存要輪替的 Cassandra 使用者憑證。
每個地區的憑證必須相同。
 - 執行旋轉預先檢查。
- 
        使用下列範本建立新的 SecretRotation 自訂資源:
# rotation-k8s-secrets.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_NAME namespace: APIGEE_NAMESPACE spec: organizationId: APIGEE_ORG rotationId: ROTATION_ID timeoutMinutes: TIMEOUT_MINUTES # optional. 480 recommended. precheck: true cassandra: oldSecretRef: OLD_SECRET_REF newSecretRef: NEW_SECRET_REF jobType: ROTATE其中:
- ROTATION_NAME:輪播工作名稱,例如 
sr-1-precheck。 - APIGEE_NAMESPACE:您的 Apigee 命名空間。
 - APIGEE_ORG:您的 Apigee 機構組織 ID。
 - ROTATION_ID:自訂 ID,例如 
rot-1-precheck。 - TIMEOUT_MINUTES:選用。覆寫預設值 (480m == 8hr)。<=0 表示無限超時。
 - PRECHECK :觸發模擬執行作業。將其設為 true 時,輪替程序會執行所有步驟,但不會實際套用新憑證。
 - OLD_SECRET_REF:
apigeedatastore目前使用的密鑰名稱。您可以使用下列指令查看這個值:kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}' - NEW_SECRET_REF:在前一個步驟中建立的密鑰名稱。
 
 - ROTATION_NAME:輪播工作名稱,例如 
 - 
        在第一個區域中,套用旋轉 YAML 檔案,觸發旋轉預檢工作:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
 - 
    查看工作狀態,並等待工作完成。
    
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
工作完成後,輸出內容會包含:
Status: Message: rotation complete State: complete
kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
 
 - 
        使用下列範本建立新的 SecretRotation 自訂資源:
 - 
    輪替預先檢查工作完成後,請在相同區域中執行輪替:
    
- 在旋轉 YAML 檔案中進行下列變更:
        
- 將 
metadata.name變更為表示這不是預先勾選的名稱,例如:sr-1。 - 將 
spec.precheck設為false。 - 將 
spec.rotationId變更為新的 ID,例如rot-1。 
 - 將 
 - 再次套用檔案即可旋轉。
        
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
 
 - 在旋轉 YAML 檔案中進行下列變更:
        
 - 輪替工作完成後,請驗證流量是否仍能正常流動。
 - 針對剩餘區域重複執行旋轉步驟。
 - 驗證流量後,請清理舊密鑰。您只需要在單一地區執行清理作業。無論您選擇哪個區域都沒關係。
    
- 
       在旋轉 YAML 檔案中進行下列變更:
        
- 將 
metadata.name變更為表示這是清理工作的名稱,例如sr-1-cleanup。 - 將 
spec.cassandra.jobType設為CLEANUP。 - 確認 
spec.precheck已設為false。 
 - 將 
 - 再次套用檔案即可執行清理作業。
        
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
 - 
        查看工作狀態,並等待工作完成。
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
清除工作完成後,輪替程序就會結束。
 
 - 
       在旋轉 YAML 檔案中進行下列變更:
        
 - 
    更新覆寫檔案,並將 
cassandra.auth.secret設為新的密鑰名稱 (newSecretRef)。cassandra: auth: secret: NEW_SECRET_REF - 備份 Cassandra 資料庫。這項備份功能可確保旋轉後的憑證可進行還原。
 - 刪除舊的 Cassandra 憑證密鑰。
 
復原旋轉
請在每個區域執行下列步驟。
- 
    使用下列範本建立新的 SecretRotation 自訂資源:
    
# rollback-k8s-secrets.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: oldSecretRef: OLD_SECRET_REF # Must match the previous oldSecretRef. newSecretRef: NEW_SECRET_REF # Must match the previous newSecretRef. 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_SECRET_REF:此值必須與您在單一區域輪替或多區域輪替程序中使用的輪替 YAML 檔案中 
oldSecretRef:的密鑰名稱相符。 - NEW_SECRET_REF:此值必須與您在單一區域輪替或多區域輪替程序中使用的輪替 YAML 檔案中 
newSecretRef:的密鑰名稱相符。 
 - 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.secret設為舊的密鑰名稱 (oldSecretRef)。cassandra: auth: secret: OLD_SECRET_REF