我们使用terraform设置GCE实例,然后使用来提供它们并将我们的服务放到机器上。
我在我们的组织中运行一个项目,需要从一个不同的项目中提取一个码头形象。图像托管在另一个项目的容器注册表中。
我理想的活动顺序是:
docker_container从容器注册表中提取所需的图像。这个看似简单的工作流并不简单。一开始,我发现只运行docker_container就会失败,因为需要先对docker进行身份验证。考虑到我不想登录到机器并使用凭据助手设置它,我唯一的方法就是尝试运行命令docker login -u _json_key -p<jsonkeyfile> http://gcr.io
如果登录到有问题的机器,我可以让它直接在命令行上运行,但试图让它使用ansible docker-login运行会给我带来噩梦,单独问题,所以我想完全避免它。GCE实例是使用在创建过程中预先配置的专用服务帐户创建的(使用terraform)。如果使用命令行中的服务帐户键,所有角色都已授予帐户,因为如果我使用服务帐户键,我可以登录和提取图像。
我真正期望的是,在上面的第1步中,如果我使用具有所有正确凭据的google服务帐户,GCE实例应该已经设置为与容器注册表对话。是否有一种方法可以使这项工作完全作为启动配置的一部分?我查看了https://cloud.google.com/container-optimized-os/docs/,但我还不想使用chromeOS,而且我也不知道这是否会被打开,尽管从文档中可以感觉到这一点。
是否有一种方法可以预先设置一个已准备好的GCE实例?如果没有,是否有人使用docker login尝试过基于ansible的工作流并使其工作?
发布于 2019-07-29 19:50:01
您应该利用GCE本地码头能力 (使用容器优化的OS!)而不是手动安装Docker并配置它。这允许将映像作为引导过程的一部分来提取和启动。对于身份验证,您应该能够授权您的计算引擎默认服务帐户访问GCR中的映像,即使是从另一个项目。或者创建和使用专用服务帐户,请参阅这位医生中如何在实例中激活它。还请参阅关于将IAM角色分配给服务帐户的这里。
若要创建带有Docker映像的Compute实例,可以使用此Gcloud命令 (不确定Ansible是否有等效的)
gcloud beta compute instances create-with-container注意:考虑在ServerFault中发布这类问题,因为它将针对网络和系统管理员受众。StackOverflow更适合开发人员社区。
https://stackoverflow.com/questions/57259054
复制相似问题