升級套件驗證憑證

本文說明如何升級 Google Distributed Cloud (GDC) 無網路連線裝置中,用於套件驗證的根憑證授權單位 (CA)。

GDC 套件驗證會使用根憑證授權單位 (CA) 驗證發布金鑰憑證。如果發布通知要求升級,或在系統升級期間看到警告訊息,就必須升級這個根 CA。

事前準備

如要升級套件驗證憑證,您必須具備必要的身份和存取權角色:

  • 確認您具備 harbor-system/package-validation-root-certs ConfigMap 的寫入權限。
  • 請安全性管理員授予您「升級 Debugger」角色 (upgrade-debugger-cp)。

確認是否需要升級憑證

執行作業前,請先比較叢集中的有效 ConfigMap 與升級套件中的最新暫存根憑證,確認是否需要升級套件驗證憑證:

  1. 設定 KUBECONFIG 環境變數:

    $ KUBECONFIG=PATH_TO_KUBECONFIG_FILE
    

    PATH_TO_KUBECONFIG_FILE 替換為您在根管理員叢集中執行 gdcloud auth login 時取得的 kubeconfig 檔案路徑

  2. 比較目前的信任錨點與最新信任錨點,判斷是否需要升級。系統會將 ConfigMap 的資料 harbor-system/package-validation-root-certs 與本機信任錨點進行比較:

    $ CURRENT_TRUST_ANCHOR=$(kubectl  --kubeconfig=$KUBECONFIG get cm package-validation-root-certs -n harbor-system -o jsonpath='{.data.ca\.crt}')
    
    $ LATEST_TRUST_ANCHOR=$(cat /root/release/staging_root_ca_certificate.crt)
    
    $ diff <( echo "$CURRENT_TRUST_ANCHOR" ) <( echo "$LATEST_TRUST_ANCHOR" ) && echo trust anchors are same  || echo trust anchors are different, upgrade required!
    

升級憑證

如果需要升級,請更新根管理叢集 harbor-system/package-validation-root-certs 中的 ConfigMap 物件。您必須擁有 ConfigMap 的寫入權限,才能完成這項工作。

  1. 設定 KUBECONFIG 環境變數:

    $ KUBECONFIG=PATH_TO_KUBECONFIG_FILE
    

    PATH_TO_KUBECONFIG_FILE 替換為您在根管理員叢集中執行 gdcloud auth login 時取得的 kubeconfig 檔案路徑

  2. 建立下列變數並指派值:

    USERNAME=USER_NAME #IO
    TARGET_FOLDER=/tmp/${USERNAME}
    OUTPUT="${TARGET_FOLDER}/package-validation-root-certs.yaml"
    LATEST_TRUST_ANCHOR_CA_FILE=/root/release/staging_root_ca_certificate.crt
    CONFIGMAP_NAME=package-validation-root-certs
    NAMESPACE=harbor-system
    

    USER_NAME 替換為 IO 使用者名稱。

  3. 建立目標資料夾,用於存放憑證升級程序產生的輸出檔案:

    mkdir -p "${TARGET_FOLDER}"
    
  4. 取得目前的信任錨點,並儲存在本機暫存檔案中:

    CURRENT_TRUST_ANCHOR=$(kubectl  --kubeconfig=$KUBECONFIG get configmap "${CONFIGMAP_NAME}" -n "${NAMESPACE}" -o jsonpath="{.data.ca\.crt}" )
    CURRENT_TRUST_ANCHOR_CA_FILE=$(mktemp)
    echo "$CURRENT_TRUST_ANCHOR" > "${CURRENT_TRUST_ANCHOR_CA_FILE}"
    
  5. 產生更新後的信任錨點檔案:

    cat <<EOF  > "${OUTPUT}"
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ${CONFIGMAP_NAME}
      namespace: ${NAMESPACE}
    data:
      ca.crt: |
    $(sed 's/^/    /' "${LATEST_TRUST_ANCHOR_CA_FILE}")
    $(sed 's/^/    /' "${CURRENT_TRUST_ANCHOR_CA_FILE}")
    EOF
    
  6. 確認信任錨點已正確更新:

    信任錨點必須包含目前和最新的信任錨點憑證。

    $ cat "${OUTPUT}"
    apiVersion: v1
    data:
      ca.crt: |
        -----BEGIN CERTIFICATE-----
        (certificate content)
        -----END CERTIFICATE-----
        -----BEGIN CERTIFICATE-----
        (certificate content)
        -----END CERTIFICATE-----
        (other certificate)
    kind: ConfigMap
    metadata:
      name: package-validation-root-certs
      namespace: harbor-system
    
  7. 使用 kubectl 套用新設定:

      kubectl --kubeconfig=$KUBECONFIG apply -f ${OUTPUT}
    
  8. 確認新套用的 ca.crt 位於 ConfigMap 內:

      kubectl --kubeconfig=$KUBECONFIG describe configmap package-validation-root-certs -n harbor-system
    

這會負責升級 package-validation-root-cert 中的新憑證。