如何从gcloud中的容器化应用程序连接到Cloud SQL?

时间:2019-03-14 19:09:51

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

我正在使用GCloud,我有一个kubernate集群和一个云sql实例。

我有一个简单的node.js应用程序,它使用数据库。当我使用gcloud app deploy进行部署时,它可以访问数据库。但是,当我构建一个dockerimage并公开它时,它无法到达数据库。

  1. 我公开了以下Docker应用程序:https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app
  2. Cloud SQL取消启用了私有IP,我正在使用cloud sql代理进行连接
  3. 在app.yaml中,我确实指定了base_settings:cloud_sql_instances。我在socketPath配置中使用相同的值进行mysql连接。
  4. 泊坞窗日志中的错误是:

    (节点:1)UnhandledPromiseRejection警告:错误:连接ENOENT / cloudsql / x-alcove-224309:europe-west1:learning     在PipeConnectWrap.afterConnect上[完成时](net.js:1097:14)

能否请您解释一下如何从dockerized节点应用程序连接到Cloud sql。

3 个答案:

答案 0 :(得分:1)

当您使用gcloud app deploy在App Engine上部署应用程序时,平台会在一个容器中运行该应用程序,并在侧面容器中运行该容器,以负责运行cloud_sql_proxy(您可以通过指定{{1} }放在您的app.yaml文件中。

Kubernetes Engine不使用app.yaml文件,并且不向您提供此侧面车载容器,因此您必须进行设置。 public doc显示了如何通过为数据库凭据创建密钥并使用side-car容器配置更新部署文件来实现此目的。文档中显示的示例如下所示:

base_settings:cloud_sql_instances

答案 1 :(得分:1)

通常,最好的方法是在与您的应用程序相同的容器中使用Sidecar容器进行连接。您可以在“从Google Kubernetes Engine连接”页面here中找到示例。还有一个代码实验室here可能会更深入,可能会有所帮助。

答案 2 :(得分:0)

可以使用内部IP地址进行连接的文档mentions。 有人尝试过吗?