Bei Docker und Helm anmelden

Auf dieser Seite wird beschrieben, wie Sie sich mit dem Credential Helper des Managed Harbor Service (MHS) oder mit CLI-Secrets bei Docker oder Helm anmelden.

Harbor-Registry-Instanzen in Google Distributed Cloud (GDC) mit Air Gap verwenden Identity-Aware Proxy (IAP) zur Authentifizierung. Sie können sich über die Docker- oder Helm-Befehlszeile mit einer der folgenden Methoden in Ihrer Harbor-Registry-Instanz anmelden:

  • MHS-Anmeldedaten-Hilfsprogramm (docker-credential-mhs): Verwendet Ihre authentifizierte GDC-Identität, um die IAP-Authentifizierung automatisch zu verarbeiten. Nachdem Sie sich mit der gdcloud CLI angemeldet haben, ruft docker-credential-mhs Ihre authentifizierte Nutzeridentität ab und prüft Ihren Zugriff mit Harbor. Nach der Überprüfung stellt Harbor Docker oder Helm ein kurzlebiges Token zur Verfügung, damit Sie Registry-Vorgänge ausführen können, ohne separate CLI-Secrets erstellen oder verwalten zu müssen.
  • CLI-Secrets: Verwendet ein statisches CLI-Secret aus Ihrem Harbor-Nutzerprofil. Nachdem Sie sich zum ersten Mal über IAP in der Harbor-Weboberfläche angemeldet haben, können Sie Ihr CLI-Secret abrufen und es als Passwort verwenden, wenn Sie sich über die Docker- oder Helm-CLI anmelden. Diese Methode ist nur mit der Harbor-UI verfügbar.

Hinweis

Wenn Sie die Docker- und Helm-Authentifizierung für Harbor-Registry-Instanzen konfigurieren möchten, muss der MHS-Credential Helper (docker-credential-mhs) in Ihrer Umgebung installiert sein. Der Credential Helper ist standardmäßig im gdcloud CLI-Bundle enthalten. Weitere Informationen finden Sie unter gdcloud CLI – Übersicht.

Erforderliche IAM-Rollen

Wenn Sie die Authentifizierung für Harbor-Registry-Instanzen konfigurieren möchten, wenden Sie sich an Ihren IAM-Projektadministrator, um die Rolle Harbor Instance Viewer (harbor-instance-viewer) anzufordern. Mit dieser Rolle können Sie Harbor-Instanzen im Projekt-Namespace abrufen, auflisten und beobachten. Diese Rolle enthält die erforderlichen Berechtigungen, um die Details vorhandener Harbor-Instanzen aufzurufen, damit Sie die Registry-URLs für die Authentifizierung abrufen können.

Mit dem MHS-Credential Helper anmelden

Wie Sie sich bei docker-credential-mhs authentifizieren, hängt von Ihrem CLI-Client ab: Sie können Docker so konfigurieren, dass Anmeldedaten automatisch abgerufen werden, oder temporäre Anmeldedaten direkt abrufen, um sich bei Docker anzumelden.

In Docker anmelden

So authentifizieren Sie sich bei Docker:

  1. Melden Sie sich mit der gdcloud CLI beim Management API-Server an. Folgen Sie dazu der Anleitung unter Anmelden.

  2. Konfigurieren Sie Docker für die Verwendung des MHS-Credential Helpers 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}
    

    Ersetzen Sie Folgendes:

  3. Folgen Sie der Anleitung unter Docker so konfigurieren, dass der Harbor-Root-CA vertraut wird.

  4. Optional: Prüfen Sie, ob der Credential Helper erfolgreich konfiguriert wurde. Dazu muss der Eintrag mhs in ~/.docker/config.json enthalten sein:

    cat DOCKER_CONFIG_PATH
    

    Ersetzen Sie DOCKER_CONFIG_PATH durch den Pfad zu Ihrer Docker-Konfigurationsdatei, z. B. ~/.docker/config.json.

    Die Ausgabe sieht etwa so aus:

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

    Dieses Beispiel zeigt eine erfolgreiche Ausgabe von "myinstance-e2e-test-user.org-1.zone1.google.gdch.test": "mhs".

  5. Konfigurieren Sie das Mandantenprojekt in der gdcloud CLI:

    TENANT_PROJECT=PROJECT_NAME
    gdcloud config set project $TENANT_PROJECT
    

    Die folgende Ausgabe wird angezeigt:

    Updated property [core/project].
    
  6. Suchen Sie ein Harbor-Projekt, für das Sie Verwaltungszugriff haben. Wenn keines vorhanden ist, erstellen Sie ein Harbor-Projekt.

  7. Führen Sie Docker-Vorgänge aus, z. B. einen Image-Push oder -Pull:

    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
    

    Eine erfolgreiche Ausgabe sieht etwa so aus:

    # 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
    

    Wenn der Vorgang nicht erfolgreich ist, wird möglicherweise die folgende Ausgabe angezeigt:

    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 diesem Beispiel ist die GDC-Authentifizierungssitzung abgelaufen und Sie müssen sich noch einmal bei GDC anmelden. Weitere Informationen finden Sie unter Anmelden.

In Helm anmelden

So authentifizieren Sie sich mit Helm:

  1. Rufen Sie nach der Authentifizierung bei GDC Ihre Nutzeranmeldedaten vom Credential Helper ab:

    echo $REGISTRY | docker-credential-mhs get
    

    Die Ausgabe sieht etwa so aus:

    {"Username":"tokenreview$fop-infrastructure-operator@example.com","Secret":"STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw"}
    
  2. Melden Sie sich mit den Anmeldedaten in der Helm-Befehlszeile an. Wenn Sie zur Eingabe der Anmeldedaten aufgefordert werden, verwenden Sie die vom Credential Helper zurückgegebenen Anmeldedaten.

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

    Eine erfolgreiche Ausgabe für diesen Vorgang sieht so aus:

    Login Succeeded
    

Mit CLI-Secrets anmelden

So melden Sie sich mit CLI-Secrets in Docker oder Helm an:

  1. Melden Sie sich mit einem IAP-Nutzerkonto bei Harbor an.
  2. Klicken Sie auf Ihren Nutzernamen und wählen Sie Nutzerprofil aus.
  3. Klicken Sie auf Kopieren, um das mit Ihrem Konto verknüpfte CLI-Secret zu kopieren.
  4. Optional: Wenn Sie Schaltflächen zum automatischen Generieren oder manuellen Erstellen eines neuen CLI-Secrets anzeigen möchten, klicken Sie in Ihrem Nutzerprofil auf Mehr.

  5. Wenn Sie einen neuen Befehlszeilen-Secret generiert haben, klicken Sie auf Kopieren, um ihn zu kopieren.

  6. Verwenden Sie Ihr CLI-Secret als Passwort, wenn Sie sich über die Docker- oder Helm-Befehlszeile in Harbor anmelden:

    docker login -u USERNAME -p CLI_SECRET HARBOR_INSTANCE_URL
    

    Ersetzen Sie Folgendes:

    • USERNAME: der Nutzername des Harbor-Kontos.
    • CLI_SECRET: das generierte CLI-Secret.
    • HARBOR_INSTANCE_URL: die URL der Harbor-Instanz.

Nächste Schritte

Nachdem Sie sich bei Docker und Helm angemeldet haben, ist Ihre Registry verbunden und Sie können sie verwenden: