Connecting to Google Cloud SQL from Container Engine: can't resolve cloud sql proxy

10/1/2016

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
-- Simon Robb
google-cloud-sql
google-kubernetes-engine

1 Answer

10/3/2016

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

-- Vadim
Source: StackOverflow