我无法在GCP中连接到Cloud SQL, 我的spring boot应用程序托管在Google Kubernetes中, 我可以将我的应用程序从本地连接到数据库 但是当我在kubernetes中部署我的应用程序映像时它不起作用 我检查了日志并得到了
{
insertId: "s=5ae000c9c858402ba514b2f9a2a7d34d;i=557f; b=fef2848a05ed422b811cda756eea59d6;m=2a5164d50;t=58dde1640752b; x=4a97c620c9fbf136-0@aa"
logName: "projects/finomatic /logs/cloudsql.googleapis.com%2Fmysql.err"
receiveTimestamp: "2019-07-17T10:38:04.977705316Z"
resource: {…}
severity: "INFO"
textPayload: "2019-07-17T10:37:59.135897Z 1340 [Note] Aborted connection 1340 to db: 'finomatic' user: 'root' host: ' cloudsqlproxy~129.41.84.82' (Got an error reading communication packets)"
timestamp: "2019-07-17T10:37:59.136950Z"
}
所以我在“ SQL连接”选项卡中添加了群集IP,但仍然收到此错误
当我预览我的应用程序Docker映像时,我的API正常
部署api后无法正常工作
在deploymenet后收到此错误
Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
答案 0 :(得分:0)
尽管您已在Cloud SQL中将客户端IP列入白名单,GKE has masquerading active意味着所有出站Internet连接都将被NAT到该节点的外部地址。
ip-masq-agent
配置iptables
规则,以在将流量发送到节点和群集IP范围之外的目的地时处理伪装的节点/ Pod IP地址。 Pod IP地址被屏蔽在其节点地址的后面。
还有GKE的couple of ways to connect to Cloud SQL。我认为,最直接的方法是在您的广告连播中使用Cloud SQL Proxy deployed as a sidecar container。
如果不能选择代理,则可以调整IP masquerade agent以绕过此SNAT规则并保留请求的源IP。