Docker 및 Helm에 로그인

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

유연성을 제공하기 위해 Google Distributed Cloud (GDC) 에어 갭은 Harbor 레지스트리 인스턴스에서 Docker 및 Helm으로 인증하는 두 가지 방법을 제공합니다. 첫 번째 방법은 관리형 Harbor 서비스 (MHS) 사용자 인증 정보 도우미와 GDC ID를 사용하여 Docker 또는 Helm CLI에 로그인하는 것입니다. GDC로 인증한 후에는 Harbor에서 별도의 CLI 보안 비밀을 만들거나 관리하지 않고도 Docker 클라이언트에 로그인하여 Docker 작업을 실행할 수 있습니다.

두 번째 방법은 CLI 보안 비밀을 사용하는 것입니다. Identity-Aware Proxy (IAP)를 사용하여 인증하고 Harbor 인터페이스에 처음 로그인한 후 Docker 또는 Helm CLI를 사용하여 Harbor에 액세스합니다. Docker 및 Helm CLI는 IAP의 리디렉션을 처리할 수 없으므로 Harbor는 Docker 또는 Helm에서 로그인할 때 사용할 CLI 보안 비밀을 제공합니다. 이 메서드는 Harbor가 IAP 인증을 사용하는 경우에만 사용할 수 있습니다.

시작하기 전에

Harbor 레지스트리 인스턴스에 Docker 및 Helm 인증을 구성하려면 다음이 필요합니다.

  • 환경에 설치된 MHS 사용자 인증 정보 도우미 docker-credential-mhs 사용자 인증 정보 도우미는 gdcloud CLI 번들에 기본적으로 포함되어 있습니다. 자세한 내용은 gdcloud CLI 개요를 참고하세요.
  • 필요한 ID 및 액세스 역할입니다. 조직 IAM 관리자에게 Harbor 인스턴스 뷰어 (harbor-instance-viewer) 역할을 부여해 달라고 요청합니다.

GDC ID로 Docker에 로그인

GDC ID와 함께 MHS 사용자 인증 정보 도우미를 사용하여 Docker CLI에 로그인합니다. Docker로 인증하려면 다음 단계를 따르세요.

  1. 로그인의 안내에 따라 GDC CLI로 관리 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에서 테넌트 프로젝트를 구성합니다.

    TENANT_PROJECT=PROJECT_NAME
    gdcloud config set project $TENANT_PROJECT
    

    다음과 같은 출력이 표시됩니다.

    Updated property [core/project].
    
  6. 관리 액세스 권한이 있는 Harbor 프로젝트를 식별합니다. 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}/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
    

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

    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에 다시 로그인해야 합니다. 자세한 내용은 로그인을 참고하세요.

GDC ID로 Helm에 로그인

GDC ID와 함께 MHS 사용자 인증 정보 도우미를 사용하여 Helm CLI에 로그인합니다.

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 비밀번호로 Docker 또는 Helm에 로그인

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입니다.