Erste Schritte mit dem Load Balancing für API Gateway

In dieser Anleitung erfahren Sie, wie Sie einen globalen externen Application Load Balancer erstellen, um Anfragen an API Gateway weiterzuleiten. Die Konfiguration erfolgt in denselben Schritten wie bei der Konfiguration der Integration des globalen externen Application Load Balancers mit anderen serverlosen Produkten wie Cloud Run, Cloud Run Functions und App Engine.

Ein Load Balancer ist zwar nicht erforderlich, damit API Gateway funktioniert, aber er ermöglicht es Ihrem Gateway, die Vorteile eines Load Balancers zu nutzen. Wenn Sie beispielsweise einen globalen externen Application Load Balancer mit API Gateway verwenden, haben Sie folgende Möglichkeiten:

  • Benutzerdefinierte Domains verwenden
  • Google Cloud Armor als Netzwerksicherheitsdienst nutzen
  • Effizientes Load-Balancing über mehrere Gateways hinweg an mehreren Standorten.
  • Implementieren Sie die erweiterte Traffic-Verwaltung.

Hinweis

  1. Laden Sie die Google Cloud CLI herunter und installieren Sie sie, falls noch nicht geschehen.

    gcloud CLI herunterladen

  2. Aktualisieren Sie die gcloud CLI-Komponenten:

    gcloud components update
  3. Folgen Sie der API-Gateway-Kurzanleitung, um einen Cloud Run-Dienst bereitzustellen und ein Gateway zu erstellen, das auf diesen Dienst verweist.

  4. Konfigurieren Sie Berechtigungen.

  5. Fügen Sie eine SSL-Zertifikatsressource hinzu.

Cloud Run-Dienst und API Gateway-Instanz bereitstellen

In dieser Anleitung stellen Sie einen „Hello World“-Dienst in Cloud Run bereit, erstellen ein Gateway, das Anfragen an den Cloud Run-Dienst weiterleitet, und konfigurieren einen globalen externen Application Load Balancer, um Anfragen an eine benutzerdefinierte Domain weiterzuleiten.

Obwohl in dieser Anleitung Cloud Run als Backend-Dienst für API Gateway verwendet wird, gelten diese Schritte auch für alle Backend-Dienste, die API Gateway unterstützt.

Nach erfolgreichem Abschluss der API Gateway-Kurzanleitung sollten Sie eine bereitgestellte Gateway-URL haben, die auf den Cloud Run-Dienst verweist.

Berechtigungen konfigurieren

In dieser Anleitung erstellen Sie eine serverlose Netzwerk-Endpunktgruppe (NEG) und einen globalen externen Application 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 globalen externen Application 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.

