我有 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。我已经在答案部分更新了我的答案。