我正在使用GKE和terraform配置高可用性kubernetes集群 . 多个团队将在群集上运行多个部署,我预计大多数部署将位于自定义命名空间中,主要是出于隔离原因 .
我们的一个悬而未决的问题是如何管理群集上的GCP服务帐户 .
我可以使用自定义GCP服务帐户创建集群,并调整权限以便它可以从GCR中提取图像,登录到堆栈驱动程序等 . 我认为这个自定义服务帐户将由GKE节点使用,而不是默认的计算引擎服务帐户 . 如果我在这方面错了,请纠正我!
每个部署都需要访问一组不同的GCP资源( Cloud 存储,数据存储, Cloud sql等),我希望每个部署都拥有自己的GCP服务帐户,以便我们可以控制权限 . 我还想运行pods无法访问运行pod的节点可用的GCP服务帐户 .
那可能吗?
我考虑了一些选择,但我对可行性或可取性没有信心:
-
部署的GCP服务帐户可以作为kubernetes秘密添加到群集,部署可以将其作为文件挂载,并设置
GOOGLE_DEFAULT_CREDENTAILS
指向它 -
也许可以拒绝对实例的元数据API进行访问,或者可以更改元数据API返回的服务帐户?
-
也许有一种GKE(或kubernetes)本地方式来控制呈现给pod的服务帐户?
1 回答
你走在正确的轨道上 . GCP服务帐户可以在GKE for POD中使用,以便为GCP资源分配权限 .
创建一个帐户:
将IAM权限添加到服务帐户:
为服务帐户生成JSON文件:
使用该JSON创建一个秘密:
使用该秘密为您的应用程序创建部署:
如果要对单独部署使用各种权限,则需要创建一些具有不同权限的GCP服务帐户,为它们生成JSON令牌,并根据您的计划将它们分配给部署 . POD将根据已安装的服务帐户进行访问,而不是为分配给该节点的帐户提供服务 .
有关更多信息,您可以查看链接:
Authenticating to Cloud Platform with Service Accounts
Google Cloud Service Accounts with Google Container Engine (GKE) - Tutorial