Accedi a Docker e Helm

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:

  1. Accedi al server dell'API Management con GDC CLI seguendo le istruzioni riportate in Accedi.

  2. Configura Docker per utilizzare l'assistente alle 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 in Configurare Docker per considerare attendibile la CA radice di Harbor.

  4. (Facoltativo) Verifica che l'helper delle credenziali sia configurato correttamente verificando che la voce mhs sia 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 in gdcloud:

    TENANT_PROJECT=PROJECT_NAME
    gdcloud config set project $TENANT_PROJECT
    

    Viene visualizzato l'output seguente:

    Updated property [core/project].
    
  6. Identifica un progetto Harbor a cui hai accesso amministrativo. Crea un progetto Harbor se non ne esiste uno.

  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}/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
    

    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 GDC è scaduta e devi accedere di nuovo a GDC. Per ulteriori informazioni, vedi Accedere.

Accedere a Helm con la tua identità GDC

Utilizza l'helper per le credenziali MHS con la tua identità GDC per accedere alla CLI Helm.

Per l'autenticazione con Helm, segui questi passaggi:

  1. Dopo l'autenticazione con GDC, recupera le credenziali utente dall'helper per le 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 alla CLI Helm con le credenziali. Quando ti viene chiesto di inserire le credenziali, utilizza quelle restituite dall'helper delle 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
    

Accedere a Docker o Helm con i secret della CLI

Per accedere a Docker o Helm con i secret della CLI:

  1. Accedi a Harbor con un account utente IAP.
  2. Fai clic sul tuo nome utente e seleziona Profilo utente.
  3. Per copiare il secret della CLI associato al tuo account, fai clic su Copia.
  4. (Facoltativo) Per visualizzare i pulsanti per generare automaticamente o creare manualmente un nuovo secret CLI, fai clic sui puntini di sospensione nel tuo profilo utente.

  5. Se hai generato un nuovo segreto CLI, fai clic su Copia per copiarlo.

  6. Ora puoi utilizzare il secret della CLI come password quando accedi a Harbor dalla CLI 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 della CLI generato.
  • HARBOR_INSTANCE_URL: l'URL dell'istanza Harbor.