Blog

So richten Sie eine regionale Ausfallsicherung für Google Cloud Serverless NEGs ein

Daniël Rieske

Aktualisiert Oktober 15, 2025
2 Minuten

In diesem Blog möchten wir Ihnen zeigen, wie Sie ein hochverfügbares, regionales Failover-Setup einrichten, wenn Sie serverlose Netzwerk-Endpunktgruppen (NEGs) verwenden. Traditionell verlassen sich Netzwerkendpunktgruppen auf gRPC-Zustandsprüfungen, um festzustellen, ob ein Backend verfügbar und bereit ist, Datenverkehr zu empfangen. Diese Zustandsprüfungen werden jedoch für serverlose Netzwerkendpunktgruppen nicht unterstützt. Ohne Gesundheitsprüfungen wird der Datenverkehr an Backends in verfügbaren Regionen gesendet und verworfen, wenn das Backend ungesund ist. Wie könnten wir also stattdessen den Datenverkehr von einem ungesunden NEG umleiten?

Um dieses Problem zu lösen, wurde von Google die Ausreißererkennung eingeführt. Die Ausreißererkennung funktioniert durch die Analyse von HTTP-Antworten und den Rauswurf von ungesunden Backends, wenn bestimmte Schwellenwerte erreicht werden. Diese Funktion ist bei globalen Backend-Diensten mit serverlosen NEGs verfügbar.

Sehen wir uns an, wie wir dies in unserem Backend-Dienst Terraform Ressource aktivieren können:

resource "google_compute_backend_service" "backend" {
  ...

  outlier_detection = {
    base_ejection_time = "30s"
    consecutive_errors = 5
  }
}

Mit der obigen Konfiguration wirft der Backend-Service ein Backend aus, wenn es mit fünf aufeinanderfolgenden 5xx HTTP-Fehlercodes antwortet. Nach dem Rauswurf erhält das Backend 30 Sekunden lang keinen Datenverkehr, bevor es erneut getestet wird.

Schauen wir uns nun ein vollständiges Beispiel an:

locals {
  locations = toset(["europe-west1", "europe-west4"])
}

resource "google_compute_global_address" "ip" {
  name = "service-ip"
}

resource "google_compute_region_network_endpoint_group" "neg" {
  for_each = toset(local.locations)

  name                  = "neg-${each.key}"
  network_endpoint_type = "SERVERLESS"
  region                = each.key

  cloud_run {
    service = google_cloud_run_service.service[each.key].name
  }
}

resource "google_compute_backend_service" "backend" {
  name     = "backend"
  protocol = "HTTP"

  dynamic "backend" {
    for_each = local.locations

    content {
      group = google_compute_region_network_endpoint_group.neg[backend.key].id
    }
  }

  outlier_detection = {
    base_ejection_time = "30s"
    consecutive_errors = 5
  }
}

resource "google_compute_url_map" "url_map" {
  name            = "url-map"
  default_service = google_compute_backend_service.backend.id
}

resource "google_compute_target_http_proxy" "http_proxy" {
  name    = "http-proxy"
  url_map = google_compute_url_map.url_map.id
}

resource "google_compute_global_forwarding_rule" "frontend" {
  name       = "frontend"
  target     = google_compute_target_http_proxy.http_proxy.id
  port_range = "80"
  ip_address = google_compute_global_address.ip.address
}

Fazit

Wenn Serverless NEGs keine Unterstützung für Gesundheitsprüfungen bieten, sollten Sie bei Serverless NEGs Backend-Diensten immer eine Ausreißererkennung angeben, um die Verfügbarkeit bei regionalen Ausfällen sicherzustellen. Die Ausreißererkennung wirft ungesunde Backends aus und verhindert, dass Datenverkehr an Dienste in nicht verfügbaren Regionen gesendet wird.


Foto von Kevin Schmid auf Unsplash

Verfasst von

Daniël Rieske

Contact

Let’s discuss how we can support your journey.