GKE 私有集群和云 SQL 代理连接



我有 2 个私有和公共的 GKE 集群,并使用云代理作为 gke 应用程序的边车容器来访问 cloudsql 实例。

用于开发/测试的公共群集设置

云 SQL 同时使用专用和公共 IP 启用。 GKE 应用程序正在使用具有 IP 类型(公共、私有)默认选项的云代理,如下所示 Cloud SQL 没有任何授权网络。

在这种情况下,我的应用程序能够连接 CloudSQL 并且运行顺利。据我了解,这里与 cloudsql 的连接应该以私有方式进行,因为没有配置授权网络。

用于生产的专用群集设置

云 SQL 同时使用专用和公共 IP 启用。 GKE 应用程序正在使用具有 IP 类型(公共、私有)默认选项的云代理

部署文件中的 CloudSQL 代理设置

- name: cloudsql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.11
command: ["/cloud_sql_proxy"]
args: ["-instances=$(REAL_DB_HOST)=tcp:$(REAL_DB_PORT)","-credential_file=/secrets/cloudsql/credentials.json"]

案例 1云 SQL 没有任何授权网络。 结果:应用程序无法与云 SQL 连接

案例2云SQL有内网GKE NAT网关作为授权网络 结果:应用程序无法与云 SQL 连接

可能从应用程序中删除 cloudproxy 将起作用(我尚未测试),但它不鼓励在开发环境期间使用代理,因为它需要在生产部署期间更改部署文件。

我无法理解是什么原因导致 gke 私有集群中与云代理的连接失败。我们不应该在私有集群中使用云代理吗?

更新由于云代理无法连接云 sql 的原因被禁用云 SQL 管理员 API。我已经在答案部分更新了我的答案。

看起来这里的问题是"我们应该在专用集群中使用Cloud SQL代理吗?"答案是"这取决于"。它不需要连接,但它允许更高的安全性,因为您可以限制对 Cloud SQL 服务器的不必要访问。

云 SQL 代理不为应用程序提供连接 - 它仅提供身份验证。它必须能够通过现有路径进行连接,但随后使用服务账户的 IAM 角色对连接进行身份验证。这也意味着它不必来自列入白名单的网络,因为它已通过其他方式进行身份验证。

如果要使用代理通过私有 IP(而不是默认为公有)进行连接,请使用-ip_address_types=PRIVATE- 这将告诉代理改为使用实例的私有 IP 进行连接。(请注意,如果代理缺少网络路径(例如,不在 VPC 上),则该代理仍无法连接。

@kurtisvg提供了翔实的答案。

但是,真正的问题是SQL管理员API,启用它解决了这个问题。查看日志后,我在条目下方找到了。

错误 403:未配置访问权限。云 SQL 管理员 API 以前未在项目 XXXXXX 中使用过,或者它已被禁用。通过访问 https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview 启用它?

对我来说,问题是在 GKE 集群:(中启用Private cluster

由于专用 GKE 群集,它无法访问外部 IP 地址,解决方法是按照 https://cloud.google.com/nat/docs/gke-example 创建带有云路由器的 NAT 网关。

提示如果问题是您在登录容器后将无法从容器中ping到 google.com 等。

相关内容

  • 没有找到相关文章

最新更新