Fazer login no Docker e no Helm

Nesta página, descrevemos como fazer login no Docker ou no Helm usando o auxiliar de credenciais do Serviço Gerenciado do Harbor (MHS, na sigla em inglês) ou os secrets da CLI.

As instâncias de registro do Harbor no Google Distributed Cloud (GDC) com isolamento físico usam o Identity-Aware Proxy (IAP) para autenticação. É possível fazer login na instância do registro do Harbor pela CLI do Docker ou do Helm usando um dos seguintes métodos:

  • Auxiliar de credenciais do MHS (docker-credential-mhs): usa sua identidade autenticada do GDC para processar a autenticação do IAP automaticamente. Depois que você faz login com a CLI gdcloud, o docker-credential-mhs busca sua identidade de usuário autenticada e verifica seu acesso com o Harbor. Após a verificação, o Harbor fornece um token de curta duração ao Docker ou ao Helm para que você possa realizar operações de registro sem criar ou gerenciar secrets de CLI separados.
  • Secrets da CLI: usa um secret estático da CLI do seu perfil de usuário do Harbor. Depois de fazer login na interface da Web do Harbor usando o IAP pela primeira vez, é possível recuperar o secret da CLI e usá-lo como senha ao fazer login na CLI do Docker ou do Helm. Esse método só está disponível com a interface do Harbor.

Antes de começar

Para configurar a autenticação do Docker e do Helm para instâncias de registro do Harbor, é necessário ter o auxiliar de credenciais do MHS (docker-credential-mhs) instalado no ambiente. O auxiliar de credenciais está incluído por padrão no pacote da CLI gdcloud. Para mais informações, consulte a visão geral da CLI gdcloud.

Papéis necessários do IAM

Para configurar a autenticação para instâncias do registro do Harbor, entre em contato com o administrador do projeto do IAM para solicitar o papel de Leitor de instâncias do Harbor (harbor-instance-viewer), que permite receber, listar e assistir instâncias do Harbor no namespace do projeto. Esse papel inclui as permissões necessárias para visualizar os detalhes das instâncias atuais do Harbor para que você possa recuperar os URLs do registro para autenticação.

Fazer login com o auxiliar de credenciais do MHS

A forma de autenticação com o docker-credential-mhs depende do cliente da CLI: é possível configurar o Docker para buscar credenciais automaticamente ou recuperar credenciais temporárias diretamente para fazer login no Docker.

Faça login no Docker.

Para autenticar com o Docker, siga estas etapas:

  1. Faça login no servidor de API Management com a CLI gdcloud 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 AC raiz do Harbor.

  4. Opcional: verifique se o auxiliar 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, como ~/.docker/config.json.

    O resultado será o seguinte:

    {
        "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 de locatário na CLI 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 ao qual você tem acesso de gerenciamento. Se não houver um, crie um projeto do Harbor.

  7. Realize operações do Docker, como enviar ou extrair 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}/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
    

    Se a operação não for bem-sucedida, você 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 novamente. Para mais informações, consulte Fazer login.

Fazer login no Helm

Para autenticar com o Helm, siga estas etapas:

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

    echo $REGISTRY | docker-credential-mhs get
    

    O resultado será o seguinte:

    {"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 for solicitado que você insira as credenciais, use as credenciais retornadas pelo auxiliar de credenciais.

    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 com secrets da CLI

Para fazer login no Docker ou no Helm com secrets 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 do usuário.
  3. Para copiar a chave secreta da CLI associada à sua conta, clique em Copiar.
  4. Opcional: para exibir botões para gerar automaticamente ou criar manualmente uma nova chave secreta da CLI, clique em Mais no seu perfil de usuário.

  5. Se você gerou uma nova chave secreta da CLI, clique em Copiar para copiá-la.

  6. Use 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.

A seguir

Depois de fazer login no Docker e no Helm, seu registro estará conectado e você poderá começar a usá-lo: