ADC

gRPC-Brücke

Wenn ein Client eine Anfrage über das HTTP/1.1-Protokoll sendet, unterstützt die Citrix ADC Appliance das Bridging der gRPC-Anfragen über das HTTP/1.1-Protokoll, das dem gRPC-Server über das HTTP/2-Protokoll entspricht. In ähnlicher Weise empfängt die Appliance beim Reverse-Bridging die Client-gRPC-Anfrage über das HTTP/2-Protokoll und führt Reverse-Bridging für die gRPC-Anfragen gemäß dem gRPC-Server des HTTP/1.1-Protokolls durch.

So funktioniert gRPC-Bridging

In diesem Szenario überbrückt die Citrix ADC Appliance nahtlos gRPC-Inhalte, die über eine HTTP/1.1-Verbindung empfangen wurden, und leitet sie über HTTP/2 an den Back-End-gRPC-Server weiter.

Funktionsdiagramm der gRPC-Komplettlösung

Das folgende Diagramm zeigt, wie Komponenten in einer gRPC-Bridging-Konfiguration miteinander interagieren.

  1. Wenn eine gRPC-Anfrage gesendet wird, prüft die Citrix ADC Appliance, ob die Verbindung HTTP/1.1 ist und der Inhaltstyp application/grpc ist. Die HTTP/1.1-Anfragen werden in die folgenden Pseudo-Header übersetzt.
  2. Beim Empfang einer gRPC-Anfrage über eine HTTP/1.1-Verbindung, wie im Content-Type-Header angegeben, wandelt die ADC-Appliance die Anfrage wie unten angegeben über HTTP/2 in gRPC um:
    :method: Method-name in HTTP/1.1 request
    :path: Path is HTTP/1.1 request
    content-type: application/grpc
<!--NeedCopy-->
  1. Basierend auf der Bewertung der Richtlinien beendet der virtuelle Lastausgleichsserver (an den der gRPC-Dienst gebunden ist) die Anfrage oder leitet sie über HTTP/2-Frames an den Back-End-gRPC-Server weiter.
  2. Beim Empfang der Antwort über eine HTTP/2-Verbindung vom gRPC-Server puffert die Appliance, bis sie den HTTP/2-Trailer empfängt, und sucht dann nach dem gRPC-Statuscode. Wenn der gRPC-Fehlerstatus ungleich Null ist, sucht die Appliance nach dem zuordnenden HTTP-Statuscode und sendet eine geeignete HTTP/1.1-Fehlerantwort.

Konfigurieren Sie das gRPC-Bridging mithilfe der CLI

Um gRPC-Bridging zu konfigurieren, müssen Sie die folgenden Schritte ausführen:

  1. Fügen Sie ein HTTP-Profil hinzu, bei dem HTTP/2 Direct und HTTP/2 Direct aktiviert sind
  2. Aktivieren Sie die globale Back-End-HTTP/2-Unterstützung im HTTP-Parameter
  3. Fügen Sie einen virtuellen Load-Balancing-Server vom Typ SSL/HTTP hinzu und legen Sie das HTTP-Profil fest
  4. Fügen Sie den Dienst für den GrPC-Endpunkt hinzu und legen Sie das HTTP-Profil fest
  5. Binden Sie den gRPC-Endpunktdienst an den virtuellen Lastausgleichsserver
  6. Ordnen Sie den gRPC-Statuscode der HTTP-Antwort zu, wenn der gRPC-Status ungleich Null ist
  7. Konfigurieren Sie die gRPC-Pufferung nach Zeit und/oder Größe

Fügen Sie ein HTTP-Profil hinzu, bei dem die Direkten HTTP/2 und HTTP/2 aktiviert sind

Um mit der Konfiguration zu beginnen, müssen Sie die HTTP/2-Funktion im HTTP-Profil aktivieren. Wenn der Client die HTTP 1.1-Anfragen sendet, überbrückt die Appliance die Anfrage und leitet sie an den Backend-Server weiter.

Geben Sie in der Befehlszeile Folgendes ein:

add ns httpProfile <name> - http2 ( ENABLED | DISABLED ) [-http2Direct ( ENABLED | DISABLED )]

Beispiel:

add ns httpProfile http2gRPC -http2Direct ENABLED -http2 ENABLED

Aktivieren Sie die globale Backend-HTTP/2-Unterstützung im HTTP-Parameter

Um die HTTP/2-Unterstützung global auf der Serverseite mithilfe der Citrix ADC ADC-Befehlszeile zu aktivieren.

Geben Sie in der Befehlszeile Folgendes ein:

set ns httpParam -http2ServerSide( ON | OFF )

Beispiel:

set ns httpParam -http2ServerSide ON

Fügen Sie einen virtuellen Load-Balancing-Server vom Typ SSL/HTTP hinzu und legen Sie das HTTP-Profil fest

So fügen Sie einen virtuellen Lastenausgleichsserver mit der NetScaler ADC Befehlszeilenschnittstelle hinzu

