在 Harbor 中,專案是邏輯單位,用於整理及管理容器映像檔集合。可將相關構件分組,並對整個集合套用特定政策、存取控管和複製規則。必須先建立專案,才能將映像檔推送或提取至 Harbor。
事前準備
開始之前,您必須至少登入 Harbor UI 一次,透過 Harbor 登錄檔初始化身分。
必要的 IAM 角色
如要建立 Harbor 專案及管理映像檔命名空間,請向 IAM 專案管理員要求Harbor 專案建立者 (harbor-project-creator) 角色,以便在專案命名空間中建立、取得及監控 Harbor 專案。這個角色包含定義新映像檔命名空間所需的權限,可讓您為容器化應用程式建立安全性邊界。
建立 Harbor 專案
使用 GDC 控制台、gdcloud CLI 或 API 建立 Harbor 專案。
控制台
在 GDC 控制台中,按照下列步驟操作:
- 在導覽選單的「CI/CD」部分,點選「Harbor Container Registry」連結。
- 按一下「Create a Harbor project」(建立 Harbor 專案)。
- 輸入專案名稱。
- 選用:安全漏洞掃描功能預設為啟用。如要停用 Harbor 專案的自動安全漏洞掃描功能,請按一下「Enable vulnerability scanning for the project」(啟用專案的安全漏洞掃描功能) 切換鈕。詳情請參閱「掃描安全漏洞」。
- 點選「建立」。
- 系統會顯示確認訊息,表示專案已成功建立。
- 建立 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 欄位。
在可用區管理 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。詳情請參閱「掃描安全漏洞」。確認 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 PROJECTuser ... 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 服務記錄中找到該資源。
檢查受影響的
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 專案名稱。
如果輸出內容空白,表示未設定該欄位。
請與 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 使用者選單中顯示的名稱完全一致。確認已指派建立者:
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 登錄檔: