使用来自 GKE 的私有 IP 连接到 Cloud SQL Postgres 时出现问题

Sub*_*ran 4 google-cloud-sql google-cloud-platform google-kubernetes-engine vpc-peering

我遵循的步骤:

1.创建VPC网络

gcloud compute networks create stg-vpc \ --subnet-mode custom

2. 为这个网络的 VPC Peering 创建 IP 范围

gcloud beta compute addresses create google-managed-services-stg-vpc \ --global \ --purpose=VPC_PEERING \ --description="peering range for psql" \ --addresses=10.20.0.0 \ --prefix-length=16 \ --network=stg-vpc

3. 为 Cloud SQL Postgres 实例分配私有 IP

在 Cloud SQL Web 控制台中,我创建了一个新的 Postgres 实例。在连接选项中,我启用了私有 IP,并将其配置stg-vpc为 IP 范围google-managed-services-stg-vpc

这将创建具有 IP 的 Cloud SQL Postgres 实例10.20.0.3

4.为GKE集群创建子网

gcloud compute networks subnets create stg-vpc-us-central1 \ --network stg-vpc \ --region us-central1 \ --range 10.10.0.0/16

5. 创建 GKE 集群并部署连接到 Cloud SQL 中的数据库的应用程序

gcloud -q container clusters create cluster-1 \ --zone us-central1-a \ --num-nodes 3 \ --network stg-vpc \ --subnetwork stg-vpc-us-central1

我部署了一个 Java 应用程序,该应用程序使用 Postgres JDBC 驱动程序连接到 Cloud SQL 数据库实例的私有 IP。我收到错误java.net.SocketTimeoutException: connect timed out

我还尝试了其他步骤:

  1. 我创建了一个防火墙规则来打开 IP 范围的 Postgres 端口:gcloud compute firewall-rules create psql-access --network stg-vpc --allow tcp:5432 --source-ranges 10.20.0.0/16.
  2. 我能够从 docker 容器内部 ping 到 K8s 主机,但不能 ping 到 Postgres 实例。

任何人都可以建议我做错了什么,以及为什么 VPC 对等互连不起作用。

Sub*_*ran 5

按照@patrick-w 的建议,我能够通过创建VPC 原生集群连接到 Cloud SQL Postgres 。

我的 VPC 子网创建已修改为包含两个次要范围:

gcloud compute networks subnets create stg-vpc-us-central1 \ --network stg-vpc \ --region us-central1 \ --range 10.10.0.0/16 \ --secondary-range stg-vpc-us-central1-pods=10.11.0.0/16,stg-vpc-us-central1-services=10.12.0.0/16

我的集群创建命令被修改为 enable ip-alias,并添加了要使用的次要范围的详细信息。

gcloud -q container clusters create cluster-1 \ --zone us-central1-a \ --num-nodes 3 \ --enable-ip-alias \ --network stg-vpc \ --subnetwork stg-vpc-us-central1 \ --cluster-secondary-range-name stg-vpc-us-central1-pods \ --services-secondary-range-name stg-vpc-us-central1-services