Dies ist der dritte Blogbeitrag unserer Reihe zur Bereitstellung von NGINX Open Source und NGINX Plus als API-Gateway.
Notiz: Sofern nicht anders angegeben, gelten alle Informationen in diesem Beitrag sowohl für NGINX Plus als auch für NGINX Open Source. Der besseren Lesbarkeit halber wird im Rest des Blogs lediglich von „NGINX“ gesprochen, wenn die Diskussion beide Versionen betrifft.
Die Konzepte und Vorteile von Microservices-Anwendungsarchitekturen wurden in den letzten Jahren ausführlich dokumentiert, insbesondere im NGINX-Blog . Das Herzstück von Microservices-Anwendungen ist die HTTP-API, und die ersten beiden Blogbeiträge dieser Reihe verwenden eine hypothetische REST-API, um zu veranschaulichen, wie NGINX diesen Anwendungsstil angeht.
Trotz der Beliebtheit von REST-APIs mit JSON-Nachrichtenformaten für moderne Anwendungen handelt es sich nicht für jedes Szenario oder jede Organisation um einen idealen Ansatz. Die häufigsten Herausforderungen sind:
In den letzten Jahren hat sich gRPC als alternativer Ansatz zum Erstellen verteilter Anwendungen und insbesondere von Microservices-Anwendungen herauskristallisiert. gRPC wurde ursprünglich bei Google entwickelt, wurde 2015 als Open Source freigegeben und ist jetzt ein Projekt der Cloud Native Computing Foundation. Bezeichnend ist, dass gRPC HTTP/2 als Transportmechanismus verwendet und dessen binäres Datenformat und Multiplex-Streaming-Funktionen nutzt.
Die wichtigsten Vorteile von gRPC sind:
In den ersten beiden Beiträgen dieser Reihe wurde beschrieben, wie mehrere APIs über einen einzigen Einstiegspunkt bereitgestellt werden können (z. B. https://api.example.com ). Das Standardverhalten und die Eigenschaften des gRPC-Verkehrs veranlassen uns, denselben Ansatz zu verfolgen, wenn NGINX als gRPC-Gateway bereitgestellt wird. Obwohl es möglich ist, sowohl HTTP- als auch gRPC-Verkehr über denselben Hostnamen und Port zu teilen, gibt es eine Reihe von Gründen, warum eine Trennung vorzuziehen ist:
Um diese Trennung zu erreichen, platzieren wir die Konfiguration für unser gRPC-Gateway in einem eigenen Server{}-
Block in der Hauptkonfigurationsdatei von gRPC, grpc_gateway.conf , die sich im Verzeichnis /etc/nginx/conf.d befindet.
Wir beginnen mit der Definition des Formats der Einträge im Zugriffsprotokoll für gRPC-Verkehr (Zeilen 1–4). In diesem Beispiel verwenden wir ein JSON-Format, um die relevantesten Daten aus jeder Anfrage zu erfassen. Beachten Sie beispielsweise, dass die HTTP-Methode nicht enthalten ist, da alle gRPC-Anfragen POST
verwenden. Wir protokollieren außerdem den gRPC-Statuscode zusammen mit dem HTTP-Statuscode. Der gRPC-Statuscode kann jedoch auf unterschiedliche Weise generiert werden. Unter normalen Bedingungen wird grpc-status
als HTTP/2-Trailer vom Backend zurückgegeben, unter bestimmten Fehlerbedingungen kann es jedoch als HTTP/2-Header zurückgegeben werden, entweder vom Backend oder von NGINX selbst. Um das Zugriffsprotokoll zu vereinfachen, verwenden wir einen Map-
Block (Zeilen 6–9), um eine neue Variable $grpc_status
auszuwerten und den gRPC-Status von seinem Ursprungsort abzurufen.
Diese Konfiguration enthält zwei Listen-
Direktiven (Zeilen 12 und 13), sodass wir sowohl Klartext- (Port 50051) als auch TLS-geschützten (Port 443) Datenverkehr testen können. Der Parameter http2
konfiguriert NGINX so, dass HTTP/2-Verbindungen akzeptiert werden. Beachten Sie, dass dies unabhängig vom Parameter ssl
ist. Beachten Sie auch, dass Port 50051 der herkömmliche Klartext-Port für gRPC ist, aber nicht für den Einsatz in der Produktion geeignet ist.
Die TLS-Konfiguration ist konventionell, mit Ausnahme der ssl_protocols
-Direktive (Zeile 23), die TLS 1.2 als schwächstes akzeptables Protokoll angibt. Die HTTP/2-Spezifikation schreibt die Verwendung von TLS 1.2 (oder höher) vor . Dadurch wird garantiert, dass alle Clients die Server Name Indication (SNI)-Erweiterung für TLS unterstützen. Dies bedeutet, dass das gRPC-Gateway Port 443 mit virtuellen Servern teilen kann, die in anderen Server{}-
Blöcken definiert sind.
Um die gRPC-Funktionen von NGINX zu erkunden, verwenden wir eine einfache Testumgebung, die die Schlüsselkomponenten eines gRPC-Gateways mit mehreren bereitgestellten gRPC-Diensten darstellt. Wir verwenden zwei Beispielanwendungen aus den offiziellen gRPC-Anleitungen : „Helloworld “ (geschrieben in Go) und „RouteGuide“ (geschrieben in Python). Die RouteGuide-Anwendung ist besonders nützlich, da sie jede der vier gRPC-Dienstmethoden enthält:
Beide gRPC-Dienste sind als Docker-Container auf unserem NGINX-Host installiert. Vollständige Anweisungen zum Erstellen der Testumgebung finden Sie im Anhang .
Wir konfigurieren NGINX so, dass es die Dienste RouteGuide und HelloWorld sowie die Adressen der verfügbaren Container kennt.
Wir fügen für jeden der gRPC-Dienste einen Upstream-
Block hinzu (Zeilen 40–45 und 47–51) und füllen sie mit den Adressen der einzelnen Container, die den gRPC-Servercode ausführen.
Da NGINX auf dem herkömmlichen Klartext-Port für gRPC (50051) lauscht, fügen wir der Konfiguration Routing-Informationen hinzu, damit Client-Anfragen den richtigen Backend-Dienst erreichen. Aber zuerst müssen wir verstehen, wie gRPC-Methodenaufrufe als HTTP/2-Anfragen dargestellt werden. Das folgende Diagramm zeigt eine gekürzte Version der Datei route_guide.proto für den RouteGuide-Dienst und veranschaulicht, wie Paket, Dienst und RPC-Methode aus der Sicht von NGINX die URI bilden.
Die in der HTTP/2-Anfrage enthaltenen Informationen können daher für Routing-Zwecke verwendet werden, indem einfach der Paketname (hier „routeguide“
oder „helloworld
“) abgeglichen wird.
Der erste Standortblock
(Zeile 26) definiert ohne Modifikatoren eine Präfixübereinstimmung, sodass /routeguide
mit allen Diensten und RPC-Methoden übereinstimmt, die in der entsprechenden .proto- Datei für dieses Paket definiert sind. Die Direktive grpc_pass
(Zeile 27) übergibt daher alle Anfragen des RouteGuide-Clients an die Upstream-Gruppe routeguide_service . Diese Konfiguration (und die parallele Konfiguration für den „Hello World“-Dienst in den Zeilen 29 und 30) bietet eine einfache Zuordnung zwischen einem gRPC-Paket und seinen Backend-Diensten.
Beachten Sie, dass das Argument der grpc_pass-
Direktiven mit dem Schema grpc://
beginnt, das Anforderungen über eine gRPC-Verbindung im Klartext weiterleitet. Wenn das Backend für TLS konfiguriert ist, können wir das Schema grpcs://
verwenden, um die gRPC-Verbindung mit Ende-zu-Ende-Verschlüsselung zu sichern.
Nachdem wir den RouteGuide-Client ausgeführt haben, können wir das Routing-Verhalten durch Überprüfung der Protokolldateieinträge bestätigen. Hier sehen wir, dass die RouteChat-RPC-Methode an den Container weitergeleitet wurde, der auf Port 10002 läuft.
$ python route_guide_client.py ... $ tail -1 /var/log/nginx/grpc_log.json | jq { "Zeitstempel": "2021-01-20T12:17:56+01:00", "Kunde": "127.0.0.1", "uri": "/routeguide.RouteGuide/RouteChat", "http-status": 200, „grpc-Status“: 0, "Upstream": "127.0.0.1:10002", "rx-bytes": 161, "tx-Bytes": 212 }
Wie oben gezeigt, ist das Routing mehrerer gRPC-Dienste zu verschiedenen Backends einfach, effizient und erfordert nur sehr wenige Konfigurationszeilen. Allerdings können die Routing-Anforderungen in einer Produktionsumgebung komplexer sein und ein Routing basierend auf anderen Elementen in der URI erfordern (dem gRPC-Dienst oder sogar einzelnen RPC-Methoden).
Der folgende Konfigurationsausschnitt erweitert das vorherige Beispiel so, dass die bidirektionale Streaming-RPC-Methode RouteChat
an ein Backend und alle anderen RouteGuide-
Methoden an ein anderes Backend weitergeleitet werden.
Die zweite Standortdirektive
(Zeile 7) verwendet den Modifikator =
(Gleichheitszeichen), um anzuzeigen, dass dies eine exakte Übereinstimmung mit der URI für die RouteChat-
RPC-Methode ist. Genaue Übereinstimmungen werden vor Präfixübereinstimmungen verarbeitet. Dies bedeutet, dass für die RouteChat-
URI keine anderen Standortblöcke
berücksichtigt werden.
gRPC-Fehler unterscheiden sich etwas von denen für herkömmlichen HTTP-Verkehr. Clients erwarten, dass Fehlerbedingungen als gRPC-Antworten ausgedrückt werden, weshalb der Standardsatz an NGINX-Fehlerseiten (im HTML-Format) ungeeignet ist, wenn NGINX als gRPC-Gateway konfiguriert ist. Wir beheben dies, indem wir eine Reihe benutzerdefinierter Fehlerantworten für gRPC-Clients angeben.
Der vollständige Satz der gRPC-Fehlerantworten ist eine relativ lange und weitgehend statische Konfiguration. Daher speichern wir sie in einer separaten Datei, errors.grpc_conf , und verwenden die Include
-Direktive (Zeile 34), um auf sie zu verweisen. Im Gegensatz zu HTTP/REST-Clients wird von gRPC-Clientanwendungen nicht erwartet, dass sie eine große Bandbreite an HTTP-Statuscodes verarbeiten. In der gRPC-Dokumentation ist festgelegt, wie ein zwischengeschalteter Proxy wie beispielsweise NGINX HTTP-Fehlercodes in gRPC-Statuscodes umwandeln muss, damit die Clients stets eine passende Antwort erhalten. Wir verwenden die Direktive error_page
, um diese Zuordnung durchzuführen.
Jeder der Standard-HTTP-Statuscodes wird mit dem Präfix @
an einen benannten Ort übergeben, sodass eine gRPC-kompatible Antwort generiert werden kann. Beispielsweise das HTTP404
Die Antwort wird intern zum Speicherort @grpc_unimplemented
umgeleitet, der später in der Datei definiert wird:
Der benannte Speicherort @grpc_unimplemented
ist nur für die interne NGINX-Verarbeitung verfügbar – Clients können ihn nicht direkt anfordern, da keine routingfähige URI vorhanden ist. An dieser Stelle erstellen wir eine gRPC-Antwort, indem wir die obligatorischen gRPC-Header ausfüllen und sie ohne Antworttext unter Verwendung des HTTP-Statuscodes senden.204
( Kein
Inhalt
).
Wir können den Befehl curl(1)
verwenden, um einen schlecht funktionierenden gRPC-Client zu simulieren, der eine nicht vorhandene gRPC-Methode anfordert. Beachten Sie jedoch, dass curl
im Allgemeinen nicht als gRPC-Testclient geeignet ist, da Protokollpuffer ein binäres Datenformat verwenden. Um gRPC auf der Befehlszeile zu testen, sollten Sie grpc_cli
verwenden.
$ curl -i --http2 -H "Inhaltstyp: application/grpc" -H "TE: Trailer" -X POST https://grpc.example.com/does.Not/Exist HTTP/2 204 Server: nginx/1.19.5 Datum: Mittwoch, 20. Januar 2021, 15:03:41 GMT grpc-status: 12 grpc-Meldung: nicht implementiert
Die oben referenzierte Datei grpc_errors.conf enthält auch HTTP‑zu‑gRPC‑Statuscodezuordnungen für andere Fehlerantworten, die NGINX generieren könnte, wie etwa Timeouts und Client‑Zertifikatfehler.
gRPC- Metadaten ermöglichen Clients, neben RPC-Methodenaufrufen zusätzliche Informationen zu senden, ohne dass diese Daten Teil der Protokollpufferspezifikation ( .proto- Datei) sein müssen. Metadaten sind eine einfache Liste von Schlüssel-Wert-Paaren, wobei jedes Paar als separater HTTP/2-Header übertragen wird. Daher sind Metadaten für NGINX leicht zugänglich.
Von den vielen Anwendungsfällen für Metadaten ist die Client-Authentifizierung für ein gRPC-API-Gateway der häufigste. Der folgende Konfigurationsausschnitt zeigt, wie NGINX Plus gRPC-Metadaten zur Durchführung der JWT-Authentifizierung verwenden kann (JWT-Authentifizierung ist exklusiv für NGINX Plus). In diesem Beispiel wird das JWT in den Authentifizierungstoken-
Metadaten gesendet.
Jeder HTTP-Anforderungsheader steht NGINX Plus als Variable mit dem Namen $http_ header
zur Verfügung. Bindestriche ( -
) im Header-Namen werden im Variablennamen in Unterstriche ( _
) umgewandelt, sodass das JWT als $http_auth_token
(Zeile 2) verfügbar ist.
Wenn API-Schlüssel zur Authentifizierung verwendet werden, beispielsweise mit vorhandenen HTTP/REST-APIs, können diese auch in gRPC-Metadaten übertragen und von NGINX validiert werden. Eine Konfiguration für die API-Schlüsselauthentifizierung<.htmla> finden Sie in Teil 1 dieser Blogserie.
Beim Lastenausgleich des Datenverkehrs auf mehrere Backends ist es wichtig, das Senden von Anfragen an Backends zu vermeiden, die ausgefallen oder anderweitig nicht verfügbar sind. Mit NGINX Plus können wir aktive Integritätsprüfungen verwenden, um proaktiv Out-of-Band-Anfragen an Backends zu senden und sie aus der Lastausgleichsrotation zu entfernen, wenn sie nicht wie erwartet auf Integritätsprüfungen reagieren. Auf diese Weise stellen wir sicher, dass Clientanfragen niemals ausgefallene Backends erreichen.
Der folgende Konfigurationsausschnitt aktiviert aktive Integritätsprüfungen für die gRPC-Dienste RouteGuide und helloworld. Um die relevante Konfiguration hervorzuheben, werden einige Anweisungen weggelassen, die in der in den vorherigen Abschnitten verwendeten Datei grpc_gateway.conf enthalten sind.
Für jede Route geben wir nun auch die Direktive health_check
an (Zeilen 17 und 21). Wie durch das Argument type=grpc
angegeben, verwendet NGINX Plus das gRPC-Integritätsprüfungsprotokoll, um eine Integritätsprüfung an jeden Server in der Upstream-Gruppe zu senden. Unsere einfachen gRPC-Dienste implementieren das gRPC-Integritätsprüfungsprotokoll jedoch nicht und daher erwarten wir, dass sie mit dem Statuscode „nicht implementiert“ ( grpc_status=12
) antworten. Wenn dies der Fall ist, reicht dies als Hinweis darauf aus, dass wir mit einem aktiven gRPC-Dienst kommunizieren.
Mit dieser Konfiguration können wir alle Backend-Container herunterfahren, ohne dass es bei gRPC-Clients zu Verzögerungen oder Timeouts kommt. Aktive Integritätsprüfungen sind exklusiv für NGINX Plus verfügbar. Weitere Informationen zu gRPC-Integritätsprüfungen finden Sie in unserem Blog.
Die Beispielkonfiguration in grpc_gateway.conf ist mit einigen geringfügigen Änderungen für TLS für den Produktionseinsatz geeignet. Die Möglichkeit, gRPC-Anfragen basierend auf Paket, Dienst oder RPC-Methode weiterzuleiten, bedeutet, dass die vorhandene NGINX-Funktionalität auf genau dieselbe Weise auf gRPC-Verkehr angewendet werden kann wie für HTTP/REST-APIs oder auch für regulären Web-Verkehr. Der jeweilige Standortblock
kann jeweils durch weitere Konfigurationen, wie etwa Ratenbegrenzung oder Bandbreitenkontrolle, erweitert werden.
In diesem dritten und letzten Blogbeitrag unserer Reihe über die Bereitstellung von NGINX Open Source und NGINX Plus als API-Gateway haben wir uns auf gRPC als Cloud-native Technologie zum Erstellen von Microservices-Anwendungen konzentriert. Wir haben gezeigt, wie NGINX gRPC-Anwendungen ebenso effektiv bereitstellen kann wie HTTP/REST-APIs und wie beide API-Arten über NGINX als Mehrzweck-API-Gateway veröffentlicht werden können.
Anweisungen zum Einrichten der in diesem Blogbeitrag verwendeten Testumgebung finden Sie im Anhang unten. Sie können alle Dateien aus unserem GitHub Gist-Repository herunterladen.
Schauen Sie sich die anderen Blogbeiträge dieser Reihe an:
Um NGINX Plus als API-Gateway auszuprobieren, starten Sie noch heute Ihre kostenlose 30-Tage-Testversion oder kontaktieren Sie uns, um Ihre Anwendungsfälle zu besprechen . Verwenden Sie während Ihrer Testphase den vollständigen Satz an Konfigurationsdateien aus unserem GitHub Gist-Repository .
Die folgenden Anweisungen installieren die Testumgebung auf einer virtuellen Maschine, sodass sie isoliert und wiederholbar ist. Es gibt jedoch keinen Grund, warum es nicht auf einem physischen „Bare-Metal“-Server installiert werden kann.
Um die Testumgebung zu vereinfachen, verwenden wir Docker-Container, um die gRPC-Dienste auszuführen. Dies bedeutet, dass wir für die Testumgebung nicht mehrere Hosts benötigen, sondern NGINX trotzdem mit einem Netzwerkaufruf Proxy-Verbindungen herstellen lassen können, wie in einer Produktionsumgebung.
Durch die Verwendung von Docker können wir außerdem mehrere Instanzen jedes gRPC-Dienstes auf einem anderen Port ausführen, ohne dass Codeänderungen erforderlich sind. Jeder gRPC-Dienst lauscht innerhalb des Containers auf Port 50051, der einem eindeutigen Localhost-Port auf der virtuellen Maschine zugeordnet ist. Dadurch wird wiederum Port 50051 freigegeben, sodass NGINX ihn als Abhörport verwenden kann. Wenn die Testclients daher über ihren vorkonfigurierten Port 50051 eine Verbindung herstellen, erreichen sie NGINX.
Installieren Sie NGINX Open Source oder NGINX Plus gemäß den Anweisungen im NGINX Plus Admin Guide.
Kopieren Sie die folgenden Dateien aus dem GitHub Gist-Repository nach /etc/nginx/conf.d :
Notiz: Wenn Sie TLS nicht verwenden, kommentieren Sie die ssl_*
-Direktiven in grpc_gateway.conf aus.
Starten Sie NGINX Open Source oder NGINX Plus.
$ sudo nginx
Führen Sie für Debian und Ubuntu Folgendes aus:
$ sudo apt-get installiere docker.io
Führen Sie für CentOS, RHEL und Oracle Linux Folgendes aus:
$ sudo yum installiere Docker
Erstellen Sie das Docker-Image für die RouteGuide-Container aus der folgenden Docker-Datei.
Sie können das Dockerfile entweder vor dem Build in ein lokales Unterverzeichnis kopieren oder die URL des Gist für das Dockerfile als Argument für den Docker-
Build
-Befehl angeben:
$ sudo docker build -t routeguide https://gist.githubusercontent.com/nginx-gists/87ed942d4ee9f7e7ebb2ccf757ed90be/raw/ce090f92f3bbcb5a94bbf8ded4d597cd47b43cbe/routeguide.Dockerfile
Das Herunterladen und Erstellen des Images kann einige Minuten dauern. Das Erscheinen der Meldung „Erfolgreich
erstellt“
und einer hexadezimalen Zeichenfolge (der Image-ID) signalisieren den Abschluss des Builds.
Bestätigen Sie, dass das Image erstellt wurde, indem Sie „Docker
Images“
ausführen.
$ sudo Docker-Bilder REPOSITORY-TAG BILD-ID ERSTELLT GRÖSSE Routeguide aktuell 63058a1cf8ca vor 1 Minute 1,31 GB Python aktuell 825141134528 vor 9 Tagen 923 MB
Starten Sie die RouteGuide-Container.
$ sudo docker run --name rg1 -p 10001:50051 -d Routenführer $ sudo docker run --name rg2 -p 10002:50051 -d Routenführer $ sudo docker run --name rg3 -p 10003:50051 -d Routenführer
Bei erfolgreicher Ausführung jedes Befehls wird eine lange hexadezimale Zeichenfolge angezeigt, die den laufenden Container darstellt.
Überprüfen Sie, ob alle drei Container aktiv sind, indem Sie docker
ps
ausführen. (Die Beispielausgabe ist zur leichteren Lesbarkeit auf mehrere Zeilen aufgeteilt.)
$ sudo docker ps CONTAINER-ID BILD BEFEHL STATUS … d0cdaaeddf0f routeguide „python route_g …“ 2 Sekunden lang … c04996ca3469 Routeguide „python route_g …“ 9 Sekunden nach oben ...
2170ddb62898 Routenführer „python route_g …“ Bis 1 Minute... ... HAFENNAMEN ... 0.0.0.0:10003->50051/tcp rg3 … 0.0.0.0:10002->50051/tcp rg2 ... 0.0.0.0:10001->50051/tcp rg1
Die Spalte „PORTS“
in der Ausgabe zeigt, wie jeder der Container innerhalb des Containers dem Port 50051 einen anderen lokalen Port zugeordnet hat.
Erstellen Sie das Docker-Image für die HelloWorld-Container aus der folgenden Docker-Datei.
Sie können das Dockerfile entweder vor dem Build in ein lokales Unterverzeichnis kopieren oder die URL des Gist für das Dockerfile als Argument für den Docker-
Build
-Befehl angeben:
$ sudo docker build -t hallowelt https://gist.githubusercontent.com/nginx-gists/87ed942d4ee9f7e7ebb2ccf757ed90be/raw/ce090f92f3bbcb5a94bbf8ded4d597cd47b43cbe/hallowelt.Dockerfile
Das Herunterladen und Erstellen des Images kann einige Minuten dauern. Das Erscheinen der Meldung „Erfolgreich
erstellt“
und einer hexadezimalen Zeichenfolge (der Image-ID) signalisieren den Abschluss des Builds.
Bestätigen Sie, dass das Image erstellt wurde, indem Sie „Docker
Images“
ausführen.
$ sudo Docker-Bilder REPOSITORY-TAG BILD-ID ERSTELLT GRÖSSE Hallo Welt aktuell e5832dc0884a vor 10 Sekunden 926 MB Routeguide aktuell 170761fa3f03 vor 4 Minuten 1,31 GB Python aktuell 825141134528 vor 9 Tagen 923 MB Golang aktuell d0e7a411e3da vor 3 Wochen 794 MB
Starten Sie die HelloWorld-Container.
$ sudo docker run --name hw1 -p 20001:50051 -d hallo Welt $ sudo docker run --name hw2 -p 20002:50051 -d hallo Welt
Bei erfolgreicher Ausführung jedes Befehls wird eine lange hexadezimale Zeichenfolge angezeigt, die den laufenden Container darstellt.
Überprüfen Sie, ob die beiden „Hello World“-Container aktiv sind, indem Sie „docker
ps“
ausführen.
$ sudo docker ps CONTAINER-ID BILD BEFEHL STATUS ... e0d204ae860a hallo Welt „go run greeter …“ 5 Sekunden nach oben ...
66f21d89be78 hallo Welt „geh und lauf, Begrüßer …“ 9 Sekunden lang … d0cdaaeddf0f routeguide „python route_g …“ Bis 4 Minuten ... c04996ca3469 routeguide "python route_g ..." Bis zu 4 Minuten...
2170ddb62898 Routenführer „python route_g …“ Bis zu 5 Minuten… … HAFENNAMEN ... 0.0.0.0:20002->50051/tcp hw2 ... 0.0.0.0:20001->50051/tcp hw1 ... 0.0.0.0:10003->50051/tcp rg3 … 0.0.0.0:10002->50051/tcp rg2 ... 0.0.0.0:10001->50051/tcp rg1
Installieren Sie die erforderlichen Programmiersprachen. Einige davon sind möglicherweise bereits in der Testumgebung installiert.
Führen Sie für Ubuntu und Debian Folgendes aus:
$ sudo apt-get installiere golang-go python3 python-pip git
Führen Sie für CentOS, RHEL und Oracle Linux Folgendes aus:
$ sudo yum installiere Golang Python Python-Pip Git
Beachten Sie, dass für Python-Pip
das EPEL-Repository aktiviert sein muss (führen Sie bei Bedarf zuerst „sudo
yum
install
epel-release“
aus).
Laden Sie die HelloWorld-Anwendung herunter:
$ gehe zu google.golang.org/grpc
Laden Sie die RouteGuide-Anwendung herunter:
$ git clone -b v1.14.1 https://github.com/grpc/grpc $ pip installiere grpcio-tools
Führen Sie den HelloWorld-Client aus:
$ go run go/src/google.golang.org/grpc/examples/helloworld/greeter_client/main.go
Führen Sie den RouteGuide-Client aus:
$ cd grpc/beispiele/python/route_guide $ python route_guide_client.py
Überprüfen Sie die NGINX-Protokolle, um zu bestätigen, dass die Testumgebung betriebsbereit ist:
$ tail /var/log/nginx/grpc_log.json
„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."