gpt4 book ai didi

postgresql - 从具有私有(private) IP 和公共(public) IP 的 VM 连接到私有(private) IP 上的 Google Cloud SQL 实例失败

转载 作者:行者123 更新时间:2023-12-04 15:18:32 25 4
gpt4 key购买 nike

我要设置的内容:

  • 具有私有(private) IP 的 Cloud SQL 实例,Postgresql 数据库
  • 具有一个公共(public) IP 和一个私有(private) IP 的 VM,与 SQL 实例所在的 VPC 网络相同(VM、SQL 实例和 VPC 都在同一区域)
  • VM 有一个具有足够 Cloud SQL 客户端/查看器权限的服务帐户
  • VM 上的 SQL 代理连接到 SQL 实例。我使用在某些文档中找到的 -ip_address_types=PRIVATE 参数运行它。

配置代码

用于重现让我感到困惑的状态的稍微简化的 Terraform 代码如下: https://github.com/hallvors/gcp-network-issue-demo要对此进行测试,请执行以下操作:

  1. 创建一个新的一次性 Google Cloud 项目。
  2. 为方便起见,您可以运行 bootstrap.sh 以启用正确的服务(它将询问 Google 项目的 ID,并假设您有一个已登录并具有访问权限的 gcloud 客户端)。
  3. 在项目中创建一个服务帐户,为方便起见将其设为所有者,并将 key 文件保存在./local-secrets/google-project-credentials.json
  4. 使用项目 ID 和服务帐户的电子邮件更新 terraform.tfvars
  5. terraform workspace new staging
  6. 地形初始化
  7. 地形应用

完成 Terraform 后,您应该在项目中设置数据库和虚拟机。

  1. SSH 进入虚拟机并运行 sudo apt install postgresql-client-common postgresql-client
  2. 查询数据库实例的IP地址
  3. 运行这个(根据需要修改细节)psql --host 10.167.0.3 -U gcp-network-issue-demo-staging-db-user gcp-network-issue-demo-staging-database

会发生什么?

  • 任何实际使用连接的尝试,例如 psql 客户端或 db-migrate,都会超时
  • 如果我从设置中删除 VM 的公共(public) IP 地址,它可以正常连接。但是,我需要一个可公开访问的 VM,以便其他服务连接到它。

我错过了什么?

最佳答案

这个问题的原因是我未能理解网络接口(interface)可以有公共(public)和私有(private) IP/网络。因此,我的代码为 google_compute_instance 设置了一个公共(public)接口(interface)和一个专用网络接口(interface):

  # Update VM needs a public IP
network_interface {
network = "default"
access_config {
}
}

network_interface {
network = var.network
subnetwork = var.subnetwork
}

现在,我仍然不完全了解网络,但您似乎不能(很容易?)指定数据库连接尝试应使用的接口(interface),并且它不会自动选择正确的接口(interface)。修复在此提交中,在一个网络接口(interface)中配置对专用网络和公共(public)网络接口(interface)的访问:

https://github.com/hallvors/gcp-network-issue-demo/commit/ea14174c1087c89b92310b5b4913e12a4e17130d

关于postgresql - 从具有私有(private) IP 和公共(public) IP 的 VM 连接到私有(private) IP 上的 Google Cloud SQL 实例失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63853170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com