Multiregionale Bereitstellungen für API Gateway erstellen

In dieser Anleitung erfahren Sie, wie Sie einen HTTP(S)-Load-Balancer konfigurieren, um multiregionale Bereitstellungen für API Gateway zu aktivieren.

Wenn Sie einen HTTP(S)-Load-Balancer erstellen, um Bereitstellungen von API Gateway in mehreren Regionen zu unterstützen, können Sie die Verfügbarkeit verbessern und die Latenz für Ihren Dienst verringern, da er aus mehr als einer Region bereitgestellt wird. Mit dem regionenübergreifenden Routing können Sie die Latenz weiter minimieren und die Verfügbarkeit maximieren, da Anfragen über die verfügbare Region verarbeitet werden, die dem Nutzer am nächsten ist.

Für die Zwecke dieser Anleitung konfigurieren Sie ein einzelnes, nicht regionales URL-Schema, das überall auf der Welt funktioniert, aber Nutzeranfragen über die nächstgelegene API Gateway-Bereitstellung bedient. Mit dieser Konfiguration werden Anfragen idealerweise an die Region weitergeleitet, die dem Nutzer eine minimale Latenz bietet. Falls die nächstgelegene Region nicht verfügbar ist oder die Kapazität überschreitet, wird die Anfrage zu einer anderen Region geleitet, um die Verfügbarkeit zu gewährleisten.

Hinweis

Bevor Sie Ihre multiregionale Bereitstellung konfigurieren, folgen Sie der API Gateway-Kurzanleitung, um einen Cloud Run-Dienst bereitzustellen und ein Gateway zu erstellen, das auf diesen Dienst verweist.

In dieser Anleitung stellen Sie Ihren Dienst in zwei verschiedenen Regionen bereit. Sie können beispielsweise zwei API Gateway-Instanzen bereitstellen:

  • my-gateway-eu in einer Region in Europa
  • my-gateway-us in einer Region in den USA

Berechtigungen konfigurieren

In dieser Anleitung erstellen Sie eine serverlose Netzwerk-Endpunktgruppe (NEG) und einen externen HTTP(S)-Load Balancer in einem Cloud-Projekt. Dies erfordert entweder die Rolle Inhaber oder Bearbeiter des Projekts oder die folgenden IAM-Rollen für Compute Engine:

Aufgabe Erforderliche Rolle
Load Balancer und Netzwerkkomponenten erstellen Netzwerkadministrator
NEGs erstellen und ändern Compute Instance Admin
SSL-Zertifikate erstellen und ändern Security Admin

SSL-Zertifikatsressource erstellen

Zum Erstellen eines HTTPS-Load-Balancers muss dem Frontend des Load-Balancers eine SSL-Zertifikatsressource hinzugefügt werden. Erstellen Sie eine SSL-Zertifikatsressource mit einem von Google verwalteten SSL-Zertifikat oder mit einem selbst verwalteten SSL-Zertifikat.

  • Von Google verwaltete Zertifikate. Es empfiehlt sich, von Google verwaltete Zertifikate zu verwenden, da Google Cloud diese Zertifikate automatisch abruft, verwaltet und verlängert. Zum Erstellen eines von Google verwalteten Zertifikats benötigen Sie eine Domain und die zugehörigen DNS-Einträge, damit das Zertifikat bereitgestellt werden kann. Wenn Sie noch keine Domain haben, können Sie eine von Google Domains erhalten. Außerdem müssen Sie den DNS-A-Eintrag der Domain so aktualisieren, dass er auf die IP-Adresse des Load-Balancers verweist, die in einem späteren Schritt erstellt wird. Eine ausführliche Anleitung finden Sie unter Von Google verwaltete Zertifikate verwenden.

  • Selbst signierte Zertifikate. Wenn Sie derzeit keine Domain einrichten möchten, können Sie ein selbst signiertes SSL-Zertifikat zu Testzwecken verwenden.

In diesem Tutorial wird davon ausgegangen, dass Sie bereits eine SSL-Zertifikatsressource erstellt haben.

