连接 Spring Boot 应用程序和谷歌 Cloud SQL 的推荐方式是啥?

Posted

技术标签:

【中文标题】连接 Spring Boot 应用程序和谷歌 Cloud SQL 的推荐方式是啥?【英文标题】:What is the recomended way to connect spring boot application and google Cloud SQL?连接 Spring Boot 应用程序和谷歌 Cloud SQL 的推荐方式是什么? 【发布时间】:2020-04-28 05:40:41 【问题描述】:

当我阅读google documentation 时,我看到推荐的方式是使用云 sql 代理:

使用 Google Kubernetes Engine 安全地连接到 Cloud SQL 公共 IP 地址,您必须使用 Cloud SQL 代理。

当我阅读 spring documentation 时,我看到了以下实现方式:

添加依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-gcp-starter-sql-postgresql</artifactId>
</dependency>

并指定属性:

spring.cloud.gcp.sql.instance-connection-name
spring.cloud.gcp.sql.database-name
spring.datasource.username
spring.datasource.password

我尝试了 spring 方式并且它有效,但我不确定这是否是推荐的方式,因为 google 文档。你能澄清一下吗?

附言

当我在 cloudSQL 端从公共 ip 切换到私有 ip 时,Spring boot 方法停止工作,我不知道如何恢复它?

【问题讨论】:

您的应用程序是否真的在 GKE 中运行? @cricket_007 你是对的! 好的,你说的“从公共IP切换到私人IP”是什么意思?你在哪里换的?在应用程序内部? 我的意思是:dl4.joxi.net/drive/2020/01/10/0005/3037/338909/09/… @cricket_007 请查看之前的评论(上) 【参考方案1】:

spring-cloud-gcp-starter-sql-postgresql 是一个很棒的库,如果您正在构建 Spring 应用程序,我建议您使用它。它使用Cloud SQL JDBC Socket Factory,它使用与 Cloud SQL 代理相同的机制进行连接。

关于切换到公共 IP 和私有 IP - 有很多 specific requirements to using private IP。对于 GKE,您需要确保您使用的是 VPC 原生集群,并且您与您的实例位于同一区域和 VPC 中。

【讨论】:

您能否说明如何在公共 IP 和私有 IP 之间进行选择? 公网IP和Cloud SQL JDBC SOCKET FACTORY一起使用安全吗? 私有 IP 要求您从连接到 VPC 的资源进行连接。私有 IP 具有较低的延迟(因为流量保持在本地),但根据您的需求(区域、资源类型等)并不总是一种选择。通常,如果私有 IP 适用于您的设计并且您希望提高网络性能,我建议使用它。否则,使用公共 IP。 通过 Cloud SQL JDBC Socket Factory 的公共 IP 是安全的 - 它使用 IAM 凭证在 1 小时轮换中创建一个临时证书,用于使用 TLS 对您的数据进行身份验证和加密。 私有api可以和Cloud SQL JDBC SOCKET Factory一起使用吗?

以上是关于连接 Spring Boot 应用程序和谷歌 Cloud SQL 的推荐方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Firebase 身份验证和谷歌登录时注销时“GoogleApiClient 尚未连接”

用于与 postgresql 在内存中兼容 h2 的 Spring Boot 属性

使用 @MockBean 的 Spring Boot 集成测试不释放 jdbc 连接

谷歌电子表格和谷歌应用引擎如何实现交互

谷歌计算引擎和谷歌容器引擎有啥区别?

即时运行和谷歌地图的问题