除了通过Docker容器中的套接字,通过代理连接到Google Cloud SQL在所有场景中都有效



希望我做错了什么,我已经阅读了所有文档并搜索了论坛,但似乎无法弄清我遇到的问题。我正在使用OSX btw.

正在工作的内容:

  1. 通过TCP或Socket使用代理从本地操作系统连接到云SQL
  2. 通过TCP使用容器中的代理从本地操作系统连接到云SQL
  3. 通过TCP使用同一pod中的代理从GKE连接到云SQL

不起作用的东西:

  1. 通过套接字使用contain中的代理从本地操作系统连接到云SQL
  2. 通过套接字使用同一pod中的代理从GKE连接到云SQL

我怀疑这两个问题实际上是同一个问题。我使用这个命令在容器内运行代理:

docker run -v [PATH]:/cloudsql  
gcr.io/cloudsql-docker/gce-proxy /cloud_sql_proxy -dir=/cloudsql  
-instances=[INSTANCE_CONNECTION_NAME] -credential_file=/cloudsql/[FILE].json

并且关联的套接字是与目录一起生成的。然而,当我尝试连接时,我会得到以下错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/cloudsql/node-sql:us-central1:nodedb' (61)

当我尝试连接时,代理不会生成新行,这让我认为它没有接收到请求,它只是说Ready for new connections并等待。

你知道出了什么问题,或者我该如何进一步解决这个问题吗?

对于"通过套接字在同一个pod中使用代理从GKE连接到云SQL",您可以按照教程进行操作吗https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine?我们有一个工作的WordPress示例,它将cloudsql代理作为sidecar容器(即在同一个Pod中,但通过TCP)。

我不认为你可以"通过套接字在同一个pod中",除非你在一个容器中运行多个进程(这不应该是最佳实践)。如果你使用sidecar容器,你可以使用TCP,所以你不需要unix套接字(此外,我不确定如何在Pod的容器之间共享文件)。

此外,docker run -v /local.sock:/remote.sock(我认为)将在本地创建一个文件/目录作为/local.sock,并使其在容器内可用作为/remote.sock。这可能不起作用,因为docker引擎不知道/local.sock是Unix套接字,它创建了一个常规文件

相关内容

  • 没有找到相关文章

最新更新