首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从私有GKE集群连接到公共云SQL

问从私有GKE集群连接到公共云SQL
EN

Stack Overflow用户
提问于 2021-03-20 00:43:59
回答 4查看 955关注 0票数 1

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

代码语言:javascript
复制
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

我使用以下命令创建了Cloud:

代码语言:javascript
复制
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

我还使用以下命令设置了一个服务帐户:

代码语言:javascript
复制
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"

容器中用于云-sql-代理的sidecar容器设置如下:

代码语言:javascript
复制
      - 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"

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

代码语言:javascript
复制
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的公共IP。我可以使用云-sql-代理,在我的笔记本上没有问题,并连接到那里的实例。我遗漏了什么?我还能查到什么?

我找到了GKE私有集群和云sql代理连接,但是启用了SQL。私有GKE与Cloud的连接只谈到一个无法访问互联网的GKE集群。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-03-23 18:45:52

结论是:

  • 不要使用www.google.com来检查节点是否可以访问GCP的基础设施。www.google.com似乎被看作是GCP上的内部通信量。在私有GKE集群上,试图获取www.amazon.com失败。
  • 要从私有GKE集群连接到Cloud,请使用用于Cloud的私有IP (请记住将-ip_address_types=PRIVATE添加到云- SQL -代理)。
票数 0
EN

Stack Overflow用户

发布于 2021-03-21 03:56:01

看来你做的一切都是正确的。您是否有防火墙可以阻塞3307上云sql实例的出站流量?

票数 1
EN

Stack Overflow用户

发布于 2021-06-20 20:13:24

我也有同样的问题,我的头被它撞了一下。我使用私有IP启用了SQL实例,并且解决了这个连接问题。我想说这是正确的答案。我的GKE集群是私有的。SQL实例具有可用的公共IP,我可以使用auth代理从本地计算机连接到它,但是在GKE私有集群中,同样的事情无法工作。花了两天之后,我找到了这篇文章,并给出了一个对我有用的答案。我刚刚启用了私有IP,并在我的部署中添加了这个标志。

要从私有GKE集群连接到Cloud,请使用用于Cloud的私有IP (请记住将-ip_address_types=PRIVATE添加到云- SQL -代理)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66717237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档