Geben Sie in der Befehlszeile Folgendes ein:

add lb vserver <name> <service type> [(<IP address>@ <port>)] [-httpProfileName <string>]

Beispiel:

add lb vserver lb-grpc HTTP 10.10.10.10 80 -httpProfileName http2gRPC

Hinweis:

Wenn Sie einen virtuellen Lastausgleichsserver vom Typ SSL verwenden, müssen Sie das Serverzertifikat binden. Weitere Informationen finden Sie unter Thema Serverzertifikat binden .

Fügen Sie den Dienst für den GrPC-Endpunkt hinzu und legen Sie das HTTP-Profil fest

So fügen Sie mithilfe der NetScaler ADC Befehlszeilenschnittstelle einen gRPC-Dienst mit dem HTTP-Profil hinzu.

Geben Sie in der Befehlszeile Folgendes ein:

add service <name> (<IP> | <serverName> ) <serviceType> <port> [-httpProfileName <string>]

Beispiel:

add service svc-grpc 10.10.10.10 HTTP 80 -httpProfileName http2gRPC

Binden Sie den gRPC-Endpunktdienst an den virtuellen Lastausgleichsserver

Um einen gRPC-Endpunktdienst mithilfe der CLI an den virtuellen Load-Balancing-Server zu binden.

Geben Sie an der Befehlszeilenschnittstelle Folgendes ein:

bind lb vserver <name> <serviceName>

Beispiel:

bind lb vserver lb-grpc svc-grpc

Ordnen Sie den gRPC-Statuscode dem HTTP-Statuscode in der HTTP/1.1-Antwort zu

Im gRPC-Bridging-Szenario reagiert der gRPC-Dienst auf die Anfrage mit einem gRPC-Statuscode. Die Appliance ordnet den gRPC-Statuscode einem entsprechenden HTTP-Antwortcode und einer Begründung zu. Die Zuordnung erfolgt auf der Grundlage der unten angegebenen Tabelle. Die Citrix ADC Appliance sendet beim Senden der HTTP/1.1-Antwort an den Client den HTTP-Statuscode und die Ursachenphrase.

gRPC-Statuscode Statuscode der HTTP-Antwort Grundphrase für die HTTP-Antwort
OK = 0 200 OK
STORNIERT = 1 499 *
UNBEKANNT = 2 500 Interner Serverfehler
UNGÜLTIGE_ARGUMENT = 3 400 Ungültige Anforderung
DEADLINE_ÜBERSCHRITTEN = 4 504 Gateway-Timeout
NICHT_GEFUNDEN = 5 404 *
EXISTIERT_BEREITS = 6 409 Konflikt
ERLAUBNIS_VERWEIGERT = 7 403 Verboten
NICHT AUTHENTIFIZIERT = 16 401 Nicht autorisiert
RESSOURCE_EXHAUSTED = 8 429 *
FEHLGESCHLAGENE VORBEDINGUNG = 9 400 Ungültige Anforderung
ABGEBROCHEN = 10 409 Konflikt
AUSSERHALB DES ZULÄSSIGEN BEREICHS = 11 400 Ungültige Anforderung
NICHT IMPLEMENTIERT = 12 501 Nicht implementiert
INTERN = 13 500 Interner Serverfehler
NICHT VERFÜGBAR = 14 503 Dienst nicht verfügbar
DATENVERLUST = 15 500 Interner Serverfehler

Konfigurieren Sie die gRPC-Pufferung nach Zeit und/oder Größe

Die Citrix ADC Appliance puffert die gRPC-Antwort vom Backend-Server, bis der Antworttrailer empfangen wird. Dadurch werden bidirektionale gRPC-Aufrufe unterbrochen. Wenn die gRPC-Antwort sehr groß ist, verbraucht sie außerdem eine erhebliche Menge an Speicher, um die Antwort vollständig zu puffern. Um das Problem zu lösen, wurde die gRPC-Bridging-Konfiguration erweitert, um die Pufferung zeitlich und/oder größenmäßig zu begrenzen. Wenn die Puffergröße oder das Zeitlimit den Schwellenwert überschreitet, stoppt die Appliance die Pufferung und leitet die Antwort an den Client weiter, auch wenn eine der Einschränkungen ausgelöst wird (entweder wird der Trailer nicht innerhalb der konfigurierten Puffergröße empfangen oder wenn das konfigurierte Timeout eintritt). Daher funktionieren die konfigurierten Richtlinien und ihre Ausdrücke (basierend auf dem GRPC-Statuscode) nicht wie erwartet.

Um die gRPC-Pufferung durch die CLI nach Zeit und/oder Größe zu begrenzen, können Sie konfigurieren, wann Sie ein neues HTTP-Profil hinzufügen, oder konfigurieren, wenn Sie ein vorhandenes Profil ändern.

Geben Sie in der Befehlszeile Folgendes ein:

