【发布时间】:2018-08-17 00:55:59
【问题描述】:
(我不确定这是否是常见要求,或者我要求破解,但无论如何我都会尝试)
我们在 Google Kubernetes Engine 上为每个开发者部署不同的项目,所有项目都在同一个结算帐号下。例如,我的开发项目是kp-dev-project,而我的一位团队成员是xyz-dev-project。我们还有一个用于集成部署的“通用”项目,称为intg-project。
我们在intg-project下创建了两个资源:
- 一个容器注册表 (
gcr.io/intg-project),我们的 CI 管道在其中推送图像;例如grc.io/intg-project/hello:1.0 - Google Cloud DNS 下名为
dev.example.com的托管区域
问题来了:
在 GKE 中有没有办法从 other 项目中引用在“公共”项目中创建的资源?例如,在开发时,我将gcloud 配置设置为我自己的配置文件kp-dev-profile。如果我尝试部署引用来自 grc.io/intg-project/hello:1.0 的图像的 Kube 规范,则会收到如下所示的错误:
Failed to pull image "gcr.io/intg-project/hello:1.0": rpc error: code = Unknown desc = Error response from daemon: repository gcr.io/intg-project/hello not found: does not exist or no pull access
同样,如果我尝试使用 gcloud dns managed-zones list 列出所有托管区域,我看不到托管区域 dev.example.com。
只要我将我的个人资料更改为intg-profile,或将我的kp-dev-profile 个人资料中的项目设置为intg-project,我就可以访问这两种资源。 注意:,我在 Google IAM 中的用户拥有必要的权限(事实上,我实际上是 intg-project 的“所有者”)
有点意思:Google 将每个“项目”创建为一个独立的资源沙箱,并且不会在项目之外公开任何资源。
但也许,它确实没有有意义:“项目”听起来很像 me 的沙盒机制,以保持我的开发人员的工作独立于一个独立的,同时仍希望利用一个公共托管区域和一个公共容器注册表。
有什么想法吗?
更新
我能够使用 GCP 服务帐户密钥和 Docker 机密将 Google Container Registry 配置为“外部”私有 Docker 注册表。所有致谢this article on Heptio.com。
【问题讨论】:
标签: kubernetes google-container-registry google-kubernetes-engine google-cloud-dns