Citrix ADC

GrPC 桥接

当客户端通过 HTTP/1.1 协议发送请求时,Citrix ADC 设备支持通过 HTTP/1.1 协议桥接 GrPC 请求,该协议符合 HTTP/2 协议的 GrPC 服务器。同样,在反向桥接中,设备通过 HTTP/2 协议接收客户端 GrPC 请求,并根据 HTTP/1.1 协议的 GrPC 服务器对 GrPC 请求执行反向桥接。

GrPC 桥接的工作原理

在这种情况下,Citrix ADC 设备无缝桥接通过 HTTP/1.1 连接接收到的 GRPC 内容,并通过 HTTP/2 将其转发到后端 GRPC 服务器。

GrPC 端到端配置功能图

下图显示了 GRPC 桥接配置中的组件如何彼此交互。

  1. 发送 GRPC 请求时,Citrix ADC 设备将检查连接是否为 HTTP/1.1,内容类型为应用程序 /grpc。HTTP/1.1 请求转换为以下伪标头。
  2. 当收到 HTTP/1.1. 连接上的 GRPC 请求时,ADC 设备通过 HTTP/2 将请求转换为 GRPC,如下所示:
    :method: Method-name in HTTP/1.1 request
    :path: Path is HTTP/1.1 request
    content-type: application/grpc
  1. 根据策略评估,负载平衡虚拟服务器(与 GrPC 服务绑定)终止请求或通过 HTTP/2 帧转发到后端 GrPC 服务器。
  2. 从 GRPC 服务器收到 HTTP/2 连接的响应时,设备会缓冲,直到收到 HTTP/2 拖车,然后检查 GRPC 状态代码。如果 GrPC 错误状态为非零,设备将查找映射 HTTP 状态代码并发送合适的 HTTP/1.1 错误响应。

使用 CLI 配置 GRPC 桥接

要配置 GRPC 桥接,您必须完成以下步骤:

  1. 在直接启用 HTTP/2 和 HTTP/2 的情况下添加 HTTP 配置文件
  2. 在 HTTP 参数中启用全局后端 HTTP/2 支持
  3. 添加 SSL/HTTP 类型的负载平衡虚拟服务器并设置 HTTP 配置文件
  4. 为 GRPC 端点添加服务并设置 HTTP 配置文件
  5. 将 GrPC 端点服务绑定到负载平衡虚拟服务器
  6. 将 GrPC 状态代码映射到 HTTP 响应以实现非零 GrPC 状态

在直接启用 HTTP/2 和 HTTP/2 的情况下添加 HTTP 配置文件

要开始配置,必须在 HTTP 配置文件中启用 HTTP/2 功能。如果客户端发送 HTTP 1.1 请求,则设备会桥接请求并将其转发到后端服务器。

在命令提示窗口中,键入:

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

示例:

add ns httpProfile http2gRPC -http2Direct ENABLED -http2 ENABLED

在 HTTP 参数中启用全局后端 HTTP/2 支持

使用 Citrix ADC 命令行在服务器端启用 HTTP/2 全局支持。

在命令提示窗口中,键入:

set ns httpParam -http2ServerSide( ON | OFF )

示例:

set ns httpParam -http2ServerSide ON

添加 SSL/HTTP 类型的负载平衡虚拟服务器并设置 HTTP 配置文件

使用 Citrix ADC 命令界面添加负载平衡虚拟服务器的步骤

在命令提示窗口中,键入:

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

示例:

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

注意:

如果使用 SSL 类型的负载平衡虚拟服务器,则必须绑定服务器证书。有关详细信息,请参阅绑定服务器证书 主题。

为 GRPC 端点添加服务并设置 HTTP 配置文件

使用 Citrix ADC 命令界面添加带 HTTP 配置文件的 GRPC 服务。

在命令提示窗口中,键入:

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

示例:

add service svc-grpc 10.10.10.10 HTTP 80 -httpProfileName http2gRPC