Globalen externen Application Load Balancer erstellen

  1. Erstellen Sie ein serverloses NEG für API Gateway.

    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 eine serverlose NEG für Ihr Gateway 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 \
      --region=us-central1 \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=my-gateway
  2. Erstellen Sie einen Backend-Dienst, um zu definieren, wie der globale externe Application Load Balancer 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:

    Endpunktgruppe in serverlosem Netzwerk, die als Backend für einen Backend-Dienst konfiguriert ist

    Führen Sie den folgenden Befehl aus, um einen Backend-Dienst zu erstellen:

    gcloud compute backend-services create BACKEND_SERVICE_NAME --global

    Dabei ist BACKEND_SERVICE_NAME der Name Ihres neuen Backend-Dienstes.

    Beispiel:

    gcloud compute backend-services create api-gateway-backend-service --global

    Führen Sie den folgenden Befehl aus, um Ihre serverlose NEG als Backend zum Backend-Dienst 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 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 \
      --network-endpoint-group-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 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 Zielproxy für sicheres Routing zugewiesen ist

    Zum Erstellen eines globalen externen Application Load Balancers ist eine SSL-Zertifikatsressource für den HTTP(S)-Ziel-Proxy erforderlich. 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. Wenn Sie diesen Prozess ohne SSL-Zertifikatsressource testen und einen HTTP-Load-Balancer einrichten möchten, können Sie diesen Schritt überspringen.

    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_HTTPS_PROXY_NAME ist der Name des zu erstellenden HTTP(S)-Ziel-Proxys.
    • 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-https-proxies create TARGET_HTTPS_PROXY_NAME \
      --ssl-certificates=SSL_CERT_NAME \
      --url-map=URL_MAP_NAME

    Beispiel:

    gcloud compute target-https-proxies create api-gateway-https-proxy \
      --ssl-certificates=hello-cert \
      --url-map=api-gateway-url-map

    Wie bereits erwähnt, können Sie einen HTTP-Load-Balancer erstellen, ohne eine SSL-Zertifikatsressource zu erstellen. Verwenden Sie dazu den folgenden Befehl:

    gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
          --url-map=URL_MAP_NAME

    Beispiel:

    gcloud compute target-http-proxies create api-gateway-http-proxy \
      --url-map=api-gateway-url-map

    Nachfolgende Befehle für HTTP-Proxys müssen so geändert werden, dass sie das Flag --target-http-proxy und TARGET_HTTP_PROXY_NAME für ihre HTTP(S)-Entsprechungen berücksichtigen.

  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_HTTPS_PROXY_NAME ist der Name des HTTP(S)-Ziel-Proxys.
    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. Sie ist auch erforderlich, wenn Sie einen globalen externen Application Load Balancer mit einem von Google verwalteten Zertifikat erstellt haben (für das eine Domain erforderlich ist). 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

    Beim Testen sollte die vom Cloud Run-Dienst generierte Antwort angezeigt werden. 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.

Konfiguration des Load-Balancers testen

Nachdem Sie den Load-Balancer konfiguriert haben, können Sie Traffic an die IP-Adresse der Weiterleitungsregel senden.

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

gcloud compute forwarding-rules list

Verwenden Sie den curl-Befehl, um die Antwort für verschiedene URLs Ihrer Dienste zu testen. Beispiel:

curl https://HOST_URL/hello/
curl https://HOST_URL

Mit der API Gateway Cloud Console können Sie prüfen, ob Anfragen die richtigen Dienste erreichen.

Glückwunsch! Sie haben den globalen externen Application Load Balancer für API GatewayPREVIEW erfolgreich konfiguriert.

Bereinigen

Wenn Sie vermeiden möchten, dass Ihrem Google Cloud -Konto die in dieser Kurzanleitung verwendeten Ressourcen in Rechnung gestellt werden, können Sie die von Ihnen erstellten Cloud Load Balancing-Ressourcen löschen. Wenn diese Ressourcen in einem eigenen Projekt erstellt wurden, können Sie das gesamte Projekt löschen. Ansonsten können Sie die Ressourcen einzeln löschen.

Projekt löschen

Führen Sie den folgenden Befehl aus und ersetzen Sie PROJECT_ID durch Ihre Projekt-ID:

gcloud projects delete PROJECT_ID

Einzelne Ressourcen löschen

Löschen Sie jede Komponente im Load-Balancer:

  1. Löschen Sie die Weiterleitungsregeln:

    gcloud compute forwarding-rules delete HTTPS_FORWARDING_RULE_NAME --global
  2. Löschen Sie die globalen externen IP-Adressen:

    gcloud compute addresses delete IP_ADDRESSES --global
  3. Löschen Sie den Ziel-Proxy:

    gcloud compute target-https-proxies delete TARGET_HTTP_PROXY_NAME
  4. Löschen Sie die URL-Zuordnung:

    gcloud compute url-maps delete URL_MAP_NAME
  5. Löschen Sie die Backend-Dienste:

    gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
  6. (Optional) Löschen Sie das SSL-Zertifikat:

    gcloud compute ssl-certificates delete SSL_CERTIFICATE_NAME

Löschen Sie die serverlose NEG:

gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME --region=REGION