【问题标题】:Unable to connect GCP SQL Instance from GKE cluster无法从 GKE 集群连接 GCP SQL 实例
【发布时间】:2022-01-19 12:14:15
【问题描述】:

我已经创建了一个 vpc-native 集群,我正在尝试从集群内的 pod 连接到具有私有 IP 的 postgres SQL 实例。

我正在使用基本的 telnet 5432 命令进行测试。

当我从同一 VPC 中的 GCE 实例尝试连接时,连接工作正常。 GCP 中的所有连接测试都给了我绿灯,所以这似乎是一个 k8s 问题。

这是我的集群:

gcloud container clusters create alex-test \                                                            
    --network=factory-vpc \
    --region=europe-west1 \
    --enable-ip-alias \
    --subnetwork=europe-west1-factory-subnet \
    --cluster-ipv4-cidr="/16" \
    --services-ipv4-cidr="/20"

这是我测试连接性的方法:

kubectl run -it --rm --restart=Never busybox --image=gcr.io/google-containers/busybox sh
telnet <private ip> 5432

这是我在 terraform 中的网络配置:

resource "google_compute_network" "factory" {
  name                    = "factory-vpc"
  auto_create_subnetworks = false

  depends_on = [google_project_service.compute]
}

resource "google_compute_subnetwork" "factory_subnet" {
  name                     = "${var.region}-factory-subnet"
  ip_cidr_range            = "10.0.0.0/16"
  region                   = var.region
  network                  = google_compute_network.factory.self_link
  private_ip_google_access = true

  secondary_ip_range {
    ip_cidr_range = "10.2.0.0/16"
    range_name    = "pods"
  }

  secondary_ip_range {
    ip_cidr_range = "10.3.0.0/16"
    range_name    = "services"
  }
}

resource "google_compute_global_address" "gitlab_google_private_peering" {
  provider      = google-beta
  name          = "gitlab-gcp-private"
  address_type  = "INTERNAL"
  purpose       = "VPC_PEERING"
  network       = google_compute_network.factory.self_link
  prefix_length = 16
}

resource "google_service_networking_connection" "gitlab_google_private_peering" {
  provider                = google-beta
  network                 = google_compute_network.factory.self_link
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.gitlab_google_private_peering.name]
}

我已经查看了以下文档和文章,但没有任何帮助:

非常感谢任何帮助!

【问题讨论】:

  • 你能发布你的 telnet 容器的错误吗?
  • @GariSingh 大约一分钟后:“连接被外国主机关闭”

标签: google-cloud-platform terraform google-kubernetes-engine


【解决方案1】:

据我了解,如果您能够从同一 VPC 中的 GCE 实例访问具有私有 IP 的 postgres SQL 实例,但如果它无法从 pod 运行,我建议您提供看ip masquerade agent。我的假设是,当您从 Pod 尝试时,IP 伪装应用于所述 Pod 发出的数据包,因此 GKE 将数据包的源地址从 Pod IP 更改为底层节点的 IP 地址,所以你不是能够访问您的 SQL 实例,因为它位于不同的范围内。

如果是这种情况,您可以在this guide 中检查如何配置/编辑它。

【讨论】:

    猜你喜欢
    • 2021-10-27
    • 1970-01-01
    • 2022-07-26
    • 2019-07-23
    • 2020-11-06
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多