在 Kubernetes 密鑰中輪替 Cassandra 憑證

在 Kubernetes Secret 中輪替 Cassandra Secret

這個程序說明如何在叢集的 Kubernetes 密鑰中輪替 Cassandra 憑證。如要在 Hashicorp Vault 中輪替憑證,請參閱「在 Hashicorp Vault 中輪替 Cassandra 憑證」。

這個程序會自動執行並觸發三項工作,讓您輪替用於正式版 Apigee Hybrid 服務的 Cassandra 憑證,且不會造成停機:

  • 輪替使用者憑證
  • 復原輪替
  • 清除舊憑證和新憑證

在 Kubernetes Secret 中輪替 Cassandra Secret

有六組 Cassandra 憑證 (使用者名稱 + 密碼) 可以輪替:

  • 預設*
  • 管理員
  • DDL
  • DML
  • JMX
  • Jolokia

為輪替憑證做好準備

如要執行這些步驟,您必須具備在叢集中執行 kubectl apply -f 的權限。

  1. 備份 Cassandra 資料庫。這項備份作業可確保您能復原輪替前的憑證。請參閱 Cassandra 備份總覽
  2. 確認叢集處於正常運作狀態、所有 Apigee 資源都在執行中,且沒有待處理的狀態變更。

單一區域憑證輪替

  1. 在 Apigee 命名空間中建立新的 Kubernetes 密鑰,其中包含要輪換的 Cassandra 使用者憑證,請按照「在 Kubernetes 密鑰中設定使用者名稱和密碼」操作。
  2. 執行輪替前檢查。
    1. 使用下列範本建立新的 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_REFapigeedatastore 目前使用的密鑰名稱。您可以使用下列指令找出這項資訊:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF:在上一個步驟中建立的密鑰名稱。
    2. 套用輪替 YAML 檔案,觸發輪替前檢查作業:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 查看工作狀態,並等待工作完成。
      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
      
  3. 輪替前檢查作業完成後,請執行輪替:
    1. 在輪替 YAML 檔案中進行下列變更:
      • metadata.name 變更為表示這不是預先檢查的名稱,例如:sr-1
      • spec.precheck 設為 false
      • spec.rotationId 變更為新的 ID,例如:rot-1
    2. 再次套用檔案即可旋轉。
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. 輪替作業完成後,請驗證流量是否仍正常流動。
  5. 驗證流量後,請清除舊密鑰。
    1. 在輪替 YAML 檔案中進行下列變更:
      • metadata.name 變更為表示這是清除工作的名稱,例如:sr-1-cleanup
      • spec.cassandra.jobType 設為 CLEANUP
      • 確認 spec.precheck 已設為 false
    2. 再次套用檔案,執行清除作業。
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 查看工作狀態,並等待工作完成。
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      清除作業完成後,輪替程序即告完成。

  6. 更新覆寫檔案,並將 cassandra.auth.secret 設為新的密鑰名稱 (newSecretRef)。
    cassandra:
      auth:
        secret: NEW_SECRET_REF
  7. 備份 Cassandra 資料庫。這項備份作業可確保您在憑證輪替後仍能還原資料。
  8. 刪除舊的 Cassandra 憑證密鑰。

多區域憑證輪替

  1. 在每個區域中,於 Apigee 命名空間建立新的 Kubernetes 密鑰,用來保存要輪替的 Cassandra 使用者憑證,請按照「在 Kubernetes 密鑰中設定使用者名稱和密碼」一文的說明操作。

    每個區域的憑證必須相同。

  2. 執行輪替前檢查。
    1. 使用下列範本建立新的 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_REFapigeedatastore 目前使用的密鑰名稱。您可以使用下列指令找出這項資訊:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF:在上一個步驟中建立的密鑰名稱。
    2. 在第一個區域中,套用輪替 YAML 檔案,觸發輪替前檢查作業:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 查看工作狀態,並等待工作完成。
      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
      
  3. 輪替前檢查作業完成後,請在相同區域執行輪替:
    1. 在輪替 YAML 檔案中進行下列變更:
      • metadata.name 變更為表示這不是預先檢查的名稱,例如:sr-1
      • spec.precheck 設為 false
      • spec.rotationId 變更為新的 ID,例如:rot-1
    2. 再次套用檔案即可旋轉。
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. 輪替作業完成後,請驗證流量是否仍正常流動。
  5. 針對其餘區域重複執行輪替步驟。
  6. 驗證流量後,請清除舊密鑰。您只需要在單一區域執行清理作業。選擇哪個區域都沒關係。
    1. 在輪替 YAML 檔案中進行下列變更:
      • metadata.name 變更為表示這是清除工作的名稱,例如:sr-1-cleanup
      • spec.cassandra.jobType 設為 CLEANUP
      • 確認 spec.precheck 已設為 false
    2. 再次套用檔案,執行清除作業。
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 查看工作狀態,並等待工作完成。
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      清除作業完成後,輪替程序即告完成。

  7. 更新覆寫檔案,並將 cassandra.auth.secret 設為新的密鑰名稱 (newSecretRef)。
    cassandra:
      auth:
        secret: NEW_SECRET_REF
  8. 備份 Cassandra 資料庫。這項備份作業可確保您在憑證輪替後仍能還原資料。
  9. 刪除舊的 Cassandra 憑證密鑰。

復原輪播

請在每個區域執行下列步驟。

  1. 使用下列範本建立新的 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: 的密鑰名稱相符。
  2. 套用復原:
    kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
    
  3. 查看工作狀態,並等待工作完成。
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    
  4. 回滾完成後,請確認流量是否仍正常流動。
  5. 流量正常流動後,在每個剩餘區域重複執行回溯程序。
  6. 完成回溯並確認流量仍正常流動後,即可開始清理程序。您只需要在單一區域執行清理作業。選擇哪個區域都沒關係。

    在輪替 YAML 檔案中進行下列變更:

    • metadata.name 變更為表示這是清除工作的名稱,例如:sr-1-cleanup-rollback
    • spec.cassandra.jobType 變更為 CLEANUP_ROLLBACK
  7. 套用檔案來觸發清除作業:
    kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
    
  8. 查看工作狀態,並等待工作完成。
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    

    清理作業完成後,即代表回溯程序完成。

  9. 更新覆寫檔案,並將 cassandra.auth.secret 設為舊密鑰名稱 (oldSecretRef)。
    cassandra:
      auth:
        secret: OLD_SECRET_REF