我已经能够在开发者控制台中成功创建一个谷歌容器集群,并将我的应用程序部署到它上。这一切都开始得很好,但我发现我无法连接到云SQL,我明白;
"Error: Handshake inactivity timeout"
经过一番挖掘,我从应用程序引擎或本地机器连接到数据库时没有遇到任何问题,所以我觉得这有点奇怪。就在那时,我注意到集群权限。。。
当我选择集群时,我会看到以下内容;
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
我真的希望在我的容器引擎节点中同时使用云存储和云SQL。我已经允许在我的项目设置中访问这些API中的每一个,并且我的云SQL实例接受来自任何IP的连接(我之前一直在App Engine上的托管虚拟机中运行Node),所以我的想法是Google正在显式禁用这些API。
所以我的两部分问题是:;
- 有什么方法可以修改这些权限吗
- 这些API被禁用的原因是什么?(我想肯定有)
非常感谢您的帮助!
使用节点池,您可以通过创建具有所需作用域的新节点池(然后删除旧节点池),将作用域添加到正在运行的集群中:
gcloud container node-pools create np1 --cluster $CLUSTER --scopes $SCOPES
gcloud container node-pools delete default-pool --cluster $CLUSTER
权限由创建集群期间连接到节点虚拟机的服务帐户定义(虚拟机实例化后无法更改服务帐户,因此这是您唯一可以选择权限的时间)。
如果您使用云控制台,请单击创建集群页面上的"更多"链接,您将看到一个可以添加到集群中节点的权限列表(所有权限都默认为关闭)。切换任何您想要的,您应该在创建集群后看到适当的权限。
如果使用命令行创建集群,请将--scopes
命令传递给gcloud container clusters create
,以在节点虚拟机上设置适当的服务帐户作用域。
嗯,我发现了一些可能感兴趣的东西:
-
权限属于服务帐户(所谓的
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
进行切换 -
就是这样。
对于cloudsql
,可以从指定代理的容器进行连接,如下所述https://cloud.google.com/sql/docs/postgres/connect-container-engine