建立 Harbor 專案

在 Harbor 中,專案是邏輯單位,用於整理及管理容器映像檔集合。可將相關構件分組,並對整個集合套用特定政策、存取控管和複製規則。必須先建立專案,才能將映像檔推送或提取至 Harbor。

事前準備

開始之前,您必須至少登入 Harbor UI 一次,透過 Harbor 登錄檔初始化身分。

必要的 IAM 角色

如要建立 Harbor 專案及管理映像檔命名空間,請向 IAM 專案管理員要求Harbor 專案建立者 (harbor-project-creator) 角色,以便在專案命名空間中建立、取得及監控 Harbor 專案。這個角色包含定義新映像檔命名空間所需的權限,可讓您為容器化應用程式建立安全性邊界。

建立 Harbor 專案

使用 GDC 控制台、gdcloud CLI 或 API 建立 Harbor 專案。

控制台

在 GDC 控制台中,按照下列步驟操作:

  1. 在導覽選單的「CI/CD」部分,點選「Harbor Container Registry」連結。
  2. 按一下「Create a Harbor project」(建立 Harbor 專案)。
  3. 輸入專案名稱。
  4. 選用:安全漏洞掃描功能預設為啟用。如要停用 Harbor 專案的自動安全漏洞掃描功能,請按一下「Enable vulnerability scanning for the project」(啟用專案的安全漏洞掃描功能) 切換鈕。詳情請參閱「掃描安全漏洞」。
  5. 點選「建立」。
  6. 系統會顯示確認訊息,表示專案已成功建立。
  7. 建立 Harbor 專案後,請登入 Harbor UI,確認可以查看 Harbor 專案。

gdcloud

建立 Harbor 專案:

  gdcloud harbor harbor-projects create HARBOR_PROJECT \
    --project=PROJECT \
    --instance=INSTANCE

更改下列內容:

  • HARBOR_PROJECT:要建立的 Harbor 專案名稱。
  • PROJECT:GDC 專案的名稱。
  • INSTANCE:執行個體的名稱。

API

GDC 控制台和 gdcloud CLI 會將 Harbor 專案建立者設為您的使用者帳戶。使用 API 時,您必須自行設定 spec.creatorSubject 欄位。

  1. 在可用區管理 API 伺服器上建立 HarborInstanceProject 自訂資源。資源建立後,您就無法變更 creatorSubject 或 autoScan 欄位,因此請在建立前檢查這兩個值。

    kubectl --kubeconfig MANAGEMENT_API_SERVER create -f - <<EOF
    apiVersion: artifactregistry.gdc.goog/v1
    kind: HarborInstanceProject
    metadata:
      name: INSTANCE-HARBOR_PROJECT
      namespace: PROJECT
    spec:
      projectName: HARBOR_PROJECT
      harborInstanceRef:
        name: INSTANCE
      creatorSubject:
        apiGroup: rbac.authorization.k8s.io
        kind: User
        name: HARBOR_USERNAME
      autoScan: true
    EOF
    

    更改下列內容:

    • MANAGEMENT_API_SERVER:可用區管理 API 伺服器的 kubeconfig 檔案路徑。詳情請參閱「切換至可用區情境」。
    • INSTANCE:Harbor 登錄檔執行個體的名稱。
    • HARBOR_PROJECT:要建立的 Harbor 專案名稱。
    • PROJECT:包含 Harbor 登錄檔執行個體的 GDC 專案名稱。
    • HARBOR_USERNAME:您的 Harbor 使用者名稱,與登入後 Harbor UI 使用者選單中顯示的名稱完全相同。這位使用者會成為 Harbor 專案的 Harbor 專案管理員。請使用人員的使用者名稱,而非服務帳戶。詳情請參閱「事前準備」。

    autoScan 欄位會啟用自動安全漏洞掃描功能,掃描推送至專案的映像檔。如要停用自動掃描功能,請將其設為 false。詳情請參閱「掃描安全漏洞」。

  2. 確認 Harbor 專案已建立,且建立者已指派:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      get harborinstanceproject INSTANCE-HARBOR_PROJECT \
      -n PROJECT
    

    「PROJECTCREATEDSTATUS」欄會顯示 Created,「PROJECTSUBJECTASSIGNEDSTATUS」欄則會顯示 SubjectAssigned。

    如果「PROJECTSUBJECTASSIGNEDSTATUS」欄顯示「SubjectAssignError」,請查看條件訊息:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      describe harborinstanceproject INSTANCE-HARBOR_PROJECT \
      -n PROJECT
    

    user ... not found 訊息表示 creatorSubject 欄位中指定的使用者尚未登入 Harbor UI。Harbor 服務每 30 秒會重試一次,因此使用者登入後,狀態會變更為 SubjectAssigned。

