Docker 및 Helm에 로그인

이 페이지에서는 관리형 Harbor 서비스 (MHS) 사용자 인증 정보 도우미 또는 CLI 보안 비밀을 사용하여 Docker 또는 Helm에 로그인하는 방법을 설명합니다.

Google Distributed Cloud (GDC) 에어 갭 적용형의 Harbor 레지스트리 인스턴스는 인증에 IAP (Identity-Aware Proxy)를 사용합니다. 다음 방법 중 하나를 사용하여 Docker 또는 Helm CLI에서 Harbor 레지스트리 인스턴스에 로그인할 수 있습니다.

  • MHS 사용자 인증 정보 도우미 (docker-credential-mhs): 인증된 GDC ID를 사용하여 IAP 인증을 자동으로 처리합니다. gdcloud CLI로 로그인하면 docker-credential-mhs에서 인증된 사용자 ID를 가져오고 Harbor로 액세스를 확인합니다. 확인 후 Harbor는 Docker 또는 Helm에 단기 토큰을 제공하므로 별도의 CLI 보안 비밀을 만들거나 관리하지 않고도 레지스트리 작업을 수행할 수 있습니다.
  • CLI 보안 비밀: Harbor 사용자 프로필의 정적 CLI 보안 비밀을 사용합니다. IAP를 사용하여 Harbor 웹 인터페이스에 처음 로그인한 후 CLI 보안 비밀번호를 검색하고 Docker 또는 Helm CLI에서 로그인할 때 비밀번호로 사용할 수 있습니다. 이 방법은 Harbor UI에서만 사용할 수 있습니다.

시작하기 전에

Harbor 레지스트리 인스턴스에 Docker 및 Helm 인증을 구성하려면 환경에 MHS 사용자 인증 정보 도우미 (docker-credential-mhs)가 설치되어 있어야 합니다. 사용자 인증 정보 도우미는 기본적으로 gdcloud CLI 번들에 포함되어 있습니다. 자세한 내용은 gdcloud CLI 개요를 참조하세요.

필요한 IAM 역할

Harbor 레지스트리 인스턴스의 인증을 구성하려면 IAM 프로젝트 관리자에게 연락하여 프로젝트 네임스페이스에서 Harbor 인스턴스를 가져오고, 나열하고, 감시할 수 있는 Harbor 인스턴스 뷰어(harbor-instance-viewer) 역할을 요청하세요. 이 역할에는 기존 Harbor 인스턴스의 세부정보를 보는 데 필요한 권한이 포함되어 있으므로 인증을 위해 레지스트리 URL을 검색할 수 있습니다.

MHS 사용자 인증 정보 도우미로 로그인

docker-credential-mhs로 인증하는 방법은 CLI 클라이언트에 따라 다릅니다. 사용자 인증 정보를 자동으로 가져오도록 Docker를 구성하거나 Docker에 로그인하기 위해 임시 사용자 인증 정보를 직접 검색할 수 있습니다.

Docker에 로그인

Docker로 인증하려면 다음 단계를 따르세요.

  1. 로그인의 안내에 따라 gdcloud CLI를 사용하여 Management API 서버에 로그인합니다.

  2. MHS 사용자 인증 정보 도우미 docker-credential-mhs를 사용하도록 Docker를 구성합니다.

    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}
    

    다음을 바꿉니다.

  3. Harbor 루트 CA를 신뢰하도록 Docker 구성의 안내를 따릅니다.

  4. 선택사항: mhs 항목이 ~/.docker/config.json에 추가되었는지 확인하여 사용자 인증 정보 도우미가 성공적으로 구성되었는지 확인합니다.

    cat DOCKER_CONFIG_PATH
    

    DOCKER_CONFIG_PATH을 Docker 구성 파일의 경로로 바꿉니다(예: ~/.docker/config.json).

    출력은 다음과 비슷합니다.

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

    이 예시에서는 "myinstance-e2e-test-user.org-1.zone1.google.gdch.test": "mhs"의 성공적인 출력을 보여줍니다.

  5. gdcloud CLI에서 테넌트 프로젝트를 구성합니다.

    TENANT_PROJECT=PROJECT_NAME
    gdcloud config set project $TENANT_PROJECT
    

    다음 출력이 표시됩니다.

    Updated property [core/project].
    
  6. 관리 액세스 권한이 있는 Harbor 프로젝트를 식별합니다. 프로젝트가 없으면 Harbor 프로젝트를 만듭니다.

  7. 이미지 내보내기 또는 가져오기와 같은 Docker 작업을 수행합니다.

    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
    

    성공적인 출력은 다음과 비슷합니다.

    # 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
    

    작업이 실패하면 다음과 같은 출력이 표시될 수 있습니다.

    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
    

    이 예시에서는 GDC 인증 세션이 만료되었으며 GDC에 다시 로그인해야 합니다. 자세한 내용은 로그인을 참조하세요.

Helm에 로그인

Helm으로 인증하려면 다음 단계를 따르세요.

  1. GDC로 인증한 후 사용자 인증 정보 도우미에서 사용자 인증 정보를 가져옵니다.

    echo $REGISTRY | docker-credential-mhs get
    

    출력은 다음과 비슷합니다.

    {"Username":"tokenreview$fop-infrastructure-operator@example.com","Secret":"STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw"}
    
  2. 사용자 인증 정보로 Helm CLI에 로그인합니다. 사용자 인증 정보를 입력하라는 메시지가 표시되면 사용자 인증 정보 도우미가 반환한 사용자 인증 정보를 사용합니다.

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

    이 작업의 성공적인 출력은 다음과 같습니다.

    Login Succeeded
    

CLI 보안 비밀로 로그인

CLI 보안 비밀을 사용하여 Docker 또는 Helm에 로그인하려면 다음 단계를 따르세요.

  1. IAP 사용자 계정으로 Harbor에 로그인합니다.
  2. 사용자 이름을 클릭하고 사용자 프로필을 선택합니다.
  3. 계정과 연결된 CLI 보안 비밀번호를 복사하려면 복사를 클릭합니다.
  4. 선택사항: 새 CLI 보안 비밀을 자동으로 생성하거나 수동으로 만들기 위한 버튼을 표시하려면 사용자 프로필에서 더보기를 클릭합니다.

  5. 새 CLI 보안 비밀번호를 생성한 경우 복사를 클릭하여 복사합니다.

  6. Docker 또는 Helm CLI에서 Harbor에 로그인할 때 CLI 보안 비밀번호를 비밀번호로 사용합니다.

    docker login -u USERNAME -p CLI_SECRET HARBOR_INSTANCE_URL
    

    다음을 바꿉니다.

    • USERNAME: Harbor 계정 사용자 이름입니다.
    • CLI_SECRET: 생성된 CLI 보안 비밀입니다.
    • HARBOR_INSTANCE_URL: Harbor 인스턴스의 URL입니다.

다음 단계

Docker 및 Helm에 로그인하면 레지스트리가 연결되고 사용을 시작할 수 있습니다.