无法通过Cloud Shell Proxy By Cloud SQL Proxy进行连接

时间:2017-02-17 06:36:34

标签: google-cloud-platform google-cloud-sql

我正在关注GAE的Django示例,并且无法通过Google Cloud Shell的代理连接到Cloud SQL实例。可能与权限设置有关,因为我看到请求未经授权,

其他背景,

  1. " gcloud beta sql connect auth-instance --user = root"连接没问题。

  2. 我有一个SQL代理客户端的服务帐户。

  3. 我可能会错过一些东西。有人可以请一些亮点吗?提前谢谢。

    提前致谢。

    代理日志:

    ./cloud_sql_proxy -instances=auth-158903:asia-east1:auth-instance=tcp:3306
    
    2017/02/17 14:00:59 Listening on 127.0.0.1:3306 for auth-158903:asia-east1:auth-instance
    2017/02/17 14:00:59 Ready for new connections
    2017/02/17 14:01:07 New connection for "auth-158903:asia-east1:auth-instance"
    2017/02/17 14:03:16 couldn't connect to "auth-158903:asia-east1:auth-instance": dial tcp 107.167.191.26:3307: getsockopt: connection timed out
    

    客户日志:

    mysql -u root -p --host 127.0.0.1
    Enter password: 
    ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
    

    我也尝试使用凭据文件,但仍然没有运气,

    ./cloud_sql_proxy -instances=auth-158903:asia-east1:auth-instance=tcp:3306 -credential_file=Auth-2eede8ae0d0b.jason
    
    2017/02/17 14:21:36 using credential file for authentication; email=sql-proxy-client@auth-158903.iam.gserviceaccount.com
    2017/02/17 14:21:36 Listening on 127.0.0.1:3306 for auth-158903:asia-east1:auth-instance
    2017/02/17 14:21:36 Ready for new connections
    2017/02/17 14:21:46 New connection for "auth-158903:asia-east1:auth-instance"
    2017/02/17 14:21:48 couldn't connect to "auth-158903:asia-east1:auth-instance": ensure that the account has access to "auth-158903:asia-east1:auth-instance" (and make sure there's no typo in that name). Error during get instance auth-158903:asia-east1:auth-instance: googleapi:     **Error 403: The client is not authorized to make this request., notAuthorized**
    

3 个答案:

答案 0 :(得分:2)

如果我只提供服务帐户“Cloud SQL Client”IAM角色,我可以完全重现此问题。当我向我的服务帐户提供“Cloud SQL Viewer”角色时,它也可以连接。我建议你尝试一下,看看它是否有帮助。

答案 1 :(得分:2)

Cloud SQL代理使用端口3307而不是更常用的MySQL端口3306.这是因为它以不同的方式使用TLS并具有不同的IP ACL。因此,允许MySQL流量的防火墙默认情况下不允许使用Cloud SQL代理。

查看网络上是否有阻止端口3307的防火墙。要使用Cloud SQL代理,请将此端口授权为出站连接。

答案 2 :(得分:0)

似乎是网络连接问题。 如果您使用私有IP,请仔细阅读以下内容: https://cloud.google.com/sql/docs/mysql/private-ip

请注意,Cloud SQL实例位于Google托管的网络中,该代理旨在简化VPC网络中与数据库的连接。

简而言之:无法在本地计算机上运行cloud-sql-proxy,因为它不在VPC网络中。它应在与数据库连接到同一VPC的Compute Engine VM上运行。

通常,我要从本地计算机使用gcloud ssh并通过计算引擎中的小型VM转发端口,例如:

gcloud beta compute ssh --zone "europe-north1-b" "instance-1" --project "my-project" -- -L 3306:cloud_sql_server_ip:3306

然后,您可以连接到localhost:3306(确保没有其他程序在运行,或者将第一个端口号更改为本地可用的端口号)