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

Terraform创建GCP负载均衡器对接API网关返回404问题求助

问题分析与解决建议

根据你提供的Terraform配置和问题描述,手动创建的LB可正常对接API网关,而Terraform创建的LB返回404,核心问题大概率出在LB配置的细节差异上,以下是具体排查和修正方向:

1. 修正Backend Service的协议配置

你的Backend Service设置了protocol = "HTTPS",但GCP负载均衡器与API Gateway的Serverless NEG通信时,应该使用HTTP协议(LB对外提供HTTPS,内部转发到API Gateway用HTTP)。手动创建的LB大概率是用了HTTP协议,这是导致404的常见原因。

修改google_compute_backend_service.webservers_backend_service_us的protocol字段:

resource "google_compute_backend_service" "webservers_backend_service_us" {
  # 其他配置保持不变
  protocol = "HTTP" # 从HTTPS改为HTTP
}

2. 完善URL Map的路径匹配规则

虽然你的URL Map设置了default_service,但显式添加路径规则可以确保所有路径请求都被正确转发,避免因隐式规则差异导致的404。在path_matcher块中添加path_rule:

resource "google_compute_url_map" "lb_us" {
  name            = "url-map-us"
  provider        = google-beta
  default_service = google_compute_backend_service.webservers_backend_service_us.id
  
  host_rule {
    hosts        = [var.domain_name_us]
    path_matcher = "us-predictions"
  }
  
  path_matcher {
    name            = "us-predictions"
    default_service = google_compute_backend_service.webservers_backend_service_us.id
    
    # 添加显式路径规则
    path_rule {
      paths   = ["/*"]
      service = google_compute_backend_service.webservers_backend_service_us.id
    }
  }
}

3. 验证Serverless NEG的资源ID正确性

确保serverless_deployment中的resource字段是API Gateway的完整资源ID,格式应为:
projects/{你的项目ID}/locations/{地区}/gateways/{网关名称}
检查var.neg_us_id.gateway是否符合这个格式,避免仅传入网关名称导致NEG无法正确关联API Gateway。

4. 检查LB日志定位请求流向

如果以上修改后仍有问题,开启LB的日志(你的配置已开启log_config),查看请求是否到达API Gateway:

  • 前往GCP控制台的Cloud Logging,筛选负载均衡器的日志
  • 检查请求的target_backend_service、url_map匹配结果,确认请求是否被正确转发到目标NEG

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:35:13