Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Questa pagina descrive come accedere a Docker o Helm utilizzando l'helper delle credenziali Managed Harbor Service (MHS) o i secret della CLI.
Per offrire flessibilità, Google Distributed Cloud (GDC) air-gapped fornisce due metodi per l'autenticazione con Docker e Helm dall'istanza del registro Harbor. Il primo metodo consiste nell'utilizzare l'helper delle credenziali del servizio Managed Harbor (MHS) e la tua identità GDC per accedere alla CLI Docker o Helm. Dopo l'autenticazione con GDC, puoi accedere al client Docker ed eseguire operazioni Docker senza dover creare o gestire segreti CLI separati in Harbor.
Il secondo metodo consiste nell'utilizzare i secret della CLI. Dopo l'autenticazione tramite Identity-Aware Proxy (IAP) e l'accesso all'interfaccia di Harbor per la prima volta, utilizza la CLI Docker o Helm per accedere a Harbor. Le CLI Docker e Helm non possono gestire il reindirizzamento per IAP, quindi Harbor fornisce un secret CLI da utilizzare per l'accesso da Docker o Helm. Questo metodo è disponibile solo quando Harbor utilizza l'autenticazione IAP.
Prima di iniziare
Per configurare l'autenticazione Docker e Helm per le istanze del registro Harbor, devi disporre di quanto segue:
L'helper per le credenziali MHS docker-credential-mhs installato nell'ambiente. L'helper delle credenziali è incluso per impostazione predefinita nel bundle gcloud CLI. Per saperne di più, consulta la panoramica di gcloud CLI.
Il ruolo di identità e accesso necessario. Chiedi all'amministratore IAM dell'organizzazione di concederti il ruolo Visualizzatore istanza Harbor (harbor-instance-viewer).
Accedere a Docker con la tua identità GDC
Utilizza l'helper per le credenziali MHS con la tua identità GDC per accedere alla CLI Docker. Per l'autenticazione con Docker:
Accedi al server dell'API Management con GDC CLI seguendo le istruzioni riportate in
Accedi.
Configura Docker per utilizzare l'assistente alle credenziali MHS docker-credential-mhs:
Un output riuscito per questa operazione è simile al seguente:
Login Succeeded
Accedere a Docker o Helm con i secret della CLI
Per accedere a Docker o Helm con i secret della CLI:
Accedi a Harbor con un account utente IAP.
Fai clic sul tuo nome utente e seleziona Profilo utente.
Per copiare il secret della CLI associato al tuo account, fai clic su content_copyCopia.
(Facoltativo) Per visualizzare i pulsanti per generare automaticamente o creare manualmente un nuovo secret CLI, fai clic sui puntini di sospensione more_horiz nel tuo profilo utente.
Se hai generato un nuovo segreto CLI, fai clic su content_copyCopia per copiarlo.
Ora puoi utilizzare il secret della CLI come password quando accedi a
Harbor dalla CLI Docker o Helm:
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Difficile da capire","hardToUnderstand","thumb-down"],["Informazioni o codice di esempio errati","incorrectInformationOrSampleCode","thumb-down"],["Mancano le informazioni o gli esempi di cui ho bisogno","missingTheInformationSamplesINeed","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-09-04 UTC."],[[["\u003cp\u003eThis document outlines two methods for authenticating with Docker and Helm for Harbor registry instances within Google Distributed Cloud (GDC) air-gapped environments.\u003c/p\u003e\n"],["\u003cp\u003eThe first method involves using the Managed Harbor Service (MHS) credential helper along with your GDC identity, enabling direct sign-in to the Docker or Helm CLI without managing separate secrets.\u003c/p\u003e\n"],["\u003cp\u003eThe second method utilizes CLI secrets generated within the Harbor interface, which are necessary because Docker and Helm CLIs do not support Identity-Aware Proxy (IAP) redirection.\u003c/p\u003e\n"],["\u003cp\u003eTo use the MHS credential helper method, you must have the \u003ccode\u003edocker-credential-mhs\u003c/code\u003e installed and the Harbor Instance Viewer role, after which you can sign into docker and perform operations such as pushing and pulling images.\u003c/p\u003e\n"],["\u003cp\u003eCLI secrets, used in the alternative method, can be copied from the user profile section in Harbor and are non-expiring unless manually rotated.\u003c/p\u003e\n"]]],[],null,["# Sign in to Docker and Helm\n\nThis page describes how to sign in to Docker or Helm using the Managed Harbor Service (MHS) credential helper or CLI secrets.\n\nTo provide flexibility, Google Distributed Cloud (GDC) air-gapped provides two methods to authenticate with Docker and Helm from your Harbor registry instance. The first method is using the Managed Harbor Service (MHS) credential helper and your GDC identity to sign in to the Docker or Helm CLI. After authenticating with GDC, you can sign in to the Docker client and perform Docker operations, without having to create or manage separate CLI secrets in Harbor.\n\nThe second method is using CLI secrets. After you authenticate using Identity-Aware Proxy (IAP) and sign in to the Harbor interface for the first time, use the Docker or Helm CLI to access Harbor. The Docker and Helm CLIs cannot handle redirection for IAP, so Harbor provides a CLI secret to use when signing in from Docker or Helm. This method is only available when Harbor uses IAP authentication.\n\nBefore you begin\n----------------\n\nTo configure Docker and Helm authentication for Harbor registry instances, you must have the following:\n\n- The MHS credential helper `docker-credential-mhs` installed in the environment. The credential helper is included by default in the gdcloud CLI bundle. For more information, see [gdcloud CLI overview](/distributed-cloud/hosted/docs/latest/gdch/resources/gdcloud-overview).\n- The necessary identity and access role. Ask your Organization IAM Admin to grant you the Harbor Instance Viewer (`harbor-instance-viewer`) role.\n\nSign in to Docker with your GDC identity\n----------------------------------------\n\nUse the MHS credential helper with your GDC identity to sign into the Docker\nCLI. To authenticate with Docker, follow these steps:\n\n1. Sign in to the Management API server with GDC CLI by following the\n instructions in\n [Sign in](/distributed-cloud/hosted/docs/latest/gdch/platform/pa-user/iam/sign-in).\n\n2. Configure Docker to use the MHS credential helper `docker-credential-mhs`:\n\n TENANT_PROJECT=\u003cvar translate=\"no\"\u003ePROJECT_NAME\u003c/var\u003e\n HARBOR_INSTANCE_NAME=\u003cvar translate=\"no\"\u003eHARBOR_INSTANCE_NAME\u003c/var\u003e\n REGISTRY=$(kubectl get harborinstance $HARBOR_INSTANCE_NAME -n $TENANT_PROJECT -o jsonpath='{.status.url}' | sed s#https://##)\n\n docker-credential-mhs configure-docker --registries=${REGISTRY}\n\n Replace the following:\n - \u003cvar translate=\"no\"\u003ePROJECT_NAME\u003c/var\u003e: the name of your tenant project. This is the same project name you provided when [creating your Harbor instance](/distributed-cloud/hosted/docs/latest/gdch/platform-application/pa-ao-operations/create-harbor-instances#create-a-harbor-registry-instance).\n - \u003cvar translate=\"no\"\u003eHARBOR_INSTANCE_NAME\u003c/var\u003e: the name of the Harbor instance that is created in [Create Harbor registry instances](/distributed-cloud/hosted/docs/latest/gdch/platform-application/pa-ao-operations/create-harbor-instances).\n3. Follow the instructions in\n [Configure Docker to trust the Harbor root CA](/distributed-cloud/hosted/docs/latest/gdch/platform-application/pa-ao-operations/configure-docker-trust#configure-docker-to-trust-harbor-root-ca).\n\n4. Optional: Verify that the credential helper is successfully configured\n by verifying the `mhs` entry is added to `~/.docker/config.json`:\n\n cat \u003cvar translate=\"no\"\u003eDOCKER_CONFIG_PATH\u003c/var\u003e\n\n Replace \u003cvar translate=\"no\"\u003eDOCKER_CONFIG_PATH\u003c/var\u003e with the path to your docker config file. For\n example, `~/.docker/config.json.`\n\n The output is similar to the following: \n\n {\n \"auths\": {\n \"10.200.0.1\": {\n \"auth\": \"YWRtaW46YWRtaW4=\"\n },\n \"10.200.16.5:10443\": {\n \"auth\": \"YWRtaW46ZEROVVJCVWE1a1FBcE4xQQ==\"\n }\n },\n \"credHelpers\": {\n \"asia.gcr.io\": \"gcloud\",\n \"eu.gcr.io\": \"gcloud\",\n \"gcr.io\": \"gcloud\",\n \"marketplace.gcr.io\": \"gcloud\",\n \"myinstance-e2e-test-user.org-1.zone1.google.gdch.test\": \"mhs\",\n \"staging-k8s.gcr.io\": \"gcloud\",\n \"us-central1-docker.pkg.dev\": \"gcloud\",\n \"us.gcr.io\": \"gcloud\"\n }\n }\n\n This example shows a successful output of `\"myinstance-e2e-test-user.org-1.zone1.google.gdch.test\": \"mhs\"`.\n5. Configure the tenant project in `gdcloud`:\n\n TENANT_PROJECT=\u003cvar translate=\"no\"\u003ePROJECT_NAME\u003c/var\u003e\n gdcloud config set project $TENANT_PROJECT\n\n The following output is shown: \n\n Updated property [core/project].\n\n6. Identify a Harbor project that you have management access to.\n [Create a Harbor project](/distributed-cloud/hosted/docs/latest/gdch/platform-application/pa-ao-operations/create-harbor-projects)\n if one does not exist.\n\n7. Perform Docker operations, such as an image push or pull:\n\n TENANT_PROJECT=\u003cvar translate=\"no\"\u003ePROJECT_NAME\u003c/var\u003e\n HARBOR_INSTANCE_NAME=\u003cvar translate=\"no\"\u003eHARBOR_INSTANCE_NAME\u003c/var\u003e\n REGISTRY=$(kubectl get harborinstance $HARBOR_INSTANCE_NAME -n $TENANT_PROJECT -o jsonpath='{.status.url}' | sed s#https://##)\n HARBOR_PROJECT=\u003cvar translate=\"no\"\u003eHARBOR_PROJECT_NAME\u003c/var\u003e\n\n # Push image\n docker pull nginx\n docker tag nginx ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest\n docker push ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest\n\n # Pull image\n docker pull ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest\n\n A successful output is similar to the following: \n\n # Push image\n root@gpc-adhoc-70846130vm-bootstrapper-zone1:~# docker push ${REGISTRY}/harbor-project/nginx:latest\n The push refers to repository [myinstance-e2e-test-user.org-1.zone1.google.gdch.test/harbor-project/nginx]\n e4e9e9ad93c2: Pushed\n 6ac729401225: Pushed\n 8ce189049cb5: Pushed\n 296af1bd2844: Pushed\n 63d7ce983cd5: Pushed\n b33db0c3c3a8: Pushed\n 98b5f35ea9d3: Pushed\n latest: digest: sha256:7ba542bde95e6523a4b126f610553e3657b8108bc3175596ee7e911ae1219bfc size: 1778\n\n # Pull image\n root@gpc-adhoc-70846130vm-bootstrapper-zone1:~# docker pull ${REGISTRY}/harbor-project/nginx:latest\n latest: Pulling from harbor-project/nginx\n Digest: sha256:7ba542bde95e6523a4b126f610553e3657b8108bc3175596ee7e911ae1219bfc\n Status: Image is up to date for myinstance-e2e-test-user.org-1.zone1.google.gdch.test/harbor-project/nginx:latest\n\n If the operation is unsuccessful, you might see the following output: \n\n 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\n\n In this example, the GDC authentication session has expired and you must sign\n in to GDC again. For more information, see\n [Sign in](/distributed-cloud/hosted/docs/latest/gdch/platform/pa-user/iam/sign-in).\n\nSign into Helm with your GDC identity\n-------------------------------------\n\nUse the MHS credential helper with your GDC identity to sign into the Helm CLI.\n\nTo authenticate with Helm, follow these steps:\n\n1. After authenticating with GDC, retrieve your user credentials from the\n credential helper:\n\n echo $REGISTRY | docker-credential-mhs get\n\n The output is similar to the following: \n\n {\"Username\":\"tokenreview$fop-infrastructure-operator@example.com\",\"Secret\":\"STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw\"}\n\n2. Sign in to the Helm CLI with the credentials. When prompted to enter the\n credentials, use the credentials returned by the credential helper.\n\n helm registry login $REGISTRY\n Username: tokenreview$fop-infrastructure-operator@example.com\n Password: STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw\n\n A successful output for this operation looks like the following: \n\n Login Succeeded\n\nSign in to Docker or Helm with CLI secrets\n------------------------------------------\n\nTo sign in to Docker or Helm with CLI secrets, follow these steps:\n\n1. Sign in to Harbor with an IAP user account.\n2. Click your username and select **User Profile**.\n3. To copy the CLI secret associated with your account, click content_copy **Copy**.\n4. Optional: To display buttons for\n automatically generating or manually creating a new CLI secret, click the more_horiz ellipses in your user profile.\n\n | **Note:** A user can only have one CLI secret. When a new secret is generated or created, the old secret becomes invalid.\n5. If you generated a new CLI secret, click content_copy **Copy** to copy it.\n\n6. You can now use your CLI secret as the password when signing in to\n Harbor from the Docker or Helm CLI:\n\n docker login -u \u003cvar translate=\"no\"\u003eUSERNAME\u003c/var\u003e -p \u003cvar translate=\"no\"\u003eCLI_SECRET\u003c/var\u003e \u003cvar translate=\"no\"\u003eHARBOR_INSTANCE_URL\u003c/var\u003e\n\nReplace the following:\n\n- \u003cvar translate=\"no\"\u003eUSERNAME\u003c/var\u003e: the Harbor account username\n- \u003cvar translate=\"no\"\u003eCLI_SECRET\u003c/var\u003e: the generated CLI secret.\n- \u003cvar translate=\"no\"\u003eHARBOR_INSTANCE_URL\u003c/var\u003e: the URL of the Harbor instance.\n\n| **Note:** The CLI secret does not expire, unless you manually rotate it. The CLI secret is not associated with the user identity token. Signing out from Harbor or the GDC console does not revoke the CLI secret."]]