【问题标题】:Google Cloud Run outbound static IP is 169.254.X.X instead of reserved oneGoogle Cloud Run 出站静态 IP 是 169.254.X.X 而不是保留一个
【发布时间】:2021-03-12 07:02:01
【问题描述】:

我创建了一个 Google Cloud Run 修订版,其中 Serverless VPC access connector 到 VPC Network。 VPC Network 可以通过Cloud NAT 访问互联网,以允许Cloud Run 实例拥有static outbound ip address,如本教程中所述:https://cloud.google.com/run/docs/configuring/static-outbound-ip。我按照教程进行操作,一切都很好,我从Cloud Run 实例获得了一个关于出口流量的静态 IP 地址。

我使用terraform 来部署所有资源,您可以在下面找到其代码。问题是这样的:destroying 资源后,出现以下错误:

ERROR: (gcloud.compute.networks.delete) Could not fetch resource:
 - The network resource 'projects/myproject/global/networks/webhook-network' is already being used by 'projects/myproject/global/networkInstances/v1823516883-618da3a7-bd4f-4524-...-...' 

(点包含更多数字,但由于这似乎是某种 uuid,我不想分享其余部分)。

所以我无法删除第一个网络。当我更改网络名称并重新apply时,apply成功,但出口的outbound static ip地址为169.254.X.X,我发现以下信息:

“当你看到 169.254.X.X 时,你肯定有问题” ==> 闻起来像麻烦。

有任何 Google 员工可以帮助我吗?我认为重现“损坏的”VPC 网络的步骤是创建一个连接到 VPC 的 Serverless Access Connector,使用 Cloud Run 修订版引用它,然后删除 VPC network 和Serverless Access Connector 之前你删除了 Cloud Run 修订版,但老实说不确定,我真的没有多余的 GCP 项目来测试它。

这个 StackOverflow 问题没有帮助:https://serverfault.com/questions/1016015/google-cloud-platform-find-resource-by-full-resource-name,这是我能找到的唯一相关问题。

有人有什么想法吗?

locals {
  region = "europe-west1"
}

resource "google_compute_network" "webhook_network" {
  name = "webhook-network-6"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "subnetwork" {
  depends_on = [
    google_compute_network.webhook_network
  ]
  name = "webhook-subnet-6"
  network = google_compute_network.webhook_network.self_link
  ip_cidr_range = "10.14.0.0/28"
  region = local.region
}

resource "google_compute_router" "router" {
  depends_on = [
    google_compute_subnetwork.subnetwork,
    google_compute_network.webhook_network
  ]
  name = "router6"
  region = google_compute_subnetwork.subnetwork.region
  network = google_compute_network.webhook_network.name
}

// I created the static IP address manually
//resource "google_compute_address" "static_address" {
//  name = "nat-static-ip-address"
//  region = local.region
//}

resource "google_compute_router_nat" "advanced-nat" {
  name = "natt"
  router = google_compute_router.router.name
  region = local.region
  nat_ip_allocate_option = "MANUAL_ONLY"
  nat_ips = [
    var.ip_name
  ]
  source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"

}

data "google_project" "project" {

}


}
resource "google_vpc_access_connector" "access_connector" {
  depends_on = [
    google_compute_network.webhook_network,
    google_compute_subnetwork.subnetwork
  ]
  name = "stat-ip-conn-6"
  project = var.project_id
  region = local.region
  ip_cidr_range = "10.4.0.0/28"
  network = google_compute_network.webhook_network.name
}

【问题讨论】:

  • 当您“销毁”您在问题末尾提供的 TF 文件时是否会出现问题?

标签: google-cloud-platform terraform google-cloud-run static-ip-address google-vpc


【解决方案1】:

原来我工作正常,但测试它的方式是错误的。我正在使用以下 Cloud Function 对其进行测试:

def hello_world(request):
    request_json = request.get_json()
    ip = request.remote_addr # the culprit
    remote_port = request.environ.get('REMOTE_PORT')
    url = request.url
    host_url = request.host_url
    return {"ip": ip, "url": url, "port": remote_port, "host_url": host_url}

它返回169.254.X.X,但是当我对curlmyip.org进行测试时,它确实是正确的IP地址。

但是,这仍然不能解决无法删除 VPC 网络的问题。

【讨论】:

  • 但这就是我们在链接教程中推荐curlmyip.org 的原因。 :)
猜你喜欢
  • 2021-09-19
  • 2021-04-14
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 2017-11-04
相关资源
最近更新 更多