Auf dieser Seite wird gezeigt, wie Sie NGINX als Frontend-Proxy für Ihren Anwendungscontainer verwenden. Dies ist nützlich, wenn Sie Anfragen oder Antworten verarbeiten möchten. Sie können die Gzip-Komprimierung hinzufügen oder HTTP/2 in HTTP/1 übersetzen, wenn Ihre Anwendungscontainer nur HTTP/1 unterstützen und Sie aus Leistungsgründen End-to-End-HTTP/2 verwenden müssen.
Im Beispiel auf dieser Seite wird auf jeder Cloud Run-Instanz ein Nginx-Container als Haupt-Serving-Container ausgeführt. Er ist so konfiguriert, dass Anfragen an den Anwendungscontainer weitergeleitet werden, der als Sidecar-Container ausgeführt wird, wie in diesem Diagramm dargestellt:
Die effektivste Methode für Frontend-Proxy in Cloud Run ist die Bereitstellung des Nginx-Server-Proxy-Server-Containers und des Webanwendungs-Containers als einzelnen Cloud Run-Dienst:
Dieser einzelne Cloud Run-Dienst akzeptiert Anfragen und sendet sie an den Ingress-Container, der in diesem Fall der Proxyserver ist. Der Proxyserver sendet dann über das Netzwerk localhost
Anfragen an die Webanwendung, sodass kein externes Netzwerk erforderlich ist.
Durch die Bereitstellung als einzelner Cloud Run-Dienst werden Latenzen, der Aufwand für die Dienstverwaltung und die Offenlegung in externen Netzwerken reduziert. Cloud Run interagiert nur direkt mit den Sidecar-Containern, um sie zu starten oder zu beenden, wenn der Dienst gestartet oder beendet wird.
Der Webanwendungscontainer und alle Sidecar-Container können in verschiedenen Programmiersprachen geschrieben werden. Ein Beispiel für PHP finden Sie unter nginx-Beispiel für PHP in GitHub.
Hinweise
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run and Secret Manager APIs.
- Installieren und initialisieren Sie die gcloud CLI.
- Aktualisieren Sie die Google Cloud CLI:
gcloud components update
- Konfigurieren Sie die Google Cloud CLI:
gcloud init
- Authentifizieren Sie sich mit der Google Cloud CLI:
gcloud auth login
- Sowohl die Rolle Cloud Run-Administrator als auch die Rolle Dienstkontonutzer,
- Jede benutzerdefinierte Rolle, die diese bestimmte Liste von Berechtigungen enthält.
- Weisen Sie
nginx
an, denselben Cloud Run-Standardport8080
zu überwachen, der sich inlocalhost
befindet. - GZIP-Komprimierung zur Leistungssteigerung anwenden
- Weisen Sie
proxy_pass
an, alle Anfragen an diesen Ingress-Container an den Web-App-Sidecar-Container am Localhost-Port8888
zu senden. Rufen Sie in der Google Cloud Console die Seite Secret Manager auf:
Klicken Sie auf Secret erstellen.
Geben Sie im Formularfeld
name
nginx_config ein.Laden Sie die Datei
nginx.conf
untermulti-container/hello-nginx-sample/nginx.conf
als Secret-Wert hoch.Behalten Sie die Standardeinstellungen (
Google-owned and Google-managed encryption key, etc
) bei.Klicken Sie auf Secret erstellen.
Gewähren Sie dem Compute-Dienstkonto des Projekts Zugriff auf dieses neue Secret. Rufen Sie dazu in der Google Cloud Console die Seite IAM auf:
Suchen Sie das Hauptdienstkonto mit dem Namen
Compute Engine default service account
und klicken Sie auf Hauptkonto bearbeiten.Klicken Sie auf Weitere Rolle hinzufügen und wählen Sie Zugriffsperson für Secret Manager-Secret aus.
Klicken Sie auf Speichern.
Erstellen Sie im Terminal mit dem folgenden Befehl ein neues
nginx_config
-Secret in Secret Manager:gcloud secrets create nginx_config --replication-policy='automatic' --data-file='./nginx.conf'
Gewähren Sie dem Compute-Dienstkonto des Projekts Zugang zu dem neuen Secret mit dem Befehl
export PROJECT_NUMBER=$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)') gcloud secrets add-iam-policy-binding nginx_config --member=serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com --role='roles/secretmanager.secretAccessor'
Prüfen Sie mit dem Befehl
gcloud secrets list
, ob das Secret erstellt wurde.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
Fügen Sie in
service.yaml
Folgendes hinzu:Rufen Sie in der Google Cloud -Console die Seite Cloud Run auf:
Wählen Sie im Menü Dienste aus und klicken Sie auf Container bereitstellen, um das Formular Dienst erstellen aufzurufen.
- Wählen Sie Überarbeitung aus dem vorhandenen Container-Image bereitstellen aus und geben Sie
nginx
als Container-Image-URL ein. - Geben Sie im Feld Name des Dienstes einen Namen für den Dienst ein, z. B.
hello-mc
. - Wählen Sie aus der Liste Region einen Speicherort für die Bereitstellung aus, z. B.
us-west1
. - Wählen Sie unter Authentifizierung die Option
Allow unauthenticated invocations
aus. Wenn Sie nicht berechtigt sind, diese Option auszuwählen (Cloud Run-Administratorrolle), wird der Dienst bereitgestellt und erfordert eine Authentifizierung.
- Wählen Sie Überarbeitung aus dem vorhandenen Container-Image bereitstellen aus und geben Sie
Klicken Sie auf Container, Volumes, Netzwerk, Sicherheit, um das Konfigurationsformular zu maximieren.
- Klicken Sie auf den Tab Volumes.
- Klicken Sie auf Volume hinzufügen.
- Wählen Sie in der Liste Volume-Typ die Option Secret aus.
- Geben Sie im Feld Lautstärke-Name
nginx-conf-secret
ein. - Geben Sie im Feld Secret nginx_config ein.
- Geben Sie unter Angegebene Pfade für Secret-Versionen default.conf als Pfad und latest als Version an.
- Klicken Sie auf Erstellen, um das Secret-Volume zu erstellen.
Klicken Sie auf den Tab Container, um das Formular Container bearbeiten aufzurufen.
- Klicken Sie auf Einstellungen und ändern Sie unter Ressourcen den Arbeitsspeicher auf 256 MiB und die CPU auf 1 CPU.
- Klicken Sie auf Volume-Bereitstellungen.
- Klicken Sie auf Volume bereitstellen.
- Wählen Sie aus der Namensliste nginx-conf-secret aus.
- Geben Sie für Bereitstellungspfad etc/nginx/conf.d ein.
- Klicken Sie auf Fertig, um die Konfiguration für den ersten Container abzuschließen.
Klicken Sie auf Container hinzufügen, um den Sidecar-Container hinzuzufügen und das Formular Neuer Container aufzurufen.
- Wählen Sie die Standard-Container-Image-URL us-docker.pkg.dev/cloudrun/container/hello aus.
- Klicken Sie auf den Tab Einstellungen und ändern Sie dann unter Ressourcen den Speicher in 256 MiB und die CPU in 1 CPU.
- Klicken Sie auf Variablen und Secrets.
- Klicken Sie auf Variable hinzufügen.
- Geben Sie PORT als neuen Namen der Umgebungsvariablen und 8888 als Wert ein.
- Klicken Sie auf Fertig.
Rufen Sie das Formular Container bearbeiten für den ersten Container (
nginx
) auf.- Klicken Sie auf den Tab Einstellungen.
- Wählen Sie unter Container-Startreihenfolge in der Liste Abhängig von die Option
nginx
aus. Das bedeutet, dass dernginx
-Container erst gestartet wird, nachdem derhello
-Container erfolgreich gestartet wurde. - Klicken Sie auf Erstellen und warten Sie, bis der Dienst bereitgestellt wurde.
Klonen Sie das Beispiel-App-Repository in einem Terminal auf Ihren lokalen Computer:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
Wechseln Sie in das Verzeichnis, das den Cloud Run-Beispielcode enthält:
cd cloud-run-samples/multi-container/hello-nginx-sample/
Für das Deployment erforderliche Berechtigungen
Sie benötigen EINES von Folgendem:
Konfigurationsübersicht
In dieser Anleitung werden vordefinierte Container-Images verwendet. Das einzige, was für einen Front-End-Proxy erforderlich ist, ist das Konfigurieren der Container und des Dienstes selbst.
Nginx-Ingress-Container konfigurieren
Das Container-Image ist nginx
und in Docker Hub verfügbar.
Sie können es weitgehend unverändert verwenden, mit der Ausnahme, dass es für die Ausführung als Proxydienst konfiguriert werden muss, sodass die Proxy-Anfragen an den Port gesendet werden, auf dem der Sidecar-Container localhost
überwacht. Im Beispiel auf dieser Seite wird auch die GZIP-Komprimierung für Anfragen und Antworten aktiviert.
Konfiguration wird mithilfe einer bereitgestellten Textdatei um /etc/nginx/conf.d/nginx.conf
bereitgestellt. Weil Sie Dateien im Container nicht direkt bearbeiten können, müssen Sie unter /etc/nginx/conf.d/
ein Volume bereitstellen, das die Konfigurationsdatei enthält. Eine Möglichkeit, eine Datei an einem bestimmten Speicherort in einem Container bereitzustellen, der in Cloud Run ausgeführt wird, besteht darin, den Dateiinhalt in einem Secret Manager-Secret zu speichern und dieses Secret am ausgewählten Speicherort bereitzustellen.
Kopieren Sie Folgendes in eine Datei mit dem Namen nginx.conf
im aktuellen Verzeichnis Ihres lokalen Computers.
Führen Sie in der Konfiguration die folgenden Schritte aus:
Erstellen Sie ein Secret mit dem Inhalt der nginx.conf
-Datei.
Console
gcloud
Informationen zum Sidecar-Beispielbild für Web-Apps
In dieser Anleitung wird das Beispiel-Container-Image unter us-docker.pkg.dev/cloudrun/container/hello
verwendet. Sie müssen die Portnummer, die der Container überwacht, und localhost
als Host angeben, wie unter Sidecar-Containerkonfiguration angeben beschrieben.
Multi-Container-Dienst konfigurieren
Sie können die Google Cloud -Konsole oder die Cloud Run-YAML-Datei verwenden, um einen Cloud Run-Dienst mit mehr als einem Container zu konfigurieren.
In der Dienstkonfiguration müssen Sie den Nginx-Proxyserver als Ingress-Container (Bereitstellend), den Port, der überwacht werden soll, ob es HTTP 1- oder HTTP 2-Anfragen annimmt und die Container-Startreihenfolge angeben. Der Ingress-Container (Proxyserver) hängt vom Sidecar der Webanwendung ab, sodass der Webanwendung-Sidecar zuerst gestartet werden muss.
Diese Konfigurationen werden in den nächsten Abschnitten beschrieben.
YAML-Metadaten hinzufügen
Console
Eine vollständige Anleitung für die Console finden Sie unter Dienst bereitstellen.
YAML
In diesem Abschnitt wird die Überarbeitung des Dienstes beschrieben, einschließlich der Attribute, die sich von Überarbeitung zu Überarbeitung unterscheiden können.
Startreihenfolge von Containern angeben
Console
Eine vollständige Anleitung für die Console finden Sie unter Dienst bereitstellen.
YAML
Fügen Sie in service.yaml
Folgendes hinzu:
Beachten Sie die Annotation container-dependencies
, die Cloud Run anweist, auf den Start des Containers „hello“ zu warten, bevor der nginx-Container gestartet wird. Andernfalls, wenn der nginx-Container zuerst gestartet wird, könnte der nginx-Container versuchen, eine Webanwendung an den Container der Web-Anwendung per Proxy weiterzuleiten, der nicht bereit ist. Dies würde Webfehlerantworten generieren.
Für jeden Container kann optional eine „name“-Property definiert werden, mit der in anderen Direktiven auf den Container verwiesen werden kann.
Im Bereitstellungscontainer wird der Proxyserver mit dem Namen nginx
ausgeführt. Dies ist der Container, an den Cloud Run eingehende Anfragen sendet. Sie müssen daher die Version von HTTP
und den Containerport angeben, an den die Anfragen gesendet werden sollen.
Bereitstellungscontainerkonfiguration angeben
Console
Eine vollständige Anleitung für die Console finden Sie unter Dienst bereitstellen.
YAML
Fügen Sie in der Datei service.yaml
Folgendes hinzu:
Für den nginx
-Server ist eine Konfigurationsdatei im Verzeichnis /etc/nginx/conf.d/
erforderlich. Dazu müssen Sie ein Volume mit der Datei an diesem Speicherort bereitstellen. Im Abschnitt volumeMount
wird angegeben, dass dort ein Volume mit dem Namen configuration
platziert werden soll. Das Volume selbst wird später in der Datei in einem eigenen Abschnitt definiert.
Sidecar-Containerkonfiguration angeben
Console
Eine vollständige Anleitung für die Console finden Sie unter Dienst bereitstellen.
YAML
Fügen Sie in service.yaml
Folgendes hinzu:
Die hello
-Anwendung benötigt ebenfalls Konfigurationsinformationen. Er überwacht eingehende Anfragen am Port, der in der Umgebungsvariable PORT
angegeben ist. Name und Wert werden im Abschnitt env
angegeben.
Secret-Volume angeben
Console
Eine vollständige Anleitung für die Console finden Sie unter Dienst bereitstellen.
YAML
Fügen Sie in der Datei service.yaml
Folgendes hinzu:
Geben Sie die Konfiguration volume
an, die im Abschnitt volumeMount
bereitgestellt wird. Sie enthält eine einzelne Datei namens nginx.conf
, deren Inhalt als Wert des Secrets mit dem Namen nginx-conf-secret
definiert ist.
Dienst bereitstellen
Console
YAML
So stellen Sie den Proxyserver-Container und den Webanwendungscontainer als einzelnen Dienst bereit:
gcloud run services replace service.yaml
Bereitgestellten Dienst überprüfen
Um zu prüfen, ob erfolgreich bereitgestellt wurde: Kopieren Sie die generierte Cloud Run-URL und öffnen Sie sie in einem Browser oder verwenden Sie den folgenden Befehl, um eine authentifizierte Anfrage zu senden:
curl --header "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
Sie sollten mit einem nginx-Proxy begrüßt werden, der erfolgreich in den Hello-Sidecar-Container portiert wurde und den Antwortstatus 200
hat.
Möchten Sie es selbst testen?
So können Sie diese Anleitung nachvollziehen:
gcloud
Nächste Schritte
Weitere Informationen zur Verwendung von Sidecars in einem Cloud Run-Dienst: