이 페이지에서는 관리형 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로 인증하려면 다음 단계를 따르세요.
로그인의 안내에 따라 GDC CLI로 관리 API 서버에 로그인합니다.
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}
다음을 바꿉니다.
PROJECT_NAME
: 테넌트 프로젝트의 이름입니다. 이 이름은 Harbor 인스턴스를 만들 때 제공한 프로젝트 이름과 동일합니다.HARBOR_INSTANCE_NAME
: Harbor 레지스트리 인스턴스 만들기에서 생성된 Harbor 인스턴스의 이름입니다.
Harbor 루트 CA를 신뢰하도록 Docker 구성의 안내를 따릅니다.
선택사항:
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"
의 성공적인 출력을 보여줍니다.gdcloud
에서 테넌트 프로젝트를 구성합니다.TENANT_PROJECT=PROJECT_NAME gdcloud config set project $TENANT_PROJECT
다음과 같은 출력이 표시됩니다.
Updated property [core/project].
관리 액세스 권한이 있는 Harbor 프로젝트를 식별합니다. Harbor 프로젝트가 없으면 Harbor 프로젝트를 만듭니다.
이미지 푸시 또는 풀과 같은 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으로 인증하려면 다음 단계를 따르세요.
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"}
사용자 인증 정보로 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에 로그인하려면 다음 단계를 따르세요.
- IAP 사용자 계정으로 Harbor에 로그인합니다.
- 사용자 이름을 클릭하고 사용자 프로필을 선택합니다.
- 계정과 연결된 CLI 보안 비밀을 복사하려면 복사를 클릭합니다.
선택사항: 새 CLI 보안 비밀을 자동으로 생성하거나 수동으로 만드는 버튼을 표시하려면 사용자 프로필에서
줄임표를 클릭합니다.새 CLI 비밀 키를 생성한 경우
복사를 클릭하여 복사합니다.이제 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입니다.