Kubernetes Cloud SQL Sidecar连接超时。如何检查凭证是否有效?

时间:2019-05-13 15:56:11

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

我正在尝试为here设置PostgreSQL的Cloud SQL Proxy Docker映像。 我可以让我的应用连接到代理docker映像,但是代理超时。我怀疑这是我的凭据或端口,那么如何调试并确定它是否有效? 这就是我的项目中的东西

kubectl create secret generic cloudsql-instance-credentials --from-file=credentials.json=my-account-credentials.json

我的部署规范摘要:

spec:
      containers:
        - name: mara ...
        - name: cloudsql-proxy
          image: gcr.io/cloudsql-docker/gce-proxy:1.11
          command: ["/cloud_sql_proxy",
                    "-instances=<MY INSTANCE NAME>=tcp:5432",
                    "-credential_file=/secrets/cloudsql/credentials.json"]
          volumeMounts:
            - name: cloudsql-instance-credentials
              mountPath: /secrets/cloudsql
              readOnly: true
      volumes:
        - name: cloudsql-instance-credentials
          secret:
            secretName: cloudsql-instance-credentials

cloudsql-proxy的日志显示超时:

2019/05/13 15:08:25 using credential file for authentication; email=646092572393-compute@developer.gserviceaccount.com
2019/05/13 15:08:25 Listening on 127.0.0.1:5432 for <MY INSTANCE NAME>
2019/05/13 15:08:25 Ready for new connections
2019/05/13 15:10:48 New connection for "<MY INSTANCE NAME>"
2019/05/13 15:10:58 couldn't connect to <MY INSTANCE NAME>: dial tcp <MY PRIVATE IP>:3307: getsockopt: connection timed out

问题:

  • 我将5432指定为我的端口,但是正如您在上面的日志中所看到的那样,它命中了3307。这是否正常?如果不是,我如何指定5432?

  • 如何检查我的凭据是否有问题?我的凭据文件来自我的服务帐户123-compute@developer.gserviceaccount.com 并且当我进入云sql控制台时显示的服务帐户是p123-<somenumber>@gcp-sa-cloud-sql.iam.gserviceaccount.com。他们看起来不一样吗?会有所不同吗?

如果我使Cloud SQL实例在公共IP上可用,那么它将起作用。

2 个答案:

答案 0 :(得分:1)

  

我将5432指定为我的端口,但是正如您在上面的日志中看到的那样,它是   达到3307

代理在您指定的端口(在本例中为5432)上本地侦听,并通过端口3307连接到Cloud SQL实例。这是正常现象。

  

如何检查我的凭据是否有问题?

如果Cloud SQL实例不存在,或者服务帐户没有访问权限,则代理返回授权错误。连接超时错误表示它无法访问Cloud SQL实例。

  

我的凭据文件来自我的服务帐户123-compute@developer.gserviceaccount.com,当我转到云SQL控制台时显示的服务帐户是p123-@gcp-sa-cloud-sql.iam.gserviceaccount.com 。他们看起来不一样吗?

一个只是文件名,另一个是服务帐户本身的名称。文件名不必与服务帐户名匹配。您可以在服务帐户page上检查服务帐户的名称和IAM角色。

  

2019/05/13 15:10:58无法连接到:拨打tcp:3307:getsockopt:连接超时

此错误意味着代理无法建立到实例的网络连接(通常是因为当前位置的路径不存在)。造成这种情况的常见原因有两个:

首先,请确保端口3307上没有防火墙或任何东西阻止出站连接。

第二,由于您正在使用专用IP,因此需要确保运行代理的资源符合networking requirements

答案 1 :(得分:0)

代理监听端口 3307。文档中提到了这一点

<块引用>

Cloud SQL Auth 代理使用端口 3307 连接到 Cloud SQL Auth 代理服务器。 -- another post

您可能需要https://cloud.google.com/sql/docs/postgres/connect-admin-proxy#troubleshooting如下:

  • 方向:出口
  • 匹配操作:允许
  • 目标过滤器:IP 范围 0.0.0.0/0
  • 协议和端口:tcp:3307 & tcp:5432