0

cloud-sql-proxy を使用して、GKE クラスタからパブリック IP で Cloud 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

次のコマンドで Cloud 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"

ポッド内の cloud-sql-proxy のサイドカー コンテナーは、次のように設定されます。

      - 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 インスタンスに接続しようとすると、cloud-sql-proxy ログに次のエラーが表示されます。

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

確認したところ、ポッドはインターネットにアクセスできるため ( www.google.comにアクセスできます)、Cloud SQL のパブリック IP に接続できるはずです。ラップトップで cloud-sql-proxy を問題なく使用でき、そこでインスタンスに接続できます。私は何が欠けていますか?他に何が確認できますか?

GKE プライベート クラスタとクラウド SQL プロキシ接続が見つかりましたが、SQL Admin API が有効になっています。プライベート GKE と Cloud SQL の間の接続は、インターネットにアクセスできない GKE クラスタについてのみ話します。

4

3 に答える 3