Wenn Sie diesen Prozess testen möchten, ohne eine SSL-Zertifikatsressource oder eine Domain (für von Google verwaltete Zertifikate erforderlich) zu erstellen, folgen Sie der Anleitung auf dieser Seite, um stattdessen einen HTTP-Load Balancer einzurichten.

HTTP- oder HTTPS-Load-Balancer erstellen

  1. Erstellen Sie für jede API Gateway-Instanz eine serverlose NEG.

    Eine Netzwerk-Endpunktgruppe (NEG) ist eine Gruppe von Backend-Endpunkten für einen Load-Balancer. Eine serverlose NEG ist ein Backend, das auf einen Dienst wie API Gateway verweist, wie in der folgenden Abbildung dargestellt:

    Serverlose Netzwerk-Endpunktgruppe als Backend für mehrere regionale Gateways

    Führen Sie den folgenden Befehl aus, um für jede Gateway-Instanz eine serverlose NEG zu erstellen. Dabei gilt:

    • SERVERLESS_NEG_NAME ist der Name der serverlosen NEG, die erstellt werden soll.
    • GATEWAY_ID gibt den Namen des Gateways an.
    • REGION_ID ist die Bereitstellungsregion für die serverlose NEG. Diese sollte mit der Gateway-Region übereinstimmen.
    gcloud beta compute network-endpoint-groups create SERVERLESS_NEG_NAME \
      --region=REGION_ID \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=GATEWAY_ID

    Beispiel:

    gcloud beta compute network-endpoint-groups create api-gateway-serverless-neg-eu \
      --region=europe-west1 \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=my-gateway-eu

    Wiederholen Sie diesen Befehl, um eine serverlose NEG für die nächste Gateway-Instanz zu erstellen. Verwenden Sie dazu die entsprechenden Werte für die zweite Gateway-Instanz, z. B. api-gateway-serverless-neg-us für my-gateway-us in der Region us-central1.

  2. Erstellen Sie einen Backend-Dienst, um zu definieren, wie Cloud Load Balancing den Traffic verteilt.

    Die Dienstkonfiguration des Backend-Dienstes enthält eine Reihe von Werten, z. B. das Protokoll, das für die Verbindung zu Backends verwendet wird, verschiedene Verteilungs- und Sitzungseinstellungen, Systemdiagnosen und Zeitüberschreitungen, wie in der folgenden Abbildung dargestellt:

    Backend-Dienst, der mit mehreren serverlosen Netzwerk-Endpunktgruppen in verschiedenen Regionen verbunden ist

    Führen Sie die folgenden Befehle aus, um einen Backend-Dienst zu erstellen und Ihre serverlose NEG als Backend hinzuzufügen:

    • BACKEND_SERVICE_NAME ist der Name Ihres Backend-Dienstes.
    • SERVERLESS_NEG_NAME ist der Name der serverlosen NEG, die im vorherigen Schritt erstellt wurde.
    • REGION_ID ist die Bereitstellungsregion für die serverlose NEG. Diese sollte mit der Gateway-Region übereinstimmen.
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --global \ 
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --global \ 
      --network-endpoint-group=SERVERLESS_NEG_NAME \
      --network-endpoint-group-region=REGION_ID

    Beispiel:

    gcloud compute backend-services add-backend api-gateway-backend-service \
      --global \
      --network-endpoint-group=api-gateway-serverless-neg-eu \
      --network-endpoint-group-region=europe-west1

    Wiederholen Sie diesen Befehl, um dem Backend-Dienst die zweite serverlose NEG hinzuzufügen. Verwenden Sie dazu die entsprechenden Werte für die zweite serverlose NEG, z. B. api-gateway-serverless-neg-us für my-gateway-us in der Region us-central1.

  3. Erstellen Sie eine URL-Zuordnung, um eingehende Anfragen wie in der folgenden Abbildung an den Backend-Dienst weiterzuleiten:

    URL-Zuordnung, die Traffic an den Backend-Dienst für mehrere Bereitstellungen weiterleitet

    Führen Sie den folgenden Befehl aus, um die URL-Zuordnung zu erstellen. Dabei gilt:

    • URL_MAP_NAME ist der Name der zu erstellenden URL-Zuordnung.
    • BACKEND_SERVICE_NAME ist der Name Ihres Backend-Dienstes.
    gcloud compute url-maps create URL_MAP_NAME \
      --default-service BACKEND_SERVICE_NAME

    Beispiel:

    gcloud compute url-maps create api-gateway-url-map \
      --default-service api-gateway-backend-service

    Diese beispielhafte URL-Zuordnung zielt nur auf einen Backend-Dienst ab, der ein einzelnes Gateway repräsentiert, sodass keine Hostregeln oder Pfadabgleiche erforderlich sind. Wenn Sie mehr als einen Backend-Dienst haben, können Sie Hostregeln verwenden, um Anfragen basierend auf dem Hostnamen an verschiedene Dienste weiterzuleiten. Verwenden Sie Pfad-Matcher, um Anfragen basierend auf dem Anfragepfad zu verschiedenen Diensten weiterzuleiten.

    Beispiel:

    gcloud compute url-maps add-path-matcher api-gateway-url-map \
      --path-matcher-name=my-pm2 \
      --default-service=my-host-default-backend \
      --path-rules="/video=video-service,/video/*=video-service" \
      --new-hosts my-hosts.com
    gcloud compute url-maps add-host-rule api-gateway-url-map \
      --hosts=my-app-domain \
      --path-matcher-name=my-app-path-matcher

    Weitere Informationen zu Hostregeln und Pfad-Matchern finden Sie in der Dokumentation zu URL-Zuordnungen.

  4. Erstellen Sie ein SSL-Zertifikat für Ihren Zielproxy, wie in der folgenden Abbildung dargestellt:

    SSL-Zertifikat, das dem Ziel-Proxy für sicheres Traffic-Routing zugewiesen ist

    Zum Erstellen eines HTTPS-Load-Balancers benötigen Sie eine SSL-Zertifikatsressource für den HTTPS-Ziel-Proxy. Sie können eine SSL-Zertifikatsressource entweder mit einem von Google verwalteten SSL-Zertifikat oder mit einem selbst verwalteten SSL-Zertifikat erstellen. Es empfiehlt sich, von Google verwaltete Zertifikate zu verwenden.

    Zum Erstellen eines von Google verwalteten Zertifikats benötigen Sie eine Domain. Wenn Sie keine Domain haben, können Sie ein selbst signiertes SSL-Zertifikat zu Testzwecken verwenden.

    So erstellen Sie eine von Google verwaltete SSL-Zertifikatsressource:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME
      --domains DOMAIN

    So erstellen Sie eine selbstverwaltete SSL-Zertifikatressource:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --certificate CRT_FILE_PATH \
      --private-key KEY_FILE_PATH
  5. Erstellen Sie einen HTTP(S)-Zielproxy, um Anfragen an Ihr URL-Mapping weiterzuleiten, wie in der folgenden Abbildung dargestellt:

    Ziel-Proxy, der Anfragen empfängt und an die URL-Zuordnung weiterleitet

    Verwenden Sie den folgenden Befehl, um den Ziel-Proxy zu erstellen. Dabei gilt:

    • TARGET_HTTP_PROXY_NAME ist der Name des Ziel-Proxys, der erstellt werden soll.
    • URL_MAP_NAME ist der Name der URL-Zuordnung, die in einem vorherigen Schritt erstellt wurde.
    • Optional: SSL_CERT_NAME ist der Name des erstellten SSL-Zertifikats.
    gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
      --ssl-certificates=SSL_CERT_NAME
      --url-map=URL_MAP_NAME

    Beispiel:

    gcloud compute target-http-proxies create api-gateway-https-proxy \
      --ssl-certificates=hello-cert
      --url-map=api-gateway-url-map
  6. Erstellen Sie eine Weiterleitungsregel, um eingehende Anfragen an den Proxy weiterzuleiten, wie in der folgenden Abbildung dargestellt:

    Weiterleitungsregel, die eingehenden Traffic an den entsprechenden Ziel-Proxy weiterleitet

    Verwenden Sie den folgenden Befehl, um die Weiterleitungsregel zu erstellen. Dabei gilt:

    • HTTPS_FORWARDING_RULE_NAME ist der Name der zu erstellenden Regel.
    • TARGET_HTTP_PROXY_NAME ist der Name des Ziel-Proxys, der erstellt werden soll.
    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
      --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
      --global \
      --ports=443

    Beispiel:

    gcloud compute forwarding-rules create my-fw \
      --target-https-proxy=api-gateway-https-proxy \
      --global \
      --ports=443

