是否有方案可让Spring Cloud Dataflow、Skipper对接GCP Cloud SQL(MySQL/PostgreSQL)
结论
不需要等待Spring Cloud Dataflow内置spring-cloud-gcp组件即可完成Cloud SQL对接,你遇到的报错主要是网络配置和数据库连接参数错误导致的,可按以下步骤排查修复:
一、优先排查网络连通性
你本地工具可正常访问不代表K8s集群内的Pod拥有相同的网络权限,请先完成以下校验:
- 确认GKE集群和Cloud SQL实例处于同一VPC,或已配置VPC对等连接打通跨VPC网络
- 确认Cloud SQL的私有IP访问白名单已放开GKE集群的Pod网段、Node网段的访问权限,VPC防火墙规则未拦截3306、5432端口的集群内部请求
- 进入任意SCDF相关Pod内部,执行工具命令测试端口连通性,若测试不通过先解决网络策略问题再调整数据库配置:
# 测试MySQL连通性 nc -zv <Cloud SQL MySQL私有IP> 3306 # 测试PostgreSQL连通性 nc -zv <Cloud SQL PostgreSQL私有IP> 5432
二、修正数据库连接配置
MySQL配置修正
你当前配置存在两处错误:一是连接端口不能填0,必须明确指定默认端口3306;二是使用MariaDB驱动时,URL协议头需要对应改为jdbc:mariadb,正确配置参考:
mariadb.enabled=false externalDatabase.dataflow.url=jdbc:mariadb://<Cloud SQL私有IP>:3306/dataflow?useSSL=false&allowPublicKeyRetrieval=true externalDatabase.dataflow.username=root externalDatabase.dataflow.password=<你的数据库密码> externalDatabase.driver=org.mariadb.jdbc.Driver
PostgreSQL配置修正
你当前配置的URL未指定目标数据库名称,需要提前在Cloud SQL PostgreSQL实例中创建dataflow数据库,并在URL中补充库名,正确配置参考:
mariadb.enabled=false externalDatabase.dataflow.url=jdbc:postgresql://<Cloud SQL私有IP>:5432/dataflow?sslmode=disable externalDatabase.dataflow.username=postgres externalDatabase.dataflow.password=<你的数据库密码> externalDatabase.driver=org.postgresql.Driver
三、可选替代方案
如果VPC网络配置存在限制无法调整,可在SCDF Pod中注入Cloud SQL Auth Proxy作为Sidecar,通过服务账号授权后直接用localhost地址连接数据库,不需要配置私有IP白名单,安全性和易用性更高。
内容的提问来源于stack exchange,提问作者fiidim
相关产品推荐
相关产品推荐

