Se connecter à Docker et Helm

Cette page explique comment se connecter à Docker ou Helm à l'aide du gestionnaire d'identifiants Managed Harbor Service (MHS) ou des secrets de la CLI.

Pour plus de flexibilité, Google Distributed Cloud (GDC) air-gapped propose deux méthodes d'authentification avec Docker et Helm à partir de votre instance de registre Harbor. La première méthode consiste à utiliser le helper d'identifiants Managed Harbor Service (MHS) et votre identité GDC pour vous connecter à Docker ou à Helm CLI. Une fois authentifié auprès de GDC, vous pouvez vous connecter au client Docker et effectuer des opérations Docker, sans avoir à créer ni à gérer de secrets de CLI distincts dans Harbor.

La deuxième méthode consiste à utiliser les secrets de la CLI. Après vous être authentifié à l'aide d'Identity-Aware Proxy (IAP) et vous être connecté à l'interface Harbor pour la première fois, utilisez la CLI Docker ou Helm pour accéder à Harbor. Les CLI Docker et Helm ne peuvent pas gérer la redirection pour IAP. Harbor fournit donc un secret de CLI à utiliser lors de la connexion depuis Docker ou Helm. Cette méthode n'est disponible que lorsque Harbor utilise l'authentification IAP.

Avant de commencer

Pour configurer l'authentification Docker et Helm pour les instances de registre Harbor, vous devez disposer des éléments suivants :

  • L'assistant d'identification MHS docker-credential-mhs installé dans l'environnement. L'assistant d'identification est inclus par défaut dans le bundle gdcloud CLI. Pour en savoir plus, consultez la présentation de la gcloud CLI.
  • Le rôle d'identité et d'accès nécessaire. Demandez à votre administrateur IAM de l'organisation de vous attribuer le rôle Lecteur d'instance Harbor (harbor-instance-viewer).

Se connecter à Docker avec votre identité GDC

Utilisez l'assistant d'identification MHS avec votre identité GDC pour vous connecter à la CLI Docker. Pour vous authentifier auprès de Docker, procédez comme suit :

  1. Connectez-vous au serveur de l'API Management avec la CLI GDC en suivant les instructions de la section Se connecter.

  2. Configurez Docker pour utiliser l'assistant d'identification 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}
    

    Remplacez les éléments suivants :

  3. Suivez les instructions de la section Configurer Docker pour qu'il fasse confiance à l'autorité de certification racine Harbor.

  4. Facultatif : Vérifiez que l'assistant d'identifiants est correctement configuré en vérifiant que l'entrée mhs a été ajoutée à ~/.docker/config.json :

    cat DOCKER_CONFIG_PATH
    

    Remplacez DOCKER_CONFIG_PATH par le chemin d'accès à votre fichier de configuration Docker. Par exemple, ~/.docker/config.json.

    Le résultat ressemble à ce qui suit :

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

    Cet exemple montre un résultat "myinstance-e2e-test-user.org-1.zone1.google.gdch.test": "mhs" réussi.

  5. Configurez le projet locataire dans gdcloud :

    TENANT_PROJECT=PROJECT_NAME
    gdcloud config set project $TENANT_PROJECT
    

    Le résultat suivant s'affiche :

    Updated property [core/project].
    
  6. Identifiez un projet Harbor auquel vous avez accès en tant qu'administrateur. Créez un projet Harbor s'il n'en existe pas.

  7. Effectuez des opérations Docker, telles que l'envoi ou l'extraction d'une image :

    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
    

    Le résultat renvoyé en cas de succès ressemble à ce qui suit :

    # 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
    

    Si l'opération échoue, le résultat suivant peut s'afficher :

    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
    

    Dans cet exemple, la session d'authentification GDC a expiré et vous devez vous reconnecter à GDC. Pour en savoir plus, consultez Se connecter.

Se connecter à Helm avec votre identité GDC

Utilisez l'assistant d'identification MHS avec votre identité GDC pour vous connecter à la CLI Helm.

Pour vous authentifier auprès de Helm, procédez comme suit :

  1. Après vous être authentifié avec GDC, récupérez vos identifiants utilisateur à partir de l'assistant d'identification :

    echo $REGISTRY | docker-credential-mhs get
    

    Le résultat ressemble à ce qui suit :

    {"Username":"tokenreview$fop-infrastructure-operator@example.com","Secret":"STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw"}
    
  2. Connectez-vous à la Helm CLI avec les identifiants. Lorsque vous êtes invité à saisir les identifiants, utilisez ceux renvoyés par l'assistant d'identification.

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

    Un résultat positif pour cette opération ressemble à ceci :

    Login Succeeded
    

Se connecter à Docker ou Helm avec des secrets CLI

Pour vous connecter à Docker ou Helm avec des secrets CLI, procédez comme suit :

  1. Connectez-vous à Harbor avec un compte utilisateur IAP.
  2. Cliquez sur votre nom d'utilisateur, puis sélectionnez Profil utilisateur.
  3. Pour copier le secret de CLI associé à votre compte, cliquez sur Copier.
  4. Facultatif : Pour afficher les boutons permettant de générer automatiquement ou de créer manuellement un secret CLI, cliquez sur les points de suspension  dans votre profil utilisateur.

  5. Si vous avez généré un secret CLI, cliquez sur Copier  pour le copier.

  6. Vous pouvez désormais utiliser votre secret de CLI comme mot de passe lorsque vous vous connectez à Harbor depuis la CLI Docker ou Helm :

    docker login -u USERNAME -p CLI_SECRET HARBOR_INSTANCE_URL

Remplacez les éléments suivants :

  • USERNAME : nom d'utilisateur du compte Harbor
  • CLI_SECRET : code secret de la CLI généré.
  • HARBOR_INSTANCE_URL : URL de l'instance Harbor.