首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从运行在GKE中的容器中将Docker映像推送到

从运行在GKE中的容器中将Docker映像推送到
EN

Stack Overflow用户
提问于 2019-11-09 15:07:44
回答 1查看 953关注 0票数 2

我有个GCP项目。在这里,我使用GKE并运行Teamcity容器。这个Teamcity容器是我的构建服务器,也是我运行构建步骤/脚本的位置。

其中一个构建步骤希望将一个停靠者映像推送到。当这样做时,它失败了,导致了这个错误:

代码语言:javascript
复制
denied: Token exchange failed for project 'coopr-mod'. Caller does not have permission 'storage.buckets.create'. To configure permissions, follow instructions at: https://cloud.google.com/container-registry/docs/access-control

我读了上面提到的说明链接,但在我的情况下,我就是找不到解决问题的方法。

为了完成,我在此写下执行的构建步骤:

步骤1

代码语言:javascript
复制
# Create environment variable for correct distribution
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

# Add the Cloud SDK distribution URI as a package source
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

# Import the Google Cloud Platform public key
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

# Update the package list and install the Cloud SDK
sudo apt-get -y update && sudo apt-get -y install google-cloud-sdk

步骤2

代码语言:javascript
复制
gcloud --quiet auth configure-docker

步骤3:“码头构建我的映像:1

步骤4docker tag myimage:1 eu.gcr.io/my-project/myimage:1

步骤5:(失败步骤) docker push eu.gcr.io/coopr-mod/myimage:1

结果在

代码语言:javascript
复制
denied: Token exchange failed for project 'coopr-mod'. Caller does not have permission 'storage.buckets.create'. To configure permissions, follow instructions at: https://cloud.google.com/container-registry/docs/access-control

我读过关于给予GKE read-write对Google的许可的文章,但是我找不到指南告诉我如何做到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-09 16:47:31

关于如何使用GCR和GKE推拉图像,有很好的文档。另外,对于普通的GCE实例,这个答案也是类似的答案。

假设您的节点池配置了使用默认GCE帐户的实例,那么在创建池时使用read-write访问范围配置池是一个简单的问题。

有几种方法可以做到这一点:

  • 当您使用gcloud创建节点池时,指定(另外) --scopes https://www.googleapis.com/auth/devstorage.read_write (或者,您可以使用以下值:https://www.googleapis.com/auth/cloud-platform启用“所有作用域”,但这是非常允许的)
  • 在控制台中,配置节点池时,具体选择作用域(默认为只读)或选择“所有作用域”,例如:

..。省略了许多范围选择..。

无论出于什么原因,如果您不能直接删除节点池,那么有关如何将作业迁移到新型机器的说明应该适用于您(在本例中,“新机器类型”只具有新的访问权限)。基本步骤是:

  • 创建新的节点池
  • 封锁现有节点池(标记为不可调度)(并清除现有作业)
  • 等待工作迁移
  • 删除现有节点池

尽管如此,如果您不希望集群上的任何吊舱具有这种访问权限,那么使用专用的服务帐户(和键)来推送映像,这可能是有意义的。同样,这不需要销毁和重新创建节点池。

这是一个相当复杂的数字,但步骤大致如下:

  • 创建一个具有必要角色的IAM帐户(可能是“”--但您需要在第一次推送时创建桶的能力)。
  • 为这个IAM帐户生成一个密钥。
  • 用工作部署密钥文件(大概是通过GKE机密)
  • 使用密钥文件对停靠者进行身份验证

cat keyfile.json | docker login -u _json_key --password-stdin https://eu.gcr.io

(或任何正确的GCR存储库主机名)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58780536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档