更改 Google Container Engine 集群的权限
Posted
技术标签:
【中文标题】更改 Google Container Engine 集群的权限【英文标题】:Changing Permissions of Google Container Engine Cluster 【发布时间】:2015-07-02 11:16:56 【问题描述】:我已经能够在开发者控制台中成功创建一个 Google Container Cluster 并将我的应用程序部署到它。这一切都开始正常,但是我发现我无法连接到 Cloud SQL,我明白了;
"Error: Handshake inactivity timeout"
经过一番挖掘,我从 App Engine 或本地计算机连接到数据库没有遇到任何问题,所以我觉得这有点奇怪。就在那时我注意到了集群权限...
当我选择我的集群时,我会看到以下内容;
Permissions
User info Disabled
Compute Read Write
Storage Read Only
Task queue Disabled
BigQuery Disabled
Cloud SQL Disabled
Cloud Datastore Disabled
Cloud Logging Write Only
Cloud Platform Disabled
我真的希望在我的容器引擎节点中同时使用 Cloud Storage 和 Cloud SQL。我已经在我的项目设置中允许访问这些 API,并且我的 Cloud SQL 实例正在接受来自任何 IP 的连接(我之前一直在 App Engine 上的托管 VM 中运行 Node),所以我的想法是 Google 明确禁用这些 API。
所以我的两部分问题是;
有什么方法可以修改这些权限? 这些 API 被禁用有什么好的理由吗? (我想一定有)非常感谢任何帮助!
【问题讨论】:
【参考方案1】:使用节点池,您可以在某种程度上通过创建具有所需范围的新节点池(然后删除旧节点池)将范围添加到正在运行的集群:
gcloud container node-pools create np1 --cluster $CLUSTER --scopes $SCOPES
gcloud container node-pools delete default-pool --cluster $CLUSTER
【讨论】:
【参考方案2】:权限由在集群创建期间附加到节点虚拟机的服务帐户定义(服务帐户在虚拟机实例化后无法更改,因此这是您唯一可以选择权限的时间)。
如果您使用云控制台,请单击创建集群页面上的“更多”链接,您将看到可以添加到集群中节点的权限列表(全部默认为关闭)。切换您想要的任何选项,您应该会在创建集群后看到相应的权限。
如果您使用命令行创建集群,请将--scopes
命令传递给gcloud container clusters create
以在您的节点虚拟机上设置适当的服务帐户范围。
【讨论】:
向现有集群添加权限的选项有哪些?我需要启用 Google 存储。是否需要创建新权限并迁移现有集群? 正如 CJ 下面所说,您可以向新节点池添加权限。如果您想更改集群中每个节点的权限,请创建一个新的节点池,迁移您的工作负载,然后删除原始节点池。 编辑:从 2017 年 8 月起,您可以更新正在运行的实例上的服务帐户范围。见cloud.google.com/compute/docs/access/… @aus_lacy - 更改服务帐户需要停止并重新启动 VM。我不确定这是否适用于属于托管实例组的 VM。【参考方案3】:嗯,我发现了一些可能会感兴趣的东西:
权限属于服务帐户(所谓的Compute Engine default service account
,类似于12345566788-compute@developer.gserviceaccount.com
)
默认情况下,任何 VM 都使用此服务帐户工作。并且它的权限不让我们Cloud SQL
、bucket 等。但是……
但是您可以使用另一个具有正确权限的服务帐户来更改此行为。只需手动创建它并仅设置所需的权限。使用gcloud auth activate-service-account --key-file=/new-service-account-cred.json
将其关闭
就是这样。
【讨论】:
【参考方案4】:对于cloudsql
,可以从指定代理的容器进行连接,如此处所述https://cloud.google.com/sql/docs/postgres/connect-container-engine
【讨论】:
以上是关于更改 Google Container Engine 集群的权限的主要内容,如果未能解决你的问题,请参考以下文章
使用 Container OS (COS) 在 Google Container Engine 中挂载 NFS 卷
地形 | GCP | google_container_node_pool |节点计数
Google App Engine Flexible 和 Google Container Engine 之间的区别?
使用 Go 在 Google Container/Compute Engine 中登录到 Google Cloud
Google Cloud 中的 Google Compute Engine、App Engine 和 Container Engine 有啥区别?