Iniciar sesión en Docker y Helm

En esta página se describe cómo iniciar sesión en Docker o Helm mediante el auxiliar de credenciales del servicio de Harbor gestionado (MHS) o los secretos de la CLI.

Para ofrecer flexibilidad, Google Distributed Cloud (GDC) air-gapped proporciona dos métodos para autenticarse con Docker y Helm desde la instancia del registro de Harbor. El primer método consiste en usar el auxiliar de credenciales de Managed Harbor Service (MHS) y tu identidad de GDC para iniciar sesión en la CLI de Docker o Helm. Después de autenticarte con GDC, puedes iniciar sesión en el cliente de Docker y realizar operaciones de Docker sin tener que crear ni gestionar secretos de CLI independientes en Harbor.

El segundo método consiste en usar secretos de la CLI. Después de autenticarte mediante Identity-Aware Proxy (IAP) e iniciar sesión en la interfaz de Harbor por primera vez, usa la CLI de Docker o Helm para acceder a Harbor. Las CLIs de Docker y Helm no pueden gestionar la redirección de IAP, por lo que Harbor proporciona un secreto de CLI que se puede usar al iniciar sesión desde Docker o Helm. Este método solo está disponible cuando Harbor usa la autenticación IAP.

Antes de empezar

Para configurar la autenticación de Docker y Helm en las instancias del registro de Harbor, debes tener instalado en tu entorno el auxiliar de credenciales de MHS (docker-credential-mhs). El auxiliar de credenciales se incluye de forma predeterminada en el paquete de la CLI gdcloud. Para obtener más información, consulta el artículo sobre la CLI gdcloud.

Roles de gestión de identidades y accesos obligatorios

Para configurar la autenticación en las instancias del registro de Harbor, ponte en contacto con el administrador de gestión de identidades y accesos del proyecto para solicitar el rol Visor de instancias de Harbor (harbor-instance-viewer), que te permite obtener, enumerar y ver instancias de Harbor en el espacio de nombres del proyecto. Este rol incluye los permisos necesarios para ver los detalles de las instancias de Harbor que ya existen, de modo que puedas recuperar las URLs del registro para la autenticación.

Iniciar sesión en Docker con tu identidad de GDC

Usa el auxiliar de credenciales de MHS con tu identidad de GDC para iniciar sesión en la CLI de Docker. Para autenticarte con Docker, sigue estos pasos:

  1. Inicia sesión en el servidor de la API de gestión con la CLI de GDC siguiendo las instrucciones que se indican en el artículo Iniciar sesión.

  2. Configura Docker para que use el auxiliar de credenciales de 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}
    

    Haz los cambios siguientes:

  3. Sigue las instrucciones que se indican en el artículo Configurar Docker para que confíe en la CA raíz de Harbor.

  4. Opcional: Para comprobar que el auxiliar de credenciales se ha configurado correctamente, verifica que se haya añadido la entrada mhs a ~/.docker/config.json:

    cat DOCKER_CONFIG_PATH
    

    Sustituye DOCKER_CONFIG_PATH por la ruta al archivo de configuración de Docker. Por ejemplo, ~/.docker/config.json.

    El resultado debería ser similar al siguiente:

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

    En este ejemplo se muestra un resultado correcto de "myinstance-e2e-test-user.org-1.zone1.google.gdch.test": "mhs".

  5. Configura el proyecto de cliente en gdcloud:

    TENANT_PROJECT=PROJECT_NAME
    gdcloud config set project $TENANT_PROJECT
    

    Se muestra el siguiente resultado:

    Updated property [core/project].
    
  6. Identifica un proyecto de Harbor al que tengas acceso de gestión. Crea un proyecto de Harbor si no existe.

  7. Realiza operaciones de Docker, como enviar o extraer una imagen:

    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
    

    El resultado debería ser similar al siguiente:

    # 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
    

    Si la operación no se realiza correctamente, es posible que veas el siguiente resultado:

    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
    

    En este ejemplo, la sesión de autenticación de GDC ha caducado y debes volver a iniciar sesión en GDC. Para obtener más información, consulta el artículo Iniciar sesión.

Iniciar sesión en Helm con tu identidad de GDC

Usa el auxiliar de credenciales de MHS con tu identidad de GDC para iniciar sesión en la CLI de Helm.

Para autenticarte con Helm, sigue estos pasos:

  1. Después de autenticarte con GDC, recupera tus credenciales de usuario del auxiliar de credenciales:

    echo $REGISTRY | docker-credential-mhs get
    

    El resultado debería ser similar al siguiente:

    {"Username":"tokenreview$fop-infrastructure-operator@example.com","Secret":"STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw"}
    
  2. Inicia sesión en la CLI de Helm con las credenciales. Cuando se te pida que introduzcas las credenciales, usa las que haya devuelto el auxiliar de credenciales.

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

    El resultado correcto de esta operación debería ser similar al siguiente:

    Login Succeeded
    

Iniciar sesión en Docker o Helm con secretos de la CLI

Para iniciar sesión en Docker o Helm con secretos de la CLI, sigue estos pasos:

  1. Inicia sesión en Harbor con una cuenta de usuario de IAP.
  2. Haz clic en tu nombre de usuario y selecciona Perfil de usuario.
  3. Para copiar el secreto de la CLI asociado a tu cuenta, haz clic en Copiar.
  4. Opcional: Para mostrar los botones que permiten generar o crear manualmente un nuevo secreto de la CLI, haz clic en los puntos suspensivos de tu perfil de usuario.

  5. Si has generado un secreto de la CLI, haz clic en Copiar para copiarlo.

  6. Ahora puedes usar tu secreto de la CLI como contraseña al iniciar sesión en Harbor desde la CLI de Docker o Helm:

    docker login -u USERNAME -p CLI_SECRET HARBOR_INSTANCE_URL

Haz los cambios siguientes:

  • USERNAME: el nombre de usuario de la cuenta de Harbor
  • CLI_SECRET: el secreto de la CLI generado.
  • HARBOR_INSTANCE_URL: la URL de la instancia de Harbor.

Siguientes pasos

Una vez que hayas iniciado sesión en Docker y Helm, el registro estará totalmente conectado y podrás empezar a usarlo: