从专用GKE集群连接到公共云SQL



我正在尝试使用云SQL代理从GKE集群连接到具有公共IP的云SQL实例。我用以下命令创建了集群:

gcloud services enable compute.googleapis.com
gcloud services enable container.googleapis.com
gcloud container clusters create my-cluster 
--disk-size=10GB 
--machine-type=e2-small 
--node-locations=us-central1-b,us-central1-c,us-central1-f 
--num-nodes=1 
--preemptible 
--release-channel=regular 
--workload-pool=my-production.svc.id.goog 
--zone=us-central1-f 
--no-enable-master-authorized-networks 
--enable-ip-alias 
--enable-private-nodes 
--master-ipv4-cidr 172.16.0.32/28

我用以下命令创建了我的云SQL:

gcloud sql instances create my-db 
--database-version=POSTGRES_12 
--region=us-central1 
--storage-auto-increase 
--storage-size=10 
--storage-type=SSD 
--tier=db-f1-micro

我还用以下命令建立了一个服务帐户:

gcloud iam service-accounts create my-service-account
gcloud iam service-accounts add-iam-policy-binding 
--role=roles/iam.workloadIdentityUser 
--member="serviceAccount:my-production.svc.id.goog[default/my-service-account]" 
my-service-account@my-production.iam.gserviceaccount.com
gcloud projects add-iam-policy-binding my-production 
--member serviceAccount:"my-service-account@my-production.iam.gserviceaccount.com" 
--role "roles/cloudsql.client"

pod中云sql代理的sidecar容器设置如下:

- name: cloud-sql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.20.2
command:
- "/cloud_sql_proxy"
- "-instances=my-production:us-central1:my-db=tcp:5432"
- "-term_timeout=20s"

尽管如此,当我的应用程序尝试连接到云SQL实例时,我可以在云SQL代理日志中看到以下错误:

2021/03/19 21:30:02 couldn't connect to "my-production:us-central1:my-db": dial tcp MY_DB_PUBLIC_IP:3307: connect: connection timed out

我检查了一下,pod可以访问互联网(我可以访问www.google.com(,所以它应该能够连接到Cloud SQL的公共IP。我可以在笔记本电脑上毫无问题地使用云sql代理,并连接到那里的实例。我错过了什么?我还能查什么?

我发现GKE私有集群和云sql代理连接,但我启用了sql管理API。私有GKE和云SQL之间的连接只讨论了一个没有互联网接入的GKE集群。

看起来你做的每件事都是正确的。你有没有防火墙可能会阻止3307上云sql实例的出站流量?

结论是:

  • 不要使用www.google.com来检查节点是否可以访问GCP的基础设施。似乎谷歌网站被视为GCP的内部流量。尝试在专用GKE集群上获取www.amazon.com失败
  • 要从专用GKE集群连接到云SQL,请使用云SQL的专用IP(记得将-ip_address_types=PRIVATE添加到云SQL代理(

我遇到了同样的问题,我一直在思考。我用私有IP启用了我的SQL实例,这个连接问题得到了解决。我认为这是正确的答案。我的GKE集群是私有的。SQL实例有可用的公共IP,我可以使用auth代理从本地计算机连接到它,但同样的事情在GKE私有集群中不起作用。在花了两天的时间后,我找到了这个对我有用的答案。我刚刚启用了私有IP,并在我的部署中添加了这个标志。

要从专用GKE集群连接到云SQL,请使用云SQL的专用IP(请记住向云SQL代理添加-IP_addre_types=private(。

我认为您弄错了端口
在您的应用程序中,您正在提供MY_DB_PUBLIC_IP:3307,即端口3307,但取消sidecar confg。您已指定端口my-production:us-central1:my-db=tcp:5432,即5432

相关内容

  • 没有找到相关文章

最新更新