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

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

我遵循的步骤:

1.创建VPC网络

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

2.为此网络创建 VPC 对等连接的 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. 将私有 IP 分配给 Cloud SQL Postgres 实例

在 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 DB 实例的私有 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 对等不起作用吗?

答案1

我能够通过创建VPC 原生集群按照@patrick-w 的建议。

我的 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

并且我的集群创建命令被修改为启用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

相关内容