java - GCloud - 无法从 Kubernetes 集群访问 Cloud SQL,但它可以在本地 PC 上运行

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

我想通过 JDBC 从 GCloud Kubernetes Engine 中运行的容器连接到我的 Cloud SQL 数据库 (MySQL)。该容器包含一个带有一些 REST 服务的 Java Spring Boot 应用程序。

当我在本地运行我的 Java 应用程序时,一切正常,应用程序连接到 Cloud SQL 数据库也很好。但是,当我将我的应用程序部署到 GCloud 时,我只会在调用我的服务器 REST API(通过 Postman)时收到此响应:

{
"timestamp": "2018-09-27T06:54:22.987+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Could not open JDBC Connection for transaction; nested exception 
is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications 
link failure\n\nThe last packet sent successfully to the server was 0 
milliseconds ago. The driver has not received any packets from the server.",
"path": "/api/user/getDbs"
}

我已经尝试通过在授权选项卡中添加 0.0.0.0/0 来允许与数据库的所有连接。 我还尝试添加防火墙规则。两者都没有成功。

感谢任何帮助,我可以得到 :)

最佳答案

目前的建议是使用 cloud-sql-proxy 运行 sidecar 容器。这里有一篇很好的文章 ( https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine )。还有一个似乎很有前途的 beta 服务代理。您不需要使用代理授权或导入证书。但是,请确保提供的服务帐户具有正确的连接权限。之后,您的应用程序可以连接到 localhost:POR

https://cloud.google.com/kubernetes-engine/docs/concepts/google-cloud-platform-service-broker

关于java - GCloud - 无法从 Kubernetes 集群访问 Cloud SQL,但它可以在本地 PC 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52531317/

相关文章:

mysql - 无法从不同项目中的 firebase 云函数访问云 SQL

mysql - 将 CSV 加载到 CloudSQL

elasticsearch - 在集群节点上设置 vm.max_map_count

kubernetes - 使服务端口在外部可见

java - Spring JMS 监听器容器未完全停止

Java 使二叉搜索树通用(它有效,但我知道我做得不对)

java - 如何在 JPA 中选择和订购 EmbeddedID

java - 在 cmd 中使用 Eclipse Java 项目运行外部 jar

google-cloud-sql - Cloud SQL 磁盘大小远大于实际数据库

kubernetes - RabbitMQ 管理 - 加载队列或交换时出现 404