访问Google Kubernetes Engine中其他项目中的项目特定资源

时间:2018-08-17 00:56:00

标签: kubernetes google-container-registry google-kubernetes-engine google-cloud-dns

(我不确定这是否是常见要求,或者我正在要求黑客入侵,但无论如何我都会尝试)

我们为Google Kubernetes Engine上的每个开发人员部署了不同的项目,所有项目都在同一计费帐户下。例如,我的开发项目是kp-dev-project,而我的团队成员之一是xyz-dev-project。我们还有一个用于集成部署的“公共”项目,称为intg-project

我们在intg-project下创建了两个资源:

  1. 容器注册表(gcr.io/intg-project),我们的CI管道在其中推送图像;例如grc.io/intg-project/hello:1.0
  2. Google Cloud DNS下的托管区域dev.example.com

这是问题:

GKE中是否有一种方法可以引用 other 项目在“ common”项目中创建的资源?例如,在开发时,我将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 Secret将Google容器注册表配置为“外部”私有Docker注册表。所有功劳归this article on Heptio.com

1 个答案:

答案 0 :(得分:0)

专用的CI / CD云项目可在每个Google Kubernetes Engine环境上构建,推送,测试Docker映像并不断部署新版本的映像。

这些环境是在单独的项目(如开发,登台和生产)下提供的。

您通常指的是什么区域?你能给我更多细节吗?

是的,您可以利用通用的容器注册表。

您可以授予对另一个项目的访问权限 有关更多详细信息,请参见附件的链接[1]

[1] https://googlecloud.tips/tips/029-cross-project-container-registry/

您也可以在使用共享VPC设置群集时查看此文档[2]。您可以将一个项目指定为宿主项目,也可以将其他项目(称为服务项目)附加到宿主项目。您可以将Shared VPC与区域群集和区域群集一起使用。

[2] https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-shared-vpc

您还可以为命令指定--project参数,以对该调用针对另一个项目进行操作。

此外,您可以授予用户和其他项目对注册表的访问权限,请参阅链接[3]了解更多详细信息

[3] https://cloud.google.com/container-registry/docs/access-control#granting_users_and_other_projects_access_to_a_registry