add ns httpProfile http2gRPC [-grpcHoldLimit <positive_integer>] [-grpcHoldTimeout <positive_integer>]

Oder

set ns httpProfile http2gRPC [-grpcHoldLimit <positive_integer>] [-grpcHoldTimeout <positive_integer>]

Hierbei gilt:

grpcholdlimit. Maximale Größe in Byte, die zum Puffern von gRPC-Paketen zulässig ist, bis der Trailer empfangen wird. Sie können sowohl die Parameter als auch einen beliebigen Parameter konfigurieren.

Standardwert: 131072 Mindestwert: 0 Maximalwert: 33554432

grpcholdtimeout. Maximal zulässige Zeit in Millisekunden, um gRPC-Pakete zwischenzuspeichern, bis der Trailer empfangen wird. Der Wert sollte ein Vielfaches von 100 sein. Standardwert: 1000 Mindestwert: 0 Maximalwert: 180000

Beispiel:

add httpprofile http2gRPC -grpcholdlimit 1048576 -grpcholdtimeout 5000 set httpprofile http2gRPC -grpcholdlimit 1048576 -grpcholdtimeout 5000

Konfigurieren Sie gRPC-Bridging mithilfe der GUI

Führen Sie die folgenden Schritte aus, um gRPC-Bridging mithilfe der Citrix ADC GUI zu konfigurieren.

Fügen Sie ein HTTP-Profil hinzu, bei dem HTTP/2 Direct und HTTP/2 Direct aktiviert sind

  1. Navigieren Sie zu System > Profile und klicken Sie auf HTTP-Profile.
  2. Wählen Sie HTTP/2 im HTTP-Profil aus.

Aktivieren Sie die globale Back-End-HTTP/2-Unterstützung im HTTP-Parameter

  1. Navigieren Sie zu System > Einstellungen > HTTP-Parameter.
  2. Wählen Sie auf der Seite „ HTTP-Parameter konfigurieren “ die Option HTTP/2 auf Serverseite aus.
  3. Klicken Sie auf OK.

Fügen Sie einen virtuellen Load-Balancing-Server vom Typ SSL/HTTP hinzu und legen Sie das HTTP-Profil fest

  1. Navigieren Sie zu Traffic Management > Load Balancing > Virtuelle Server.
  2. Klicken Sie auf Hinzufügen, um einen virtuellen Lastausgleichsserver für gRPC-Verkehr zu erstellen.
  3. Klicken Sie auf der Seite Virtueller Server für Lastenausgleich auf Profile.
  4. Wählen Sie im Abschnitt Profile den Profiltyp als HTTP aus.
  5. Klicken Sie auf OK und dann auf Fertig.

gRPC Bridging globales Back-End HTTP/2 ermöglicht Load Balancing

Dienst für gRPC-Endpunkt hinzufügen und HTTP-Profil festlegen

  1. Navigieren Sie zu Traffic Management > Load Balancing > Services.
  2. Klicken Sie auf Hinzufügen, um einen Anwendungsserver für gRPC-Verkehr zu erstellen.
  3. Gehen Sie auf der Seite Load Balancing Service zum Abschnitt Profil .
  4. Fügen Sie unter Profiledas HTTP-Profil für den gRPC-Endpunkt hinzu.
  5. Klicken Sie auf OK und dann auf Fertig.

Binden Sie den Dienst für den gRPC-Endpunkt an den virtuellen Lastausgleichsserver

  1. Navigieren Sie zu Traffic Management > Load Balancing > Virtuelle Server.
  2. Klicken Sie auf Hinzufügen, um einen virtuellen Lastausgleichsserver für gRPC-Verkehr zu erstellen.
  3. Klicken Sie auf der Seite Load Balancing Virtual Server auf den Abschnitt Service and Service Groups.
  4. Wählen Sie auf der Seite Load Balancing Virtual Server Service Binding den gRPC-Dienst aus, den Sie binden möchten.
  5. Klicken Sie auf Schließen und dann auf Fertig.

Konfigurieren Sie die gRPC-Pufferung nach Zeit und Größe mithilfe der GUI

  1. Navigieren Sie zu System > Profile und klicken Sie auf HTTP-Profile.
  2. Wählen Sie HTTP/2 im HTTP-Profil aus.
  3. Stellen Sie auf der Seite „ HTTP-Profil konfigurieren “ die folgenden Parameter ein:

    1. GRPCHoldTimeout. Geben Sie die Zeit in Millisekunden ein, um gRPC-Pakete zwischenzuspeichern, bis der Trailer empfangen wird.
    2. GRP-Obergrenze. Geben Sie die maximale Größe in Byte ein, um gRPC-Pakete zwischenzuspeichern, bis der Trailer empfangen wird.
  4. Klicken Sie auf OK und schließen.

gRPC bridging buffering by time and size

Ausführliche GUI-Prozeduren für das Binden von Service und Lastenausgleich virtueller Server finden Sie unter Thema Load Balancing .

gRPC-Brücke