ADC

Puente gRPC

Cuando un cliente envía una solicitud a través del protocolo HTTP/1.1, el dispositivo Citrix ADC admite la transferencia de las solicitudes de gRPC a través del protocolo HTTP/1.1, que cumple con el protocolo del servidor gRPC a través de 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 gRPC de conformidad con el servidor gRPC del protocolo HTTP/1.1.

Cómo funciona el puente gRPC

En este escenario, 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 de fondo a través de HTTP/2.

Diagrama funcional de configuración de extremo a extremo 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 seudoencabezados.
  2. Al recibir una solicitud de gRPC en una 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. Según la evaluación de la directiva, 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 marcos HTTP/2 al servidor gRPC de fondo.
  2. Al recibir la respuesta en una conexión HTTP/2 del servidor gRPC, el dispositivo almacena en búfer hasta que recibe el tráiler de HTTP/2 y, a continuación, comprueba el código de estado del GRPC. Si el estado de error de gRPC es distinto de cero, el dispositivo busca el código de estado HTTP de mapeo y envía una respuesta de error HTTP/1.1 adecuada.

Configure el puente gRPC mediante la CLI

Para configurar el puente gRPC, debe completar los siguientes pasos:

  1. Agregue un perfil HTTP con HTTP/2 y HTTP/2 direct habilitados
  2. Habilite la compatibilidad global con HTTP/2 en el servidor en el parámetro HTTP
  3. Agregue un servidor virtual de equilibrio de carga de tipo SSL/HTTP y configure 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. Asigne el código de estado de gRPC a la respuesta HTTP para un estado de gRPC distinto de cero
  7. Configure el almacenamiento en búfer de gRPC por tiempo o tamaño

Añada un perfil HTTP con HTTP/2 y HTTP/2 Direct habilitados

Para iniciar 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 conecta la solicitud y la reenvía al servidor de fondo.

En la línea de comandos, escriba:

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

Ejemplo:

add ns httpProfile http2gRPC -http2Direct ENABLED -http2 ENABLED

Habilite la compatibilidad global con HTTP/2 en el servidor en el parámetro HTTP

Habilitar la compatibilidad con HTTP/2 de forma global en el servidor mediante la línea de comandos de Citrix ADC.

En la línea de comandos, escriba:

set ns httpParam -http2ServerSide( ON | OFF )

Ejemplo:

set ns httpParam -http2ServerSide ON

Agregue un servidor virtual de equilibrio de carga de tipo SSL/HTTP y configure el perfil HTTP

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

En la línea de comandos, 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 vincular 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

Agregar un servicio gRPC con el perfil HTTP mediante la interfaz de comandos de Citrix ADC .

En la línea de comandos, 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 vincular 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

Asigne el código de estado 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 gRPC. El dispositivo asigna el código de estado del gRPC al código de respuesta HTTP y a la frase de motivo correspondientes. El mapeo se realiza en base a 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 gRPC Código de estado de respuesta HTTP Frase de motivo de respuesta HTTP
OK = 0 200 Aceptar
CANCELADO = 1 499 *
DESCONOCIDO = 2 500 Error interno del servidor
ARGUMENTO_INVÁLIDO = 3 400 Solicitud incorrecta.
DEADLINE_EXCEEDED = 4 504 Tiempo de espera de Gateway
NO_ENCONTRADO = 5 404 *
YA EXISTE = 6 409 Conflicto
PERMISO_DENEGADO = 7 403 Si están prohibidas
SIN AUTENTICAR = 16 401 No autorizado
RECURSO_AGOTADO = 8 429 *
CONDICIÓN_PREVIA FALLIDA = 9 400 Solicitud incorrecta.
ABORTADO = 10 409 Conflicto
FUERA DE RANGO = 11 400 Solicitud incorrecta.
NO IMPLEMENTADO = 12 501 No implementado
INTERNO = 13 500 Error interno del servidor
NO DISPONIBLE = 14 503 Servicio no disponible
PÉRDIDA DE DATOS = 15 500 Error interno del servidor

Configure el almacenamiento en búfer de gRPC por tiempo o tamaño

El dispositivo Citrix ADC almacena en búfer la respuesta gRPC del servidor back-end hasta que se recibe el tráiler de respuesta. Esto interrumpe las llamadas gRPC bidireccionales. Además, si la respuesta del gRPC es enorme, consume una cantidad significativa de memoria para almacenar la respuesta en búfer 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 o tamaño. Si el tamaño del búfer o el límite de tiempo superan el umbral, el dispositivo deja de almacenar en búfer y reenvía la respuesta al cliente incluso cuando se activa alguna de las limitaciones (o 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 según lo esperado.

Para limitar el almacenamiento en búfer de gRPC por tiempo o tamaño mediante la CLI, puede configurarlo cuando agrega un nuevo perfil HTTP o configurarlo cuando modifica un perfil existente.

En la línea de comandos, escriba:

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

O bien:

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

Donde:

grpcholdlimit. Tamaño máximo en bytes permitido para almacenar en búfer los paquetes gRPC hasta que se reciba el tráiler. Puede configurar tanto los parámetros como cualquier otro.

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 gRPC hasta que se reciba el tráiler. 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

Configure el puente gRPC mediante la interfaz gráfica de usuario

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

Agregue un perfil HTTP con HTTP/2 y HTTP/2 direct habilitados

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

Habilite la compatibilidad global con HTTP/2 en el servidor 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.

Agregue un servidor virtual de equilibrio de carga de tipo SSL/HTTP y establezca 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, Hecho.

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

Agregue el servicio para el punto final de gRPC y configure el perfil HTTP

  1. Vaya a Traffic Management > Load Balancing > Services.
  2. Haga clic en Agregar para crear un servidor de aplicaciones para el tráfico de gRPC.
  3. En la página del servicio de equilibrio de carga, vaya a la sección Perfil .
  4. En Perfiles, añada el perfil HTTP para el endpoint de gRPC.
  5. Haga clic en Aceptar y, a continuación, Hecho.

Enlazar el servicio para el punto final 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 del servidor virtual de equilibrio de carga , haga clic en la sección Servicio y grupos de servicios.
  4. En la página Enlace del servicio de servidor virtual de equilibrio de carga, seleccione el servicio gRPC que desee vincular.
  5. Haga clic en Cerrar y, a continuación, en Listo.

Configure el almacenamiento en búfer de gRPC por tiempo y tamaño mediante la interfaz gráfica de usuario

  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 gRPC hasta que se reciba el tráiler.
    2. Límite de espera de GRP. Introduzca el tamaño máximo en bytes para almacenar en búfer los paquetes gRPC hasta que se reciba el tráiler.
  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 gRPC