修正沒有建立者的 Harbor 專案

如果貴組織任何專案中的 HarborInstanceProject 資源未設定 spec.creatorSubject 欄位,Harbor 服務就會停止處理貴組織 Harbor 資源的變更。症狀包括 Harbor 執行個體未準備就緒、新的 Harbor 專案維持無狀態,以及映像檔提取失敗並顯示 x509: certificate signed by unknown authority 錯誤。

如要修正這個問題,您必須在含有受影響資源的專案中,具備 Harbor 執行個體管理員 (harbor-instance-admin) 角色。如果您沒有這個角色,請要求具備該角色的使用者完成這些步驟。如果您不知道受影響的資源,請與基礎架構營運商 (IO) 聯絡,他們可以在 Harbor 服務記錄中找到該資源。

  1. 檢查受影響的 HarborInstanceProject 資源是否設定 spec.creatorSubject 欄位:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      get harborinstanceproject HARBOR_INSTANCE_PROJECT \
      -n PROJECT -o jsonpath='{.spec.creatorSubject}'
    

    更改下列內容:

    • MANAGEMENT_API_SERVER:可用區管理 API 伺服器的 kubeconfig 檔案路徑。詳情請參閱「切換至可用區情境」。
    • HARBOR_INSTANCE_PROJECT:HarborInstanceProject 資源的名稱。您從這個頁面的「API」分頁建立的資源會命名為 INSTANCE-HARBOR_PROJECT。
    • PROJECT:包含資源的 GDC 專案名稱。

    如果輸出內容空白,表示未設定該欄位。

  2. 請與 GDC 專案擁有者確認要指派為 Harbor 專案管理員的 Harbor 使用者名稱。spec.creatorSubject 欄位一經設定即無法變更,因此請先驗證使用者名稱,再將該欄位新增至每個受影響的資源:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      patch harborinstanceproject HARBOR_INSTANCE_PROJECT \
      -n PROJECT --type merge \
      -p '{"spec":{"creatorSubject":{"apiGroup":"rbac.authorization.k8s.io","kind":"User","name":"HARBOR_USERNAME"}}}'
    

    將 HARBOR_USERNAME 替換為要指派為 Harbor 專案管理員的使用者 Harbor 使用者名稱。這個角色可以刪除圖片及管理專案成員。使用者必須至少登入 Harbor UI 一次,且使用者名稱必須與 Harbor UI 使用者選單中顯示的名稱完全一致。

  3. 確認已指派建立者:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      get harborinstanceproject HARBOR_INSTANCE_PROJECT \
      -n PROJECT
    

    修正所有受影響的資源後,Harbor 服務會重新啟動,並在約 10 分鐘內恢復處理變更,PROJECTSUBJECTASSIGNEDSTATUS 欄則會顯示 SubjectAssigned。如果 15 分鐘後仍無法從 Harbor 提取映像檔,請與 IO 聯絡。將您修正的資源名稱和專案提供給 IO,以便 IO 檢查其他受影響的資源,並在必要時重新啟動 Harbor 服務。

後續步驟

建立 Harbor 專案後,請設定 Docker 和 Helm 用戶端,連線至 Harbor 登錄檔: