Accedi a Docker e Helm

Questa pagina descrive come accedere a Docker o Helm utilizzando l'helper per le credenziali di Managed Harbor Service (MHS) o i secret dell'interfaccia a riga di comando.

Le istanze del registry Harbor in Google Distributed Cloud (GDC) con air gap utilizzano Identity-Aware Proxy (IAP) per l'autenticazione. Puoi accedere all'istanza del registry Harbor dalla CLI Docker o Helm utilizzando uno dei seguenti metodi:

  • Helper per le credenziali MHS (docker-credential-mhs): utilizza la tua identità GDC autenticata per gestire automaticamente l'autenticazione IAP. Dopo aver eseguito l'accesso con la CLI gdcloud, docker-credential-mhs recupera la tua identità utente autenticata e verifica il tuo accesso con Harbor. Dopo la verifica, Harbor fornisce un token di breve durata a Docker o Helm, in modo che tu possa eseguire operazioni sul registry senza creare o gestire secret CLI separati.
  • Secret CLI: utilizza un secret CLI statico dal tuo profilo utente Harbor. Dopo aver eseguito l'accesso all'interfaccia web di Harbor utilizzando IAP per la prima volta, puoi recuperare il secret dell'interfaccia a riga di comando e utilizzarlo come password quando accedi dall'interfaccia a riga di comando di Docker o Helm. Questo metodo è disponibile solo con l'interfaccia utente di Harbor.

Prima di iniziare

Per configurare l'autenticazione Docker e Helm per le istanze del registry Harbor, devi avere l'helper per le credenziali MHS (docker-credential-mhs) installato nel tuo ambiente. L'helper per le credenziali è incluso per impostazione predefinita nel bundle della CLI gdcloud. Per saperne di più, consulta la panoramica di gdcloud CLI.

Ruoli IAM richiesti

Per configurare l'autenticazione per le istanze del registry Harbor, contatta l'amministratore del progetto IAM per richiedere il ruolo Harbor Instance Viewer (harbor-instance-viewer), che ti consente di ottenere, elencare e monitorare le istanze Harbor nello spazio dei nomi del progetto. Questo ruolo include le autorizzazioni necessarie per visualizzare i dettagli delle istanze Harbor esistenti in modo da poter recuperare gli URL del registry per l'autenticazione.

Accedi con l'helper per le credenziali MHS

Il modo in cui esegui l'autenticazione con docker-credential-mhs dipende dal tuo client CLI: puoi configurare Docker in modo che recuperi automaticamente le credenziali o recuperi le credenziali temporanee direttamente per accedere a Docker.

Accedi a Docker

Per eseguire l'autenticazione con Docker, segui questi passaggi:

  1. Accedi al server dell'API di gestione con la CLI gdcloud seguendo le istruzioni riportate in Accedi.

  2. Configura Docker per utilizzare l'helper per le credenziali 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}
    

    Sostituisci quanto segue:

  3. Segui le istruzioni riportate in Configura Docker per considerare attendibile la CA root di Harbor.

  4. (Facoltativo) Verifica che l'helper per le credenziali sia configurato correttamente controllando che la voce mhs sia stata aggiunta a ~/.docker/config.json:

    cat DOCKER_CONFIG_PATH
    

    Sostituisci DOCKER_CONFIG_PATH con il percorso del file di configurazione Docker, ad esempio ~/.docker/config.json.

    L'output è simile al seguente:

    {
        "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"
        }
    }
    

    Questo esempio mostra un output riuscito di "myinstance-e2e-test-user.org-1.zone1.google.gdch.test": "mhs".

  5. Configura il progetto tenant nell'interfaccia a riga di comando gdcloud:

    TENANT_PROJECT=PROJECT_NAME
    gdcloud config set project $TENANT_PROJECT
    

    Viene visualizzato il seguente output:

    Updated property [core/project].
    
  6. Identifica un progetto Harbor per cui disponi dell'accesso di gestione. Se non ne esiste uno, crea un progetto Harbor.

  7. Esegui operazioni Docker, ad esempio il push o il pull di un'immagine:

    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
    

    Un output riuscito è simile al seguente:

    # 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}/library/nginx:latest
    latest: Pulling from library/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
    

    Se l'operazione non va a buon fine, potresti visualizzare il seguente output:

    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
    

    In questo esempio, la sessione di autenticazione di GDC è scaduta e devi accedere di nuovo a GDC. Per saperne di più, consulta Accedi.

Accedi a Helm

Per eseguire l'autenticazione con Helm, segui questi passaggi:

  1. Dopo l'autenticazione con GDC, recupera le tue credenziali utente dall'helper delle credenziali:

    echo $REGISTRY | docker-credential-mhs get
    

    L'output è simile al seguente:

    {"Username":"tokenreview$fop-infrastructure-operator@example.com","Secret":"STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw"}
    
  2. Accedi all'interfaccia a riga di comando Helm con le credenziali. Quando ti viene chiesto di inserire le credenziali, utilizza quelle restituite dall'helper per le credenziali.

    helm registry login $REGISTRY
    Username: tokenreview$fop-infrastructure-operator@example.com
    Password: STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw
    

    Un output riuscito per questa operazione è simile al seguente:

    Login Succeeded
    

Accedi con i secret dell'interfaccia a riga di comando

Per accedere a Docker o Helm con i secret dell'interfaccia a riga di comando, segui questi passaggi:

  1. Accedi ad Harbor con un account utente IAP.
  2. Fai clic sul tuo nome utente e seleziona User Profile (Profilo utente).
  3. Per copiare il secret dell'interfaccia a riga di comando associato al tuo account, fai clic su Copia.
  4. (Facoltativo) Per visualizzare i pulsanti per generare automaticamente o creare manualmente un nuovo secret dell'interfaccia a riga di comando, fai clic su Altro nel tuo profilo utente.

  5. Se hai generato un nuovo secret dell'interfaccia a riga di comando, fai clic su Copia per copiarlo.

  6. Utilizza il secret dell'interfaccia a riga di comando come password quando accedi ad Harbor dall'interfaccia a riga di comando di Docker o Helm:

    docker login -u USERNAME -p CLI_SECRET HARBOR_INSTANCE_URL
    

    Sostituisci quanto segue:

    • USERNAME: il nome utente dell'account Harbor.
    • CLI_SECRET: il secret dell'interfaccia a riga di comando generato.
    • HARBOR_INSTANCE_URL: l'URL dell'istanza Harbor.

Passaggi successivi

Dopo aver eseguito l'accesso a Docker e Helm, il registry è connesso e puoi iniziare a utilizzarlo: