通过代理连接到Google Cloud SQL可以在除Docker容器中的套接字之外的所有方案中使用

时间:2017-11-10 11:47:53

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

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

正在发挥作用的事情:

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

    无效的事情:

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

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

      $ cmake --version
      cmake version 3.7.2
      

      并且正在使用目录生成关联的套接字。但是,当我尝试连接时,我收到以下错误:

      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) 并等待。

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

1 个答案:

答案 0 :(得分:1)

For"使用代理在同一个pod中通过socket"从GKE连接到云SQL。你能按照https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine的教程来学习吗?我们有一个有效的WordPress示例,它将cloudsql-proxy作为sidecar容器(即在同一个Pod中,但通过TCP)。

我认为你不能通过socket"在同一个pod中做到#34;除非您在一个容器中运行多个进程(您不应该将其作为最佳实践)。如果你做一个sidecar容器,你可以使用TCP,所以你不需要一个unix套接字(而且,我不知道你如何在Pod的容器之间共享文件)。

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