在自定义构建的CentOS Docker容器中部署Google服务帐户凭据以在Google的Container Engine或其“container-vm”上运行的最佳方法是什么?此行为自动发生在google/cloud-sdk容器上,该容器运行debian并包含我不使用的内容,例如app-eng / java / php。理想情况下,我尝试访问项目中的非公共资源,例如Google Cloud Storage存储桶对象,而无需每次启动大量这些容器时都进行登录和授权。
例如,在运行在GCE上的基本Centos容器上安装了自定义代码并安装了gcloud / gsutil:
docker run --rm -ti custom-container gsutil ls
系统会提示您运行“gsutil config”以获得授权,我希望如此。
然而,将google / cloud-sdk容器拉到同一个GCE上并执行相同的命令,它似乎巧妙地配置了凭据的继承(可能来自主机容器-vm的凭据?)。在GCE上运行容器以访问私有资源时,这似乎绕过运行“gsutil config”。
我希望在最小版本的Centos容器中复制该行为以进行大规模部署。
答案 0 :(得分:4)
更新:截至2016年12月15日,更新现有VM范围的功能现已处于测试阶段;有关详细信息,请参阅this SO answer。
旧回答:一种方法是使用appropriate scopes(例如,Google云端存储只读或读写)创建VM,然后创建VM上的所有进程,包括容器,可以访问他们可以通过OAuth 2.0使用的凭据;请参阅Google Cloud Storage和Google Compute Engine的文档。
请注意,一旦使用一组范围创建VM,以后就无法更改它们(既不添加也不删除),因此您必须确保在创建VM实例时设置正确的范围集。 / p>
答案 1 :(得分:2)
跟进。
我最后使用了/.config& /.gce目录和一组非常小的GCE SDK组件(没有JDK / PHP / etc)。 wheezy-cloudtools Dockerfile被证明是我能找到的最好的例子。
答案 2 :(得分:0)
您的答案可能包含在本文档中:
Container-Registry Advance Authentication
它包含使用 Docker 容器的身份验证方法
对于 gcloud,它指出:
使用 gcloud 工具在 Cloud Shell 或安装了 Cloud SDK 的任何环境中配置身份验证。 Cloud Shell 包含当前版本的 Docker。
以将运行 Docker 命令的用户身份登录到 gcloud。 要使用用户凭据配置身份验证,请运行以下命令:
gcloud auth login
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
哪里
gcloud auth configure-docker
您的凭据保存在您的用户主目录中。
Linux
:$HOME/.docker/config.json
Windows
:%USERPROFILE%/.docker/config.json