https://cloud.google.com/load-balancing/docs/https/setting-up-https-serverless#setting_up_regional_routing
我设置了一个GCE全局负载均衡器和NEG。我不清楚的是NEG是如何连接到云运行的应用程序的。看起来NEG的Service name
只需要匹配相应的云运行应用程序名称。
我已经这样做了,但似乎没有关联。我甚至在文档中都找不到如何对这种链接进行故障排除。
通过Terraform 创建了一个neg
resource "google_compute_region_network_endpoint_group" "neg" {
network_endpoint_type = "SERVERLESS"
region = us-east1
cloud_run {
service = "my-cloudrun-app"
}
}
然后部署了一个云运行应用程序gcloud run deploy my-cloudrun-app --region us-east1
我的理解是,如果云运行应用程序名称与它应该连接的服务名称匹配。我可以看到NEG连接到我的GCE负载均衡器,并且云运行应用已成功部署,但NEG似乎没有路由到我的功能。
我正在使用这个官方的GCP模块来连接它(它确实让它变得非常容易!(https://github.com/terraform-google-modules/terraform-google-lb-http/tree/v6.0.1/modules/serverless_negs
我发现它确实按我预期的方式工作,问题只是我创建的一个区域NEG后面没有云运行应用程序(我以为我有(。事实上,我创建了几个区域性的NEG,搞得一团糟,LB将我的流量路由到的区域性NEG没有它所指向的相应的云运行应用程序。
我是如何解决这个问题的:
- 查找配置负载平衡器的后端
- 在GCP控制台中,我能够查看后端和为其配置的所有区域NEG
- 点击刷新/卷曲多次,在后端页面的gcp控制台中看到一个区域NEG实际上正在接收流量,所以我至少能够看到我的流量被路由到哪个NEG
- 意识到我没有使用区域NEG配置的名称部署云运行应用程序
我仍然觉得了解所有这些组件如何协同工作可能会更好,但Backend service details
页面的流量图是一个救命稻草!
我不知道你是否做到了,但你需要更多的东西来在负载均衡器上部署你的neg。这里是丢失的零件
resource "google_compute_managed_ssl_certificate" "default" {
name = "cert"
managed {
domains = ["${var.domain}"]
}
}
resource "google_compute_backend_service" "default" {
name = "app-backend"
protocol = "HTTP"
port_name = "http"
timeout_sec = 30
backend {
group = google_compute_region_network_endpoint_group.neg.id
}
}
resource "google_compute_url_map" "default" {
name = "app-urlmap"
default_service = google_compute_backend_service.default.id
}
resource "google_compute_target_https_proxy" "default" {
name = "https-proxy"
url_map = google_compute_url_map.default.id
ssl_certificates = [
google_compute_managed_ssl_certificate.default.id
]
}
resource "google_compute_global_forwarding_rule" "default" {
name = "lb"
target = google_compute_target_https_proxy.default.id
port_range = "443"
ip_address = google_compute_global_address.default.address
}
resource "google_compute_global_address" "default" {
name = "address"
}
简单??绝对不是。如果你需要更多的细节、指导或解释,请告诉我。