且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

从Container Engine连接到Google Cloud SQL:无法解析Cloud sql代理

更新时间:2022-12-01 11:04:55

您似乎将主机指定为127.0.0.1:3306而不是127.0.0.1.

I'm trying to connect to Google Cloud SQL from a node app, which is running in a Google Container Engine pod managed by Kubernetes. I've followed the instructions here to create a Cloud SQL proxy.

When I run the app, I receive:

{
    "code": "ENOTFOUND",
    "errno": "ENOTFOUND",
    "syscall": "getaddrinfo",
    "hostname": "127.0.0.1:3306",
    "host": "127.0.0.1:3306",
    "port": 3306,
    "fatal": true
}

So it looks as though the proxy can't be resolved.

I've run kubectl describe pods <pod_name> and the proxy appears to be healthy:

cloudsql-proxy:
    Container ID:   docker://47dfb6d22d5e0924f0bb4e1df85220270b4f21e971228d03148fef6b3aad6c6c
    Image:      b.gcr.io/cloudsql-docker/gce-proxy:1.05
    Image ID:       docker://sha256:338793fcb60d519482682df9d6f88da99888ba69bc6da96b18a636e1a233e5ec
    Port:       
    Command:
      /cloud_sql_proxy
      --dir=/cloudsql
      -instances=touch-farm:asia-east1:api-staging=tcp:3306
      -credential_file=/secrets/cloudsql/credentials.json
    Requests:
      cpu:          100m
    State:          Running
      Started:          Sat, 01 Oct 2016 20:38:40 +1000
    Ready:          True
    Restart Count:      0
    Environment Variables:  <none>

The only thing that seems unusual to me is that the Port field is blank, however there was no instruction in the guide referenced above to expose a port in the deployment config file. I've also tried specifying the 3306 port in the configuration file, but although the port then shows in the kubectl describe pods output, node still can't find the proxy.

What am I missing here? Why can't I resolve the proxy?

Edit (more info)

Logs from the cloudsql-proxy container:

2016-10-01T11:44:40.108529344Z 2016/10/01 11:44:40 Listening on 127.0.0.1:3306 for touch-farm:asia-east1:api-staging
2016-10-01T11:44:40.108561194Z 2016/10/01 11:44:40 Ready for new connections

It looks like you are specifying the host as 127.0.0.1:3306 instead of 127.0.0.1.