Kubernetes Cloud SQL sidecar 连接超时。如何检查凭据是否有效?
Kubernetes Cloud SQL sidecar connection timed out. How to check if credentials work?
我正在尝试为 PostgreSQL 设置云 SQL 代理 Docker 图像 here。
我可以让我的应用程序连接到代理 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
我的云sql代理的日志显示超时:
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 实例在 public IP 上可用,它就可以工作。
I specify 5432 as my port, but as you can see in the logs above,it's
hitting 3307
代理在您指定的端口(在本例中为 5432
)上本地侦听,并通过端口 3307 连接到您的云 SQL 实例。这是正常的。
How do I check if it is a problem with my credentials?
代理 returns 如果云 SQL 实例不存在,或者服务帐户没有访问权限,则会出现授权错误。连接超时错误意味着它无法到达 Cloud SQL 实例。
My credentials file is from my service account 123-compute@developer.gserviceaccount.com and the service account shown when I go to my cloud sql console is p123-@gcp-sa-cloud-sql.iam.gserviceaccount.com. They don't seem the same?
一个只是文件的名称,另一个是服务帐户本身的名称。文件的名称不必与服务帐户的名称相匹配。您可以在服务帐户 page 上查看服务帐户的名称和 IAM 角色。
2019/05/13 15:10:58 couldn't connect to : dial tcp :3307: getsockopt: connection timed out
此错误表示代理无法与实例建立网络连接(通常是因为从当前位置开始的路径不存在)。造成这种情况的常见原因有两个:
首先,确保没有防火墙或其他东西阻止端口 3307 上的出站连接。
其次,由于您使用的是私有 IP,因此您需要确保您作为 运行 代理的资源符合 networking requirements。
代理侦听端口 3307。文档中提到了这一点
Port 3307 is used by the Cloud SQL Auth proxy to connect to the Cloud SQL Auth proxy server. -- https://cloud.google.com/sql/docs/postgres/connect-admin-proxy#troubleshooting
您可能需要 create a firewall 如下所示:
- 方向:出口
- 比赛动作:允许
- 目标过滤器:IP 范围
0.0.0.0/0
- 协议和端口:tcp:3307 & tcp:5432
我正在尝试为 PostgreSQL 设置云 SQL 代理 Docker 图像 here。 我可以让我的应用程序连接到代理 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
我的云sql代理的日志显示超时:
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 实例在 public IP 上可用,它就可以工作。
I specify 5432 as my port, but as you can see in the logs above,it's hitting 3307
代理在您指定的端口(在本例中为 5432
)上本地侦听,并通过端口 3307 连接到您的云 SQL 实例。这是正常的。
How do I check if it is a problem with my credentials?
代理 returns 如果云 SQL 实例不存在,或者服务帐户没有访问权限,则会出现授权错误。连接超时错误意味着它无法到达 Cloud SQL 实例。
My credentials file is from my service account 123-compute@developer.gserviceaccount.com and the service account shown when I go to my cloud sql console is p123-@gcp-sa-cloud-sql.iam.gserviceaccount.com. They don't seem the same?
一个只是文件的名称,另一个是服务帐户本身的名称。文件的名称不必与服务帐户的名称相匹配。您可以在服务帐户 page 上查看服务帐户的名称和 IAM 角色。
2019/05/13 15:10:58 couldn't connect to : dial tcp :3307: getsockopt: connection timed out
此错误表示代理无法与实例建立网络连接(通常是因为从当前位置开始的路径不存在)。造成这种情况的常见原因有两个:
首先,确保没有防火墙或其他东西阻止端口 3307 上的出站连接。
其次,由于您使用的是私有 IP,因此您需要确保您作为 运行 代理的资源符合 networking requirements。
代理侦听端口 3307。文档中提到了这一点
Port 3307 is used by the Cloud SQL Auth proxy to connect to the Cloud SQL Auth proxy server. -- https://cloud.google.com/sql/docs/postgres/connect-admin-proxy#troubleshooting
您可能需要 create a firewall 如下所示:
- 方向:出口
- 比赛动作:允许
- 目标过滤器:IP 范围
0.0.0.0/0
- 协议和端口:tcp:3307 & tcp:5432