我一直在探索安全连接到 Google Cloud SQL 数据库的方法。我们使用 Google Kubernetes Engine 来部署我们的 Java Spring 应用程序。
因此,https: //cloud.google.com/sql/docs/mysql/connect-kubernetes-engine 提到了从 kubernetes 连接到云 sql 的两种方法。我们不能使用私有 IP 方法,因为我们没有 VPC 原生集群。所以我们选择 Cloud SQL Proxy docker image 作为连接媒介。
然后,考虑到https://cloud.google.com/sql/docs/postgres/external-connection-methods,提到了以下选项:
我们不能采用公共 IP 方法,因为我们的 kubernetes pod IP 地址将不断变化。我们已经入围了 Cloud SQL 代理 docker 镜像。所以我们只剩下 JDBC 套接字库了。
因此,比较 Cloud SQL 代理和 JDBC 套接字库:
- Cloud SQL 代理将是我们的 kubernetes pod 中的一个 sidecar 容器以及我们的应用程序容器。应用程序容器将使用云 sql 凭据连接到“localhost:5432”(代理)。代理将获得访问云 sql 数据库的服务帐户。代理提供与云 sql 的安全连接。
- JDBC 套接字库还提供与云 sql 的安全连接。需要在应用程序中添加 Maven 依赖项,应用程序只需提供正确的数据库连接字符串。
从上面的比较来看,JDBC Socket Library 似乎是更好的方法,因为我们不需要 sidecar 容器 - 云 sql 代理。
在应用程序部署在 Google Kubernetes Engine 中的情况下,与 JDBC 套接字库相比,Cloud SQL 代理是否有任何优势?