我有两个GKE集群,包括私有和公共集群,并且使用cloudproxy作为gke应用程序访问cloudsql实例的侧容器。
用于开发/测试的公共集群设置
云SQL是通过私有和公共IP启用的。GKE应用程序使用的是cloudproxy,默认选项是ip类型(公共的、私有的),因为Cloud没有任何授权的网络。
在这种情况下,我的应用程序能够连接CloudSQL并顺利工作。据我所知,在这里,到cloudsql的连接应该是私有的,因为没有经过授权的网络配置。
用于生产的专用集群设置
云SQL是通过私有和公共IP启用的。GKE应用程序使用具有默认ip类型选项的cloudproxy (公共的、私有的)
部署文件中的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 Cloud没有任何授权的网络。结果:应用程序无法与Cloud连接
案例2 Cloud具有私有GKE网关作为授权的网络结果:应用程序无法与Cloud连接
从应用程序中删除cloudproxy可能会有效(我还没有进行测试),但它不鼓励在dev env期间使用代理,因为它需要在生产部署期间更改部署文件。
我无法理解是什么导致了gke私有集群中的cloudproxy连接失败。我们不应该在私有集群中使用云代理吗?
云代理无法连接云的原因是cloud被禁用。我已在答覆部分更新我的答覆。
发布于 2019-04-02 04:51:14
@kurtisvg提供了一个信息丰富的答案。
然而,真正的问题是,并启用它解决了问题。在查看日志之后,我发现了下面的条目。
错误403:访问未配置。以前没有在项目XXXXXX中使用过,也没有禁用过。通过访问https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview 来启用它
发布于 2019-04-01 16:06:09
这里的问题似乎是“我们应该在私有集群中使用Cloud代理吗?”答案是“视情况而定”。它不需要连接,但它允许更多的安全性,因为您可以限制对Cloud服务器的不必要访问。
Cloud代理不为您的应用程序提供连接-它只提供身份验证。它必须能够通过现有路径进行连接,但随后使用服务帐户的IAM角色来验证连接。这也意味着它不必来自已被白化的网络,因为它是通过不同的方式进行身份验证的。
如果您想使用代理通过私有IP进行连接(而不是默认为public),请使用-ip_address_types=PRIVATE
--这将告诉代理连接实例的私有IP。(请注意,如果代理缺少网络路径(例如,不在VPC上),则该代理仍将无法连接。
发布于 2021-08-23 15:34:54
对我来说,问题是在GKE集群中启用Private cluster
:(
由于私有GKE集群,它无法访问外部IP地址,因此修复方法是按照https://cloud.google.com/nat/docs/gke-example创建带有云路由器的NAT网关。
提示如果是问题所在,您将无法在登录到容器后从容器中切换到google.com等。
https://stackoverflow.com/questions/55457625
复制相似问题