本頁說明如何使用 Managed Harbor Service (MHS) 憑證輔助程式或 CLI 密鑰登入 Docker 或 Helm。
為提供彈性,Google Distributed Cloud (GDC) 實體隔離方案提供兩種方法,可從 Harbor 登錄檔執行個體向 Docker 和 Helm 進行驗證。第一種方法是使用 Managed Harbor Service (MHS) 憑證輔助程式和 GDC 身分,登入 Docker 或 Helm CLI。透過 GDC 進行驗證後,您就能登入 Docker 用戶端並執行 Docker 作業,不必在 Harbor 中建立或管理個別的 CLI 密鑰。
第二種方法是使用 CLI 密鑰。使用 Identity-Aware Proxy (IAP) 驗證身分並首次登入 Harbor 介面後,即可使用 Docker 或 Helm CLI 存取 Harbor。Docker 和 Helm CLI 無法處理 IAP 的重新導向,因此 Harbor 提供 CLI 密鑰,供您從 Docker 或 Helm 登入時使用。只有在 Harbor 使用 IAP 驗證時,才能使用這個方法。
事前準備
如要為 Harbor 登錄檔執行個體設定 Docker 和 Helm 驗證,您必須具備下列條件:
- 環境中已安裝 MHS 憑證輔助程式
docker-credential-mhs
。憑證輔助程式預設會納入 gdcloud CLI 套件。詳情請參閱 gcloud CLI 總覽。 - 必要的身分與存取權角色。請要求機構 IAM 管理員授予您 Harbor 執行個體檢視者 (
harbor-instance-viewer
) 角色。
使用 GDC 身分登入 Docker
使用 MHS 憑證輔助程式和 GDC 身分,登入 Docker CLI。如要使用 Docker 進行驗證,請按照下列步驟操作:
按照「登入」一文中的操作說明,使用 GDC CLI 登入 Management API 伺服器。
將 Docker 設定為使用 MHS 憑證輔助程式
docker-credential-mhs
:TENANT_PROJECT=PROJECT_NAME HARBOR_INSTANCE_NAME=HARBOR_INSTANCE_NAME REGISTRY=$(kubectl get harborinstance $HARBOR_INSTANCE_NAME -n $TENANT_PROJECT -o jsonpath='{.status.url}' | sed s#https://##) docker-credential-mhs configure-docker --registries=${REGISTRY}
更改下列內容:
PROJECT_NAME
:租戶專案的名稱。這個名稱與建立 Harbor 執行個體時提供的專案名稱相同。HARBOR_INSTANCE_NAME
:在「建立 Harbor 登錄檔執行個體」中建立的 Harbor 執行個體名稱。
按照「設定 Docker 以信任 Harbor 根 CA」一文中的操作說明進行設定。
選用:確認憑證輔助程式已成功設定,方法是驗證
mhs
項目是否已新增至~/.docker/config.json
:cat DOCKER_CONFIG_PATH
請將
DOCKER_CONFIG_PATH
替換為 Docker 設定檔的路徑。例如:~/.docker/config.json.
輸出結果會與下列內容相似:
{ "auths": { "10.200.0.1": { "auth": "YWRtaW46YWRtaW4=" }, "10.200.16.5:10443": { "auth": "YWRtaW46ZEROVVJCVWE1a1FBcE4xQQ==" } }, "credHelpers": { "asia.gcr.io": "gcloud", "eu.gcr.io": "gcloud", "gcr.io": "gcloud", "marketplace.gcr.io": "gcloud", "myinstance-e2e-test-user.org-1.zone1.google.gdch.test": "mhs", "staging-k8s.gcr.io": "gcloud", "us-central1-docker.pkg.dev": "gcloud", "us.gcr.io": "gcloud" } }
這個範例顯示
"myinstance-e2e-test-user.org-1.zone1.google.gdch.test": "mhs"
的成功輸出內容。在
gdcloud
中設定租戶專案:TENANT_PROJECT=PROJECT_NAME gdcloud config set project $TENANT_PROJECT
畫面會顯示以下輸出內容:
Updated property [core/project].
找出您具有管理存取權的 Harbor 專案。 如果沒有 Harbor 專案,請建立專案。
執行 Docker 作業,例如推送或提取映像檔:
TENANT_PROJECT=PROJECT_NAME HARBOR_INSTANCE_NAME=HARBOR_INSTANCE_NAME REGISTRY=$(kubectl get harborinstance $HARBOR_INSTANCE_NAME -n $TENANT_PROJECT -o jsonpath='{.status.url}' | sed s#https://##) HARBOR_PROJECT=HARBOR_PROJECT_NAME # Push image docker pull nginx docker tag nginx ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest docker push ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest # Pull image docker pull ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest
成功輸出結果會與下列內容相似:
# Push image root@gpc-adhoc-70846130vm-bootstrapper-zone1:~# docker push ${REGISTRY}/harbor-project/nginx:latest The push refers to repository [myinstance-e2e-test-user.org-1.zone1.google.gdch.test/harbor-project/nginx] e4e9e9ad93c2: Pushed 6ac729401225: Pushed 8ce189049cb5: Pushed 296af1bd2844: Pushed 63d7ce983cd5: Pushed b33db0c3c3a8: Pushed 98b5f35ea9d3: Pushed latest: digest: sha256:7ba542bde95e6523a4b126f610553e3657b8108bc3175596ee7e911ae1219bfc size: 1778 # Pull image root@gpc-adhoc-70846130vm-bootstrapper-zone1:~# docker pull ${REGISTRY}/harbor-project/nginx:latest latest: Pulling from harbor-project/nginx Digest: sha256:7ba542bde95e6523a4b126f610553e3657b8108bc3175596ee7e911ae1219bfc Status: Image is up to date for myinstance-e2e-test-user.org-1.zone1.google.gdch.test/harbor-project/nginx:latest
如果作業失敗,您可能會看到下列輸出內容:
E1025 19:21:39.322290 1273587 get.go:24] failed to get user name: user is not logged in or login expired, please login again
在本例中,GDC 驗證工作階段已過期,您必須重新登入 GDC。詳情請參閱「登入」。
使用 GDC 身分登入 Helm
使用 MHS 憑證輔助程式和 GDC 身分登入 Helm CLI。
如要使用 Helm 進行驗證,請按照下列步驟操作:
使用 GDC 驗證後,從憑證輔助程式擷取使用者憑證:
echo $REGISTRY | docker-credential-mhs get
輸出結果會與下列內容相似:
{"Username":"tokenreview$fop-infrastructure-operator@example.com","Secret":"STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw"}
使用憑證登入 Helm CLI。系統提示輸入憑證時,請使用憑證輔助程式傳回的憑證。
helm registry login $REGISTRY Username: tokenreview$fop-infrastructure-operator@example.com Password: STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw
這項作業的成功輸出內容如下所示:
Login Succeeded
使用 CLI 密鑰登入 Docker 或 Helm
如要使用 CLI 密鑰登入 Docker 或 Helm,請按照下列步驟操作:
- 使用 IAP 使用者帳戶登入 Harbor。
- 按一下使用者名稱,然後選取「使用者設定檔」。
- 如要複製與帳戶相關聯的 CLI 密鑰,請按一下 「複製」。
選用:如要顯示自動產生或手動建立新 CLI 密鑰的按鈕,請按一下使用者設定檔中的
橢圓形。如果產生新的 CLI 密鑰,請按一下「複製」
進行複製。現在使用 Docker 或 Helm CLI 登入 Harbor 時,可以將 CLI 密碼當做密碼:
docker login -u USERNAME -p CLI_SECRET HARBOR_INSTANCE_URL
更改下列內容:
USERNAME
:Harbor 帳戶使用者名稱CLI_SECRET
:產生的 CLI 密碼。HARBOR_INSTANCE_URL
:Harbor 執行個體的網址。