HTTP/2 für Dienste verwenden

Wenn eine Containerinstanz Anfragen empfängt, stuft Cloud Run diese Anfragen von HTTP/2 auf HTTP/1 herab. Eine Ausnahme bildet der native gRPC-Traffic, für den HTTP/2 erforderlich ist, damit er ordnungsgemäß funktioniert. Auf dieser Seite erfahren Sie, wie Sie Ihren Dienst so konfigurieren, dass er HTTP/2-End-to-End verwendet. Dadurch wird verhindert, dass Cloud Run Anfragen auf HTTP/1 herabstuft.

Weitere Informationen zum Aufrufen von Diensten mit HTTP finden Sie unter Mit einer HTTPS-Anfrage aufrufen.

Vor der Konfiguration

Ihr Cloud Run-Dienst muss Anfragen im HTTP/2-Klartext (h2c)-Format verarbeiten. Die Frontend-Infrastrukturinfrastruktur von Google beendet TLS und leitet den h2c-Traffic dann über einen verschlüsselten Kanal an Cloud Run und an Ihren Container weiter.

Testen Sie, ob Ihr Dienst h2c Anfragen unterstützt. Testen Sie dazu den Dienst lokal mit diesem curl-Befehl:

curl -i --http2-prior-knowledge http://localhost:PORT

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zu gewähren, um die zum Konfigurieren und Bereitstellen von Cloud Run-Diensten erforderlichen Berechtigungen zu erhalten:

Wenn Sie einen Dienst oder eine Funktion aus dem Quellcode bereitstellen, müssen Ihnen außerdem zusätzliche Rollen für Ihr Projekt und das Cloud Build-Dienstkonto gewährt werden.

Eine Liste der IAM-Rollen und -Berechtigungen im Zusammenhang mit Cloud Run finden Sie unter IAM-Rollen für Cloud Run und IAM-Berechtigungen für Cloud Run. Wenn Ihr Cloud Run-Dienst mit Google Cloud APIs wie Cloud-Clientbibliotheken verknüpft ist, lesen Sie die Konfigurationsanleitung für Dienstidentitäten. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Bereitstellungsberechtigungen und Zugriff verwalten.

Unterstützte HTTP/2-Dienste

HTTP/2 ist ideal für eine Vielzahl von Anwendungen. Typische Anwendungsfälle:

  • gRPC-Dienste: Erstellen Sie leistungsstarke Microservices mit geringer Latenz, die über gRPC kommunizieren.
  • APIs mit hohem Durchsatz: Reduzieren Sie den Overhead für Anwendungen, die eine effiziente Verarbeitung zahlreicher kleiner Anfragen erfordern oder Daten an Clients senden müssen.

HTTP/2-End-to-End einrichten und aktualisieren

Jede Konfigurationsänderung führt zur Erstellung einer neuen Überarbeitung. Für nachfolgende Überarbeitungen gilt automatisch dieselbe Konfigurationseinstellung, sofern Sie sie nicht explizit aktualisieren.

Sie können die Nutzung von HTTP/2-End-to-End mit der Google Cloud Console, der Google Cloud CLI oder YAML festlegen, wenn Sie einen neuen Dienst erstellen oder eine neue Überarbeitung bereitstellen:

Console

  1. Rufen Sie in der Google Cloud Console Cloud Run auf:

    Zu Cloud Run

  2. Wählen Sie im Cloud Run-Navigationsmenü Dienste aus und klicken Sie auf Container bereitstellen, um einen neuen Dienst zu konfigurieren. Wenn Sie einen vorhandenen Dienst konfigurieren möchten, klicken Sie auf den Dienst und dann auf Neue Überarbeitung bearbeiten und bereitstellen.

  3. Wenn Sie einen neuen Dienst konfigurieren, füllen Sie die Seite mit den anfänglichen Diensteinstellungen aus und klicken Sie dann auf Container, Netzwerk, Sicherheit, um die Seite zur Dienstkonfiguration zu maximieren.

  4. Klicken Sie auf den Tab Netzwerk.

    Image

    • Wählen Sie HTTP/2-Verbindungen aktivieren aus. Achten Sie darauf, dass Ihr benutzerdefiniertes Container-Image HTTP/2-Anfragen unterstützt.
  5. Klicken Sie auf Erstellen oder Bereitstellen.

