このページでは、Managed Harbor Service(MHS)認証情報ヘルパーまたは CLI シークレットを使用して Docker または Helm にログインする方法について説明します。
柔軟性を確保するため、Google Distributed Cloud(GDC)エアギャップでは、Harbor レジストリ インスタンスから Docker と Helm で認証を行う 2 つの方法が用意されています。1 つ目の方法は、Managed Harbor Service(MHS)認証情報ヘルパーと GDC ID を使用して Docker または Helm CLI にログインすることです。GDC で認証すると、Harbor で個別の CLI シークレットを作成または管理することなく、Docker クライアントにログインして Docker オペレーションを実行できます。
2 つ目の方法は、CLI シークレットを使用する方法です。Identity-Aware Proxy(IAP)を使用して認証し、Harbor インターフェースに初めてログインしたら、Docker または Helm CLI を使用して Harbor にアクセスします。Docker CLI と 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 で Management 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 プロジェクトを作成します(存在しない場合)。
イメージの push や pull などの 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 CLI または Helm CLI から Harbor にログインするときに、CLI シークレットをパスワードとして使用できます。
docker login -u USERNAME -p CLI_SECRET HARBOR_INSTANCE_URL
次のように置き換えます。
USERNAME
: Harbor アカウントのユーザー名CLI_SECRET
: 生成された CLI シークレット。HARBOR_INSTANCE_URL
: Harbor インスタンスの URL。