Citrix ADC

Puente de GRPC

Cuando un cliente envía una solicitud a través del protocolo HTTP/1.1, el dispositivo Citrix ADC admite la conexión en puente de las solicitudes de GRPC a través del protocolo HTTP/1.1, que cumple con el servidor GRPC sobre el protocolo HTTP/2. Del mismo modo, en el puente inverso, el dispositivo recibe la solicitud GRPC del cliente a través del protocolo HTTP/2 y realiza un puente inverso para las solicitudes de GRPC de conformidad con el servidor GRPC del protocolo HTTP/1.1.

Cómo funciona el puente de GRPC

En este caso, el dispositivo Citrix ADC conecta sin problemas el contenido grPC recibido en una conexión HTTP/1.1 y lo reenvía al servidor GRPC back-end a través de HTTP/2.

Diagrama funcional de configuración integral de GRPC

El siguiente diagrama muestra cómo los componentes interactúan entre sí en una configuración de puente de GRPC.

  1. Cuando se envía una solicitud de GRPC, el dispositivo Citrix ADC comprueba si la conexión es HTTP/1.1 y el tipo de contenido es application/grpc. Las solicitudes HTTP/1.1 se traducen a los siguientes pseudo encabezados.
  2. Al recibir una solicitud de GRPC en la conexión HTTP/1.1. como se indica en el encabezado Content-Type, el dispositivo ADC transforma la solicitud en GRPC a través de HTTP/2 como se indica a continuación:
    :method: Method-name in HTTP/1.1 request
    :path: Path is HTTP/1.1 request
    content-type: application/grpc
<!--NeedCopy-->
  1. Basado en la evaluación de directivas, el servidor virtual de equilibrio de carga (con el servicio GRPC vinculado a él) finaliza la solicitud o la reenvía a través de tramas HTTP/2 al servidor GRPC back-end.
  2. Al recibir la respuesta en una conexión HTTP/2 desde el servidor GRPC, el dispositivo almacena en búfer hasta que recibe el tráiler HTTP/2 y, a continuación, comprueba el código de estado GRPC. Si no es un estado de error de GRPC distinto de cero, el dispositivo busca el código de estado HTTP de asignación y envía una respuesta de error HTTP/1.1 adecuada.

Configurar el puente de GRPC mediante la CLI

Para configurar el puente de GRPC, debe realizar los siguientes pasos:

  1. Agregar perfil HTTP con HTTP/2 y HTTP/2 habilitados directamente
  2. Habilitar el soporte global HTTP/2 de back-end en el parámetro HTTP
  3. Agregar servidor virtual de equilibrio de carga de tipo SSL/HTTP y establecer el perfil HTTP
  4. Agregar servicio para el extremo de GRPC y establecer el perfil HTTP
  5. Enlazar el servicio de punto final de GRPC al servidor virtual de equilibrio de carga
  6. Asignar código de estado de GRPC a la respuesta HTTP para el estado de GRPC distinto de cero
  7. Configurar el almacenamiento en búfer de GRPC por tiempo y/o tamaño

Agregar perfil HTTP con HTTP/2 y HTTP/2 Direct habilitados

Para comenzar la configuración, debe habilitar la función HTTP/2 en el perfil HTTP. Si el cliente envía las solicitudes HTTP 1.1, el dispositivo enlaza la solicitud y la reenvía al servidor back-end.

En el símbolo del sistema, escriba:

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

Ejemplo:

add ns httpProfile http2gRPC -http2Direct ENABLED -http2 ENABLED

Habilitar el soporte global HTTP/2 de back-end en el parámetro HTTP

Para habilitar el soporte HTTP/2 globalmente en el servidor mediante la línea de comandos de Citrix ADC.

En el símbolo del sistema, escriba:

set ns httpParam -http2ServerSide( ON | OFF )

Ejemplo:

set ns httpParam -http2ServerSide ON

Agregar servidor virtual de equilibrio de carga de tipo SSL/HTTP y establecer el perfil HTTP

Para agregar un servidor virtual de equilibrio de carga mediante la interfaz de comandos de Citrix ADC