gcloud

Mit dem folgenden Befehl können Sie einen bestimmten Dienst aktualisieren, um HTTP/2 zu verwenden:

gcloud run services update SERVICE --use-http2

Ersetzen Sie SERVICE durch den Namen Ihres Dienstes.

Sie können Ihren Dienst mit dem folgenden Befehl auch so einrichten, dass bei der Bereitstellung HTTP/2 verwendet wird:

gcloud run deploy --image IMAGE_URL --use-http2

Ersetzen Sie IMAGE_URL durch einen Verweis auf Ihr benutzerdefiniertes Container-Image, das HTTP/2-Anfragen unterstützt.

YAML

  1. Wenn Sie einen neuen Dienst erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Aktualisieren Sie ports mit dem Namen h2c und containerPort mit dem Port Ihrer Wahl, wie im folgenden Beispiel gezeigt:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            ports:
            - name: h2c
              containerPort: 8080

    Ersetzen Sie Folgendes:

    • SERVICE: Der Name Ihres Cloud Run-Dienstes
    • IMAGE_URL: Ein Verweis auf Ihr benutzerdefiniertes Container-Image, das HTTP/2-Anfragen unterstützt
    • REVISION durch einen neuen Überarbeitungsnamen ersetzen oder löschen (falls vorhanden). Wenn Sie einen neuen Überarbeitungsnamen angeben, muss er die folgenden Kriterien erfüllen:
      • Beginnt mit SERVICE-
      • Enthält nur Kleinbuchstaben, Ziffern und -
      • Endet nicht mit -
      • Darf nicht mehr als 63 Zeichen enthalten
  3. Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:

    gcloud run services replace service.yaml

Terraform

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

Fügen Sie einer google_cloud_run_v2_service Ressource in Ihrer Terraform-Konfiguration Folgendes hinzu:
  resource "google_cloud_run_v2_service" "default" {
    name     = "cloudrun-service-h2c"
    location = "us-central1"

    deletion_protection = false # set to "true" in production

    template {
      containers {
        image = IMAGE_URL
        # Enable HTTP/2
        ports {
          name           = "h2c"
          container_port = 8080
        }
      }
    }
  }

Ersetzen Sie IMAGE_URL durch einen Verweis auf Ihr benutzerdefiniertes Container-Image, das HTTP/2-Anfragen unterstützt.

Wenn Ihr Container HTTP-Anfragen an einem anderen Port als 8080 überwacht, ersetzen Sie 8080 durch diese Portnummer.

HTTP/2-Einstellungen aufrufen

So rufen Sie die aktuellen HTTP/2-Einstellungen für Ihren Cloud Run-Dienst auf:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Dienste von Cloud Run auf:

    Zu Cloud Run

  2. Klicken Sie auf den gewünschten Dienst, um die Seite Dienstdetails zu öffnen.

  3. Klicken Sie auf den Tab Überarbeitungen.

  4. Im Detailbereich auf der rechten Seite ist die http/2-Einstellung auf dem Tab Netzwerk aufgelistet.

gcloud

  1. Verwenden Sie den folgenden Befehl:

    gcloud run services describe SERVICE
  2. Suchen Sie in der zurückgegebenen Konfiguration nach der http/2-Einstellung.

HTTP/2 hinter einem Load-Balancer verwenden

Wenn Cloud Run so konfiguriert ist, dass es auf HTTP/2 wartet, verarbeitet es automatisch den HTTP/2- oder gRPC-Traffic, der vom Application Load Balancer kommt. Für den Backend-Dienst des Load-Balancers ist keine spezielle Konfiguration erforderlich.

Verwenden Sie eine der folgenden Methoden, um Cloud Run für die Verwendung von HTTP/2 oder gRPC zu konfigurieren: