Citrix ADC

gRPC-Bridging

Wenn ein Client eine Anfrage über das HTTP/1.1-Protokoll sendet, unterstützt die Citrix ADC Appliance die Überbrückung der gRPC-Anforderungen über das HTTP/1.1-Protokoll, das dem gRPC-Server über das HTTP/2-Protokoll entspricht. In ähnlicher Weise erhält die Appliance beim Reverse Bridging die Client-GrPC-Anforderung über das HTTP/2-Protokoll und führt eine Rückwärtsbrückenüberbrückung für die gRPC-Anforderungen in Übereinstimmung mit dem gRPC-Server des HTTP/1.1-Protokolls durch.

So funktioniert das GrPC-Bridging

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

gRPC End-to-End-Konfigurationsfunktions-Diagramm

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. Nach Erhalt einer GrPC-Anfrage für die HTTP/1.1-Verbindung, wie im Content-Type-Header angegeben, wandelt die ADC-Appliance die Anfrage wie folgt in gRPC über HTTP/2 um:
    :method: Method-name in HTTP/1.1 request
    :path: Path is HTTP/1.1 request
    content-type: application/grpc
  1. Basierend auf der Richtlinienbewertung beendet der virtuelle Lastausgleichsserver (an den der gRPC-Dienst gebunden ist) die Anforderung oder leitet sie über HTTP/2-Frames an den Back-End-gRPC-Server weiter.
  2. Nach Erhalt der Antwort auf eine HTTP/2-Verbindung vom gRPC-Server puffert die Appliance, bis sie den HTTP/2-Trailer erhält und sucht dann nach dem GRPC-Statuscode. Wenn es sich um einen gRPC-Fehlerstatus ungleich Null handelt, sucht die Appliance nach dem Zuordnungsstatuscode und sendet eine geeignete HTTP/1.1-Fehlerantwort.

Konfigurieren der GRPC-Bridging über die CLI

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

  1. Fügen Sie ein HTTP-Profil mit aktiviertem HTTP/2 und HTTP/2 hinzu
  2. Aktivieren der globalen Back-End-HTTP/2-Unterstützung im HTTP-Parameter
  3. Fügen Sie einen virtuellen Lastausgleichsserver 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 der HTTP-Statuscode der HTTP-Antwort zu, um einen gRPC-Status ungleich
  7. Konfigurieren Sie die gRPC-Pufferung nach Zeit und/oder Größe

Fügen Sie HTTP-Profil hinzu, wenn HTTP/2 und HTTP/2 direkt 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 Back-End-Server weiter.

Geben Sie an der Eingabeaufforderung 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 Back-End-HTTP/2-Unterstützung im HTTP-Parameter

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

Geben Sie an der Eingabeaufforderung Folgendes ein:

set ns httpParam -http2ServerSide( ON | OFF )

Beispiel:

set ns httpParam -http2ServerSide ON

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

So fügen Sie einen virtuellen Lastenausgleichsserver mit der Citrix ADC Befehlsschnittstelle hinzu

Geben Sie an der Eingabeaufforderung 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 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 Citrix ADC Befehlsschnittstelle einen gRPC-Dienst mit dem HTTP-Profil hinzu.

Geben Sie an der Eingabeaufforderung 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

So binden Sie einen gRPC-Endpunktdienst mit der CLI an den virtuellen Lastausgleichsserver.

Geben Sie an der Befehlsschnittstelle 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 antwortet der gRPC-Dienst mit einem gRPC-Statuscode auf die Anfrage. Die Appliance ordnet den gRPC-Statuscode einem entsprechenden HTTP-Antwortcode und einer Ursache-Phrase 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 HTTP-Antwort-Statuscode Grundsatz der HTTP-Antwort
OK = 0 200 OK
CANCELLED = 1 499 *
UNKNOWN = 2 500 Interner Serverfehler
INVALID_ARGUMENT = 3 400 Ungültige Anforderung
DEADLINE_EXCEEDED = 4 504 Gatewaytimeout
NOT_FOUND = 5 404 *
ALREADY_EXISTS = 6 409 Konflikt
PERMISSION_DENIED = 7 403 Verboten
UNAUTHENTICATED = 16 401 Nicht autorisiert
RESOURCE_EXHAUSTED = 8 429 *
FAILED_PRECONDITION = 9 400 Ungültige Anforderung
ABORTED = 10 409 Konflikt
OUT_OF_RANGE = 11 400 Ungültige Anforderung
UNIMPLEMENTED = 12 501 Nicht implementiert
INTERNAL = 13 500 Interner Serverfehler
UNAVAILABLE = 14 503 Dienst ist nicht verfügbar
DATA_LOSS = 15 500 Interner Serverfehler

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

Die Citrix ADC Appliance puffert die gRPC-Antwort vom Back-End-Server, bis der Response Trailer empfangen wird. Dies unterbricht bidirektionale GrPC-Anrufe. Wenn die GrPC-Antwort enorm ist, verbraucht sie außerdem eine beträchtliche Menge an Speicher, um die Antwort vollständig zu puffern. Um das Problem zu lösen, wurde die gRPC-Bridging-Konfiguration verbessert, um die Pufferung nach Zeit und/oder Größe 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, selbst wenn eine der Einschränkungen ausgelöst wird (entweder wird der Trailer nicht innerhalb der konfigurierten Puffergröße empfangen oder wenn das konfigurierte Timeout auftritt). Daher funktionieren die konfigurierten Richtlinien und ihre Ausdrücke (basierend auf dem grpc-statuscode) nicht wie erwartet.

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

Geben Sie an der Eingabeaufforderung 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 gRPC-Pakete puffern dürfen, bis der Trailer empfangen wird. Sie können sowohl die Parameter als auch jeden einzelnen konfigurieren.

Standardwert: 131072 Mindestwert: 0 Maximaler Wert: 33554432

grpcholdtimeout. Maximale Zeit in Millisekunden, die gRPC-Pakete puffern dürfen, bis der Trailer empfangen wird. Der Wert sollte ein Vielfaches von 100 sein. Standardwert: 1000 Mindestwert: 0 Maximaler Wert: 180000

Beispiel:

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

Konfigurieren Sie das GrPC-Bridging mit der GUI

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

Fügen Sie ein HTTP-Profil mit aktiviertem HTTP/2 und HTTP/2 hinzu

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

gRPC bridging add HTTP profile with http2 parameter

Aktivieren der globalen 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.

gRPC bridging global back-end HTTP/2

Fügen Sie einen virtuellen Lastausgleichsserver 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-Datenverkehr 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 global back-end HTTP/2 enable load balancing

Dienst für GrPC Endpoint 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-Datenverkehr zu erstellen.
  3. Wechseln Sie auf der Seite Load Balancing Service zum Abschnitt Profil.
  4. Fügen Sie unter Profileein HTTP-Profil für den GrPC-Endpoint hinzu.
  5. Klicken Sie auf OK und dann auf Fertig.

gRPC bridging add service for the grpc endpoint

Bind-Dienst für GrPC-Endpunkt zum Lastenausgleich des virtuellen Servers

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

gRPC bridging bind service for gRPC endpoint

Konfigurieren Sie die gRPC-Pufferung nach Zeit und Größe mit 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. Legen Sie auf der Seite HTTP-Profil konfigurieren die folgenden Parameter fest:

    1. grpcHoldTimeout. Geben Sie die Zeit in Millisekunden ein, um gRPC-Pakete zu puffern, bis der Trailer empfangen wird.
    2. grpcHoldLimit. Geben Sie die maximale Größe in Bytes ein, um gRPC-Pakete zu puffern, bis der Trailer empfangen wird.
  4. Klicken Sie auf OK und Schließen.

gRPC bridging buffering by time and size

Detaillierte GUI-Verfahren zum Binden von Diensten und virtuellen Lastenausgleichsservern finden Sie unter Lastausgleich Thema.

gRPC-Bridging