You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP Terraform共享VPC下配置forwarding rule报target URL格式错误求助

问题根因

你的报错是两个核心原因共同导致的:

  1. 负载均衡类型和目标资源不匹配:google_compute_target_pool仅可用于外部传统网络负载均衡,你配置的load_balancing_scheme = "INTERNAL"属于内部负载均衡,内部负载均衡的目标参数不支持传入target pool的ID/URI。
  2. 资源所属项目不匹配:你把转发规则、内网IP都创建在了共享VPC的宿主项目(var.subnetwork_project),但target pool默认创建在当前执行操作的项目,两个资源不在同一个项目下,GCP在宿主项目的转发规则中读取你当前操作项目的target pool资源时无法识别,因此报URL格式错误。
修复方案

根据你的业务需求二选一即可:

方案1:保留内部负载均衡(推荐,符合你当前内网IP的配置逻辑)

内部负载均衡需要用「后端服务(backend service)+ 实例组」替代原有的target pool,GCP要求内部负载均衡必须配置健康检查,修改后的配置示例如下:

# 新增:无托管实例组,收纳你要挂载的业务实例
resource "google_compute_instance_group" "biz_ig" {
  name     = "${var.name}-ig"
  zone     = var.instance_zone # 替换为你的实例所在可用区,多可用区部署请创建多个实例组
  instances = var.instances

  named_port {
    name = "biz-port"
    port = var.port_range[0]
  }
}

# 新增:健康检查,内部负载均衡强制要求
resource "google_compute_health_check" "lb_hc" {
  name               = "${var.name}-hc"
  check_interval_sec = 5
  timeout_sec        = 5
  tcp_health_check {
    port = var.port_range_health[0] != "" ? var.port_range_health[0] : var.port_range[0]
  }
}

# 新增:内部负载均衡后端服务
resource "google_compute_backend_service" "lb_be" {
  name                  = "${var.name}-backend"
  load_balancing_scheme = "INTERNAL"
  region                = var.region
  session_affinity      = var.session_affinity

  backend {
    group = google_compute_instance_group.biz_ig.self_link
  }

  health_checks = [google_compute_health_check.lb_hc.self_link]
}

# 修改原有的转发规则配置
resource "google_compute_forwarding_rule" "basic_load_balancer" {
  name                  = var.name
  target                = google_compute_backend_service.lb_be.self_link # 替换为后端服务的self_link
  ip_address            = google_compute_address.lb_address.address
  port_range            = join(",", var.port_range)
  labels                = var.labels
  subnetwork            = data.google_compute_subnetwork.gcp_subnetwork.self_link # 用self_link替代name,避免跨项目引用错误
  project               = var.subnetwork_project
  load_balancing_scheme = var.lb_scheme
  region                = var.region # 补充和其他资源一致的区域参数
}

方案2:改用外部传统负载均衡,保留target pool

如果你确实需要使用target pool,需要调整负载均衡类型,同时统一资源所属项目:

  • 把var.lb_scheme的值改为EXTERNAL
  • 给target pool资源新增project参数,和转发规则保持同项目:
resource "google_compute_target_pool" "target_pool" {
    project          = var.subnetwork_project # 新增行,指定创建在共享VPC宿主项目
    name             = "${var.name}-pool"
    instances        = var.instances
    session_affinity = var.session_affinity
    region           = var.region # 补充和转发规则一致的区域参数
}
注意事项
  • 跨共享VPC引用资源时优先使用self_link属性而非资源名,避免GCP识别资源所属项目出错
  • 所有区域级资源(转发规则、IP、后端服务、target pool)的region参数必须完全一致
  • target pool仅支持外部传统网络负载均衡,其他类型负载均衡均不可使用该资源

内容的提问来源于stack exchange,提问作者DavisTasar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:36:02