1

我有 2 个私有和公共 GKE 集群,并使用 cloudproxy 作为 gke 应用程序访问 cloudsql 实例的 sidecar 容器。

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

Cloud SQL 同时启用了私有和公共 IP。GKE 应用程序使用 cloudproxy,默认选项为 ip 类型(公共、私有),如下所示 Cloud SQL 没有任何授权网络。

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

用于生产的私有集群设置

Cloud SQL 同时启用了私有和公共 IP。GKE 应用正在使用具有默认 IP 类型(公共、私有)选项的 cloudproxy

部署文件中的 cloudsql-proxy 设置

  - 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 Cloud SQL 没有任何授权网络。结果:应用程序无法连接 Cloud SQL

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

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

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

更新 导致云代理无法连接云 sql 的原因被禁用 Cloud SQL Admin API。我已经在答案部分更新了我的答案。

4

3 回答 3

1

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

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

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

于 2019-04-01T16:06:09.513 回答
0

@kurtisvg 提供了一个信息丰富的答案。

然而,真正的问题是 SQL Admin API 并启用它解决了这个问题。在查看日志后,我发现下面的条目。

错误 403:未配置访问。Cloud SQL Admin API 之前未在项目 XXXXXX 中使用过或已禁用。通过访问https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview启用它?

于 2019-04-02T04:51:14.523 回答
0

Private cluster我的问题是在 GKE 集群中启用:(

由于私有 GKE 集群,它无法访问外部 IP 地址,修复方法是根据https://cloud.google.com/nat/docs/gke-example创建一个带有云路由器的 NAT 网关。

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

于 2021-08-23T15:34:54.103 回答