将 GrPC 端点服务绑定到负载平衡虚拟服务器

使用 CLI 将 GRPC 端点服务绑定到负载平衡虚拟服务器。

在命令界面,键入:

bind lb vserver <name> <serviceName>

示例:

bind lb vserver lb-grpc svc-grpc

将 GrPC 状态代码映射到 HTTP/1.1 响应中的 HTTP 状态代码

在 GrPC 桥接方案中,GrPC 服务使用 GrPC 状态代码响应请求。设备将 GRPC 状态代码映射到相应的 HTTP 响应代码和原因短语。映射是根据下面提供的表格完成的。向客户端发送 HTTP/1.1 响应时,Citrix ADC 设备将发送 HTTP 状态代码和原因短语。

gRPC status-code HTTP 响应状态代码 HTTP 响应原因短语
OK = 0 200 确定
CANCELLED = 1 499 *
UNKNOWN = 2 500 内部服务器错误
INVALID_ARGUMENT = 3 400 错误的请求
DEADLINE_EXCEEDED = 4 504 Gateway Timeout
NOT_FOUND = 5 404 *
ALREADY_EXISTS = 6 409 冲突
PERMISSION_DENIED = 7 403 禁止
UNAUTHENTICATED = 16 401 未授权
RESOURCE_EXHAUSTED = 8 429 *
FAILED_PRECONDITION = 9 400 错误的请求
ABORTED = 10 409 冲突
OUT_OF_RANGE = 11 400 错误的请求
UNIMPLEMENTED = 12 501 Not Implemented
INTERNAL = 13 500 内部服务器错误
UNAVAILABLE = 14 503 服务不可用
DATA_LOSS = 15 500 内部服务器错误

使用 GUI 配置 GRPC 桥接

要使用 Citrix ADC GUI 配置 GRPC 桥接,请完成以下步骤。

在直接启用 HTTP/2 和 HTTP/2 的情况下添加 HTTP 配置文件

  1. 导航到系统 > 配置文件,然后单击 HTTP 配置文件
  2. 在 HTTP 配置文件中选择 HTTP/2

gRPC bridging add HTTP profile with http2 parameter

在 HTTP 参数中启用全局后端 HTTP/2 支持

  1. 导航到系统”>“设置”>“HTTP 参数
  2. 配置 HTTP 参数页中,选择服务器端上的 HTTP/2选项。
  3. 单击确定

gRPC bridging global back-end HTTP/2

添加 SSL/HTTP 类型的负载平衡虚拟服务器并设置 HTTP 配置文件

  1. 导航到流量管理 > 负载平衡 > 虚拟服务器
  2. 单击添加为 GRPC 通信创建负载平衡虚拟服务器。
  3. 负载平衡虚拟服务器页中,单击 概要文件
  4. 配置文件部分中,选择配置文件类型为 HTTP。
  5. 单击确定,然后单击完成

gRPC bridging global back-end HTTP/2 enable load balancing

为 GRPC 端点添加服务并设置 HTTP 配置文件

  1. 导航到流量管理”>“负载平衡”>“服务”
  2. 单击添加为 GRPC 通信创建应用程序服务器。
  3. 负载平衡服务页面中,转到概要文件部分。
  4. 配置文件下,为 GRPC 端点添加 HTTP 配置文件
  5. 单击确定,然后单击完成

gRPC bridging add service for grpc endpoint

为 GRPC 端点绑定服务以负载平衡虚拟服务器

  1. 导航到流量管理 > 负载平衡 > 虚拟服务器
  2. 单击添加为 GRPC 通信创建负载平衡虚拟服务器。
  3. 负载平衡虚拟服务器页中,单击服务和服务组部分。
  4. 负载平衡虚拟服务器服务绑 定”页中,选择要绑定的 GRPC 服务。
  5. 单击关闭,然后单击完成

gRPC bridging bind service for gRPC endpoint

有关 GUI 过程的详细信息,请参阅 负载平衡 主题。

GrPC 桥接