DNS-Einträge mit IP-Adresse des Load-Balancers aktualisieren

Wenn Sie eine benutzerdefinierte Domain haben, ist dieser Schritt erforderlich, um die DNS-Einstellungen für Ihre Domain so einzurichten, dass sie auf die neue IP-Adresse Ihres Dienstes verweisen. Dies ist auch erforderlich, wenn Sie einen HTTP(S)-Load-Balancer mit einem von Google verwalteten Zertifikat erstellt haben, das eine Domain erfordert. Bei Verwendung mit DNS wird eine statische IP-Adresse zugewiesen und verwendet. Die genaue Anleitung für diesen Schritt hängt von Ihrem DNS-Anbieter ab

  1. Zum Senden von Traffic an den Load-Balancer muss der DNS-Eintrag Ihrer Domain (in dieser Anleitung "my-app-domain") auf die IP-Adresse(n) des Load-Balancers verweisen.

    Ermitteln Sie die IP-Adresse Ihrer globalen Weiterleitungsregel mit dem folgenden Befehl:

    gcloud compute forwarding-rules list
  2. Aktualisieren Sie den DNS-A-Eintrag Ihrer Domain so, dass er auf die IP-Adresse des Load-Balancers verweist. Dann wird Traffic, der an die vorhandene benutzerdefinierte Domain-URL gesendet wird, stattdessen über den Load-Balancer weitergeleitet. Es kann nur wenige Sekunden oder mehrere Stunden dauern, bis DNS diese Änderung an den DNS-Server weitergibt.

  3. Testen Sie, ob Ihr Gateway Traffic empfängt. Verwenden Sie dazu curl oder rufen Sie die URL in Ihrem Browser auf. Beispiel: none https://my-app-domain

    Sie sollten die vom Cloud Run-Dienst generierte Antwort sehen. Es kann sich beispielsweise um eine HTML-Seite "Hello World" oder eine andere erwartete Antwort handeln, die direkt vom Backend-Dienst generiert wird. Dies bedeutet, dass Ihre Anfrage den Load-Balancer durchläuft und der Backend-Dienst den Load-Balancer anweist, ihn an Ihr Gateway zu senden.

Hinweise

Berücksichtigen Sie vor der Implementierung einer multiregionalen Bereitstellung von API Gateway Folgendes:

  1. API Gateway unterstützt keine Systemdiagnosen. Mit der oben beschriebenen regionsübergreifenden Routing-Konfiguration wird Ihr HTTP(S)-Loadbalancer den Traffic nicht in andere Regionen umleiten, wenn Ihr Gateway oder sein Backend-Dienst in einer Region Fehler zurückgibt, die gesamte API Gateway-Infrastruktur in der Region jedoch verfügbar ist und über Kapazität verfügt.

  2. Wenn Sie verschiedene Regionen in einer Weiterleitungsregel kombinieren möchten, ist die Premium-Stufe erforderlich. Weitere Informationen zur Berechnung von Preisen und Nutzung finden Sie unter Preise für Netzwerkdienststufen.

Best Practices

Wenn Sie die Bereitstellung in mehreren Regionen verwenden, empfehlen wir eine global replizierte verwaltete Datenspeicherlösung wie Cloud Spanner, um sicherzustellen, dass alle Daten global verwaltet werden.