验证 Google 计算引擎 (GCE) 以从 Google 容器注册表 (GCR) 提取映像

问题描述 投票:0回答:2

我正在使用 Google Cloud Build 构建部署管道并将 Docker 映像存储在 GCR 中。我计划在最新的 Cloud Build 步骤中重新启动 GCE 实例组,以便 GCE 可以通过在 GCE 实例模板启动脚本中添加

docker pull gcr.io/my-project/my-image
来运行最新的 docker 镜像。问题是我无法授权 docker 从 GCR 中提取映像。我已经阅读了4 GCR身份验证方法,但它们都要求我们从浏览器手动登录。此外,在这个阶段,我无法上传服务帐户密钥,因为我需要完全通过代码 (Terraform) 来配置和维护基础设施,无需 Google Cloud 控制台。那么我们如何验证 docker 作为机器呢?

docker google-cloud-platform google-compute-engine google-container-registry
2个回答
3
投票

如果实例未安装

gcloud
,您可以使用元数据服务获取访问令牌,并使用该令牌通过 Docker 登录 GCR。

我还没有使用它来使用 Docker 登录 GCR,但它应该可以工作。我使用这种格式从实例启动脚本访问 Google Cloud 服务:

echo "Getting token from metadata"
ENDPOINT="metadata.google.internal/computeMetadata/v1"
ACCOUNT="default" # Replace with Service Account Email (!)
TOKEN=$(\
  curl \
  --silent \
  --header  "Metadata-Flavor: Google" \
  http://${ENDPOINT}/instance/service-accounts/${ACCOUNT}/token)

echo "Extract access token"
ACCESS=$(\
  echo ${TOKEN} \
  | grep --extended-regexp --only-matching "(ya29.[0-9a-zA-Z._-]*)")

echo "Login to Docker"
HOST="https://gcr.io" # Or ...
printf ${ACCESS} \
| docker login ${HOST} \
  -u oauth2accesstoken \
  --password-stdin

1
投票

您可以向附加到 GCE 实例的服务帐户授予 IAM 权限或范围,然后运行以下命令:

gcloud auth print-access-token | docker login -u oauth2accesstoken \
    --password-stdin https://HOSTNAME

这将针对注册表进行身份验证,并能够推送和拉取图像。

© www.soinside.com 2019 - 2024. All rights reserved.