繁体   English   中英

GKE私有集群与云sql代理连接

[英]GKE private cluster and cloud sql proxy connection

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

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

Cloud SQL 支持私有和公共 IP。 GKE 应用程序使用带有默认 IP 类型(公共、私有)选项的 cloudproxy,如下所示 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 会起作用(我尚未测试),但它不鼓励在 dev env 期间使用代理,因为它需要在生产部署期间更改部署文件。

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

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

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

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

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

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

然而,真正的问题是SQL Admin API并使其能够解决问题。 在查看我在下面的条目中找到的日志之后。

错误403:未配置访问。 Cloud SQL Admin 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 等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM