本页面介绍了如何使用托管 Harbor 服务 (MHS) 凭据辅助程序或 CLI 密钥登录 Docker 或 Helm。
Google Distributed Cloud (GDC) 网闸隔离配置中的 Harbor 注册表实例使用 Identity-Aware Proxy (IAP) 进行身份验证。您可以使用以下任一方法从 Docker 或 Helm CLI 登录 Harbor 注册表实例:
- MHS 凭证辅助程序 (
docker-credential-mhs):使用经过身份验证的 GDC 身份自动处理 IAP 身份验证。使用 gdcloud CLI 登录后,docker-credential-mhs会提取经过身份验证的用户身份,并使用 Harbor 验证您的访问权限。验证后,Harbor 会向 Docker 或 Helm 提供一个短期令牌,以便您执行注册表操作,而无需创建或管理单独的 CLI 密钥。 - CLI 密钥:使用 Harbor 用户个人资料中的静态 CLI 密钥。首次使用 IAP 登录 Harbor 网页界面后,您可以检索 CLI 密钥,并在通过 Docker 或 Helm CLI 登录时将其用作密码。此方法仅适用于 Harbor 界面。
准备工作
如需为 Harbor 注册表实例配置 Docker 和 Helm 身份验证,您必须在环境中安装 MHS 凭据帮助程序 (docker-credential-mhs)。gdcloud CLI 软件包中默认包含凭证辅助程序。如需了解详情,请参阅 gdcloud CLI 概览。
所需 IAM 角色
如需为 Harbor 注册表实例配置身份验证,请与您的 IAM 项目管理员联系,请求获取 Harbor 实例查看者 (harbor-instance-viewer) 角色,该角色可让您在项目命名空间中获取、列出和监视 Harbor 实例。此角色包含查看现有 Harbor 实例的详细信息所需的权限,以便您检索注册表网址进行身份验证。
使用 MHS 凭证辅助程序登录
您向 docker-credential-mhs 进行身份验证的方式取决于您的 CLI 客户端:您可以配置 Docker 以自动提取凭据,也可以直接检索临时凭证以登录 Docker。
登录 Docker
如需使用 Docker 进行身份验证,请按以下步骤操作:
按照登录中的说明,使用 gdcloud CLI 登录 Management API 服务器。
将 Docker 配置为使用 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}替换以下内容:
PROJECT_NAME:租户项目的名称。此名称与您在创建 Harbor 实例时提供的项目名称相同。HARBOR_INSTANCE_NAME:您在创建 Harbor 注册表实例中创建的 Harbor 实例的名称。
按照将 Docker 配置为信任 Harbor 根 CA 中的说明操作。
可选:通过验证
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 CLI 中配置租户项目:
TENANT_PROJECT=PROJECT_NAME gdcloud config set project $TENANT_PROJECT系统会显示以下输出:
Updated property [core/project].确定您拥有管理权限的 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}/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 进行身份验证,请按以下步骤操作:
通过 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 密钥登录
如需使用 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 实例的网址。
后续步骤
登录 Docker 和 Helm 后,您的注册表即已连接,您可以开始使用它: