Fazer login no Docker e no Helm

Nesta página, descrevemos como fazer login no Docker ou no Helm usando o assistente de credenciais do Managed Harbor Service (MHS) ou segredos da CLI.

Para oferecer flexibilidade, o Google Distributed Cloud (GDC) air-gapped oferece dois métodos para autenticar com o Docker e o Helm na instância do registro do Harbor. O primeiro método é usar o auxiliar de credenciais do Managed Harbor Service (MHS) e sua identidade do GDC para fazer login na CLI do Docker ou do Helm. Depois de se autenticar com o GDC, é possível fazer login no cliente Docker e realizar operações do Docker sem precisar criar ou gerenciar segredos separados da CLI no Harbor.

O segundo método é usar secrets da CLI. Depois de se autenticar usando o Identity-Aware Proxy (IAP) e fazer login na interface do Harbor pela primeira vez, use a CLI do Docker ou do Helm para acessar o Harbor. As CLIs do Docker e do Helm não podem processar o redirecionamento para o IAP. Por isso, o Harbor fornece um secret da CLI para usar ao fazer login no Docker ou no Helm. Esse método só está disponível quando o Harbor usa a autenticação do IAP.

Antes de começar

Para configurar a autenticação do Docker e do Helm para instâncias do registro do Harbor, você precisa ter o seguinte:

  • O auxiliar de credenciais do MHS docker-credential-mhs instalado no ambiente. O auxiliar de credencial é incluído por padrão no pacote da CLI gdcloud. Para mais informações, consulte a visão geral da CLI gdcloud.
  • O papel de identidade e acesso necessário. Peça ao administrador do IAM da organização para conceder a você o papel de Leitor da instância do Harbor (harbor-instance-viewer).

Faça login no Docker com sua identidade do GDC

Use o auxiliar de credenciais do MHS com sua identidade do GDC para fazer login na CLI do Docker. Para autenticar com o Docker, siga estas etapas:

  1. Faça login no servidor da API Management com a CLI GDC seguindo as instruções em Fazer login.

  2. Configure o Docker para usar o auxiliar de credenciais do 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}
    

    Substitua:

  3. Siga as instruções em Configurar o Docker para confiar na CA raiz do Harbor.

  4. Opcional: verifique se o assistente de credenciais foi configurado corretamente verificando se a entrada mhs foi adicionada a ~/.docker/config.json:

    cat DOCKER_CONFIG_PATH
    

    Substitua DOCKER_CONFIG_PATH pelo caminho para o arquivo de configuração do Docker. Por exemplo, ~/.docker/config.json.

    O resultado será assim:

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

    Este exemplo mostra uma saída bem-sucedida de "myinstance-e2e-test-user.org-1.zone1.google.gdch.test": "mhs".

  5. Configure o projeto do locatário em gdcloud:

    TENANT_PROJECT=PROJECT_NAME
    gdcloud config set project $TENANT_PROJECT
    

    A seguinte saída é mostrada:

    Updated property [core/project].
    
  6. Identifique um projeto do Harbor a que você tenha acesso de gerenciamento. Crie um projeto do Harbor se não houver um.

  7. Realize operações do Docker, como push ou pull de uma imagem:

    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
    

    A saída bem-sucedida é semelhante a esta:

    # 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 a operação não for bem-sucedida, você poderá ver a seguinte saída:

    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
    

    Neste exemplo, a sessão de autenticação do GDC expirou, e você precisa fazer login de novo. Para mais informações, consulte Fazer login.

Faça login no Helm com sua identidade do GDC

Use o auxiliar de credencial do MHS com sua identidade do GDC para fazer login na CLI do Helm.

Para fazer a autenticação com o Helm, siga estas etapas:

  1. Depois de autenticar com o GDC, recupere as credenciais do usuário no auxiliar de credenciais:

    echo $REGISTRY | docker-credential-mhs get
    

    O resultado será assim:

    {"Username":"tokenreview$fop-infrastructure-operator@example.com","Secret":"STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw"}
    
  2. Faça login na CLI do Helm com as credenciais. Quando solicitado a inserir as credenciais, use as credenciais retornadas pelo auxiliar.

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

    Uma saída bem-sucedida para essa operação é semelhante a esta:

    Login Succeeded
    

Fazer login no Docker ou no Helm com secrets da CLI

Para fazer login no Docker ou no Helm com segredos da CLI, siga estas etapas:

  1. Faça login no Harbor com uma conta de usuário do IAP.
  2. Clique no seu nome de usuário e selecione Perfil de usuário.
  3. Para copiar o segredo da CLI associado à sua conta, clique em Copiar.
  4. Opcional: para mostrar botões para gerar automaticamente ou criar manualmente um novo secret da CLI, clique nas reticências no seu perfil de usuário.

  5. Se você gerou uma nova chave secreta da CLI, clique em Copiar para copiar.

  6. Agora é possível usar o secret da CLI como senha ao fazer login no Harbor pela CLI do Docker ou do Helm:

    docker login -u USERNAME -p CLI_SECRET HARBOR_INSTANCE_URL

Substitua:

  • USERNAME: o nome de usuário da conta do Harbor.
  • CLI_SECRET: a chave secreta da CLI gerada.
  • HARBOR_INSTANCE_URL: o URL da instância do Harbor.