kubernetes - Kubernetes Cloud SQL sidecar 连接超时。如何检查凭据是否有效?
问题描述
我正在尝试为 PostgreSQL 设置 Cloud SQL 代理 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 上可用,它就可以工作。
解决方案
我将 5432 指定为我的端口,但正如您在上面的日志中看到的那样,它达到了 3307
代理在您指定的端口(在本例中5432
)本地侦听,并通过端口 3307 连接到您的 Cloud SQL 实例。这是正常的。
如何检查我的凭据是否有问题?
如果 Cloud SQL 实例不存在,或者服务帐号无权访问,则代理会返回授权错误。连接超时错误表示无法访问 Cloud SQL 实例。
我的凭据文件来自我的服务帐户 123-compute@developer.gserviceaccount.com,当我转到我的云 sql 控制台时显示的服务帐户是 p123-@gcp-sa-cloud-sql.iam.gserviceaccount.com。他们好像不一样?
一个只是文件的名称,另一个是服务帐户本身的名称。文件的名称不必与服务帐户的名称匹配。您可以在服务账户页面上查看服务账户的名称和 IAM 角色。
2019/05/13 15:10:58 无法连接到:拨号 tcp:3307:getsockopt:连接超时
此错误意味着代理无法建立与实例的网络连接(通常是因为当前位置的路径不存在)。这有两个常见的原因:
首先,确保没有防火墙或阻止端口 3307 上的出站连接的东西。
其次,由于您使用的是私有 IP,因此您需要确保运行代理的资源满足网络要求。
推荐阅读
- opengl-es - 如何在顶点着色器中使用两个或多个属性?OpenGL ES2.0
- pandas - 在 pandas 的 groupby 之后将 int64 组合成整数列表
- android - Proguard - 找不到引用的方法
- android - 图像未正确写入外部存储和 NullPointerException
- laravel - Laravel 5.6 如何在一篇文章中显示几张图片
- python - MXNET 重塑调用 ctypes
- java - android 插页式广告和横幅广告
- javascript - jquery/javascript 监听要关闭的 3rd 方插件覆盖
- meteor - SimpleSchema 不是构造函数
- angular - 如何使用 AES 解密 Angular 中的字符串