En el símbolo del sistema, escriba:

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

Ejemplo:

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

Nota:

Si utiliza un servidor virtual de equilibrio de carga de tipo SSL, debe enlazar el certificado del servidor. Consulte el tema Vincular certificado de servidor para obtener más información.

Agregar servicio para el extremo de GRPC y establecer el perfil HTTP

Para agregar un servicio GRPC con el perfil HTTP mediante la interfaz de comandos de Citrix ADC.

En el símbolo del sistema, escriba:

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

Ejemplo:

add service svc-grpc 10.10.10.10 HTTP 80 -httpProfileName http2gRPC

Enlazar el servicio de punto final de GRPC al servidor virtual de equilibrio de carga

Para enlazar un servicio de punto final de GRPC al servidor virtual de equilibrio de carga mediante la CLI.

En la interfaz de comandos, escriba:

bind lb vserver <name> <serviceName>

Ejemplo:

bind lb vserver lb-grpc svc-grpc

Asignar código de estado de GRPC al código de estado HTTP en la respuesta HTTP/1.1

En el caso de puente de GRPC, el servicio GRPC responde a la solicitud con un código de estado de GRPC. El dispositivo asigna el código de estado de GRPC a un código de respuesta HTTP y una frase de motivo correspondientes. El mapeo se realiza sobre la base de la tabla que se proporciona a continuación. El dispositivo Citrix ADC al enviar la respuesta HTTP/1.1 al cliente envía el código de estado HTTP y la frase de motivo.

Código de estado de GRPC Código de estado de respuesta HTTP Frase de razón de respuesta HTTP
OK = 0 200 Aceptar
CANCELADO = 1 499 *
DESCONOCIDO = 2 500 Error interno del servidor
ARGUMENTO INVALID_= 3 400 Solicitud incorrecta.
DEADLINE_EXCEEDED = 4 504 Tiempo de espera de gateway
NOT_FOUND = 5 404 *
ALREADY_EXISTS = 6 409 Conflicto
PERMISSION_DENIED = 7 403 Si están prohibidas
SIN AUTENTICAR = 16 401 No autorizado
RESOURCE_AGOTADO = 8 429 *
FAILED_PRECONDITION = 9 400 Solicitud incorrecta.
ABORTADO = 10 409 Conflicto
OUT_OF_RANGE = 11 400 Solicitud incorrecta.
NO EJECUTADOS = 12 501 No implementado
INTERNO = 13 500 Error interno del servidor
NO DISPONIBLE = 14 503 Servicio no disponible
DATA_LOSS = 15 500 Error interno del servidor

Configurar el almacenamiento en búfer de GRPC por tiempo y/o tamaño

El dispositivo Citrix ADC almacena en búfer la respuesta de GRPC desde el servidor back-end hasta que se recibe el tráiler de respuesta. Esto rompe las llamadas de GRPC bidireccionales. Además, si la respuesta de GRPC es enorme, consume una cantidad significativa de memoria para almacenar en búfer la respuesta por completo. Para resolver el problema, se ha mejorado la configuración de puente de GRPC para limitar el almacenamiento en búfer por tiempo y/o tamaño. Si el tamaño del búfer o el límite de tiempo exceden el umbral, el dispositivo detiene el almacenamiento en búfer y reenvía la respuesta al cliente incluso cuando cualquiera de las limitaciones se desencadena (o bien el tráiler no se recibe dentro del tamaño del búfer configurado o si se produce el tiempo de espera configurado). Como resultado, las directivas configuradas y sus expresiones (basadas en el código grpc-status) no funcionan como se esperaba.

Para limitar el almacenamiento en búfer de GRPC por tiempo y/o tamaño por la CLI, puede configurar cuando agrega un nuevo perfil HTTP o cuando modifica un perfil existente.

En el símbolo del sistema, escriba:

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

O

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

Donde:

grpcholdlimit. Se permite el tamaño máximo en bytes para almacenar en búfer los paquetes de GRPC hasta que se reciba el remolque. Puede configurar tanto los parámetros como cualquiera.

Valor predeterminado: 131072 Valor mínimo: 0 Valor máximo: 33554432

grpcholdtimeout. Tiempo máximo en milisegundos permitido para almacenar en búfer los paquetes de GRPC hasta que se reciba el remolque. El valor debe estar en múltiplos de 100. Valor predeterminado: 1000 Valor mínimo: 0 Valor máximo: 180000

Ejemplo:

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

Configurar el puente de GRPC mediante la interfaz gráfica de usuario

Complete los siguientes pasos para configurar el puente de GRPC mediante la GUI de Citrix ADC.

Agregar perfil HTTP con HTTP/2 y HTTP/2 habilitados directamente

  1. Vaya a Sistema > Perfiles y haga clic en Perfiles HTTP.
  2. Seleccione HTTP/2 en el perfil HTTP.

El puente de GRPC agrega perfil HTTP con el parámetro http2

Habilitar el soporte global HTTP/2 de back-end en el parámetro HTTP

  1. Vaya a Sistema > Configuración > Parámetros HTTP.
  2. En la página Configurar parámetros HTTP, seleccione la opción HTTP/2 en el lado del servidor.
  3. Haga clic en Aceptar.

gRPC en puente back-end global HTTP/2

Agregar servidor virtual de equilibrio de carga de tipo SSL/HTTP y establecer el perfil HTTP

  1. Vaya a Administración del tráfico > Equilibrio de carga > Servidores virtuales.
  2. Haga clic en Agregar para crear un servidor virtual de equilibrio de carga para el tráfico de GRPC.
  3. En la página Servidor virtual de equilibrio de carga, haga clic en Perfiles.
  4. En la sección Perfiles, seleccione el tipo de perfil como HTTP.
  5. Haga clic en Aceptar y, a continuación, Listo.

La conexión en puente de gRPC back-end global HTTP/2 permite el equilibrio de carga

Agregar servicio para endpoint de GRPC y establecer el perfil HTTP

  1. Vaya a Administración de Tráfico > Equilibrio de carga > Servicios.
  2. Haga clic en Agregar para crear un servidor de aplicaciones para el tráfico de GRPC.
  3. En la página Servicio de Equilibrio de carga, vaya a la sección Perfil.
  4. En Perfiles, agregue perfil HTTP para el extremo de GRPC.
  5. Haga clic en Aceptar y, a continuación, Listo.

Servicio de adición de puentes de GRPC para el endpoint grpc

Servicio de enlace para endpoint de GRPC al servidor virtual de equilibrio de carga

  1. Vaya a Administración del tráfico > Equilibrio de carga > Servidores virtuales.
  2. Haga clic en Agregar para crear un servidor virtual de equilibrio de carga para el tráfico de GRPC.
  3. En la página Servidor virtual de equilibrio de carga, haga clic en la sección Servicios y grupos de servicios.
  4. En la página Enlace de Servicio de Servidor Virtual de Equilibrio de Carga, seleccione el servicio GRPC que quiere enlazar.
  5. Haga clic en Cerrar y luego en Listo.

Servicio de enlace de puente de GRPC para endpoint de GRPC

Configurar el almacenamiento en búfer de GRPC por tiempo y tamaño mediante la GUI

  1. Vaya a Sistema > Perfiles y haga clic en Perfiles HTTP.
  2. Seleccione HTTP/2 en el perfil HTTP.
  3. En la página Configurar Perfil HTTP, defina los siguientes parámetros:

    1. grpCholdTimeout. Introduzca el tiempo en milisegundos para almacenar en búfer los paquetes de GRPC hasta que se reciba el remolque.
    2. GrpCholdLimit. Introduzca el tamaño máximo en bytes para almacenar en búfer los paquetes de GRPC hasta que se reciba el remolque.
  4. Haga clic en Aceptar y Cerrar.

Almacenamiento en búfer en puente de GRPC por tiempo y tamaño

Para obtener procedimientos de GUI detallados para servicios de enlace y servidores virtuales de equilibrio de carga, consulte el tema Equilibrio de carga.

Puente de GRPC