我已经能够在开发者控制台中成功创建Google容器群集并将我的应用部署到它。这一切都很好,但我发现我无法连接到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
我真的希望在我的容器引擎节点中同时使用云存储和云端SQL。我允许在我的项目设置中访问每个API,我的Cloud SQL实例正在接受来自任何IP的连接(我之前在App Engine上的托管虚拟机中运行过Node),所以我的想法是Google明确禁用这些API。
所以我的两部分问题是;
非常感谢任何帮助!
答案 0 :(得分:17)
使用节点池,您可以通过创建具有所需范围的新节点池(然后删除旧节点),排序将范围添加到正在运行的集群中:
gcloud container node-pools create np1 --cluster $CLUSTER --scopes $SCOPES
gcloud container node-pools delete default-pool --cluster $CLUSTER
答案 1 :(得分:13)
权限由群集创建期间附加到节点VM的服务帐户定义(在实例化VM后无法更改服务帐户,因此这是您唯一可以选择权限的时间)。
如果您使用云控制台,请单击“创建群集”页面上的“更多”链接,您将看到可以添加到群集中节点的权限列表(所有权限都默认为关闭)。切换您想要的任何内容,您应该在创建群集后看到相应的权限。
如果使用命令行创建群集,请将--scopes
命令传递给gcloud container clusters create
以在节点VM上设置相应的服务帐户范围。
答案 2 :(得分:0)
对于cloudsql
,可以从指定代理的容器进行连接,如此处所述https://cloud.google.com/sql/docs/postgres/connect-container-engine
答案 3 :(得分:0)
嗯,我发现了一些可能很有趣的东西:
权限属于服务帐户(所谓的Compute Engine default service account
,看起来像12345566788-compute@developer.gserviceaccount.com
)
默认情况下,任何VM均可使用此服务帐户运行。而且它的权限不允许我们Cloud SQL
,存储桶等。但是...
但是您可以使用具有正确权限的另一个服务帐户来更改此行为。只需手动创建它,然后仅设置所需的烫发即可。使用gcloud auth activate-service-account --key-file=/new-service-account-cred.json
就是这样。