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,内容类型是否为application/ gRPC。HTTP/1.1请求转换为以下伪标头。
  2. 在HTTP/1.1上收到gRPC请求时。ADC设备通过HTTP/2将请求转换为gRPC,如下所示:
:method: HTTP/1.1中的method -name request:path:路径为HTTP/1.1请求内容类型:application/grpc 
  1. 负载均衡虚拟服务器(绑定gRPC服务)根据策略评估结束请求或通过HTTP/2帧将请求转发给后端gRPC服务器。
  2. 在从gRPC服务器接收到HTTP/2连接的响应时,设备将进行缓冲,直到它接收到HTTP/2预告,然后检查gRPC状态码。如果gRPC错误状态为非零,设备将查找映射的HTTP状态码并发送合适的HTTP/1.1错误响应。

通过CLI配置gRPC桥接

配置gRPC桥接,需要完成以下步骤:

  1. 添加HTTP配置文件,启用HTTP/2和HTTP/2 direct
  2. 在HTTP参数中启用全局后端HTTP/2支持
  3. 添加SSL/HTTP类型的负载均衡虚拟服务器,并配置HTTP配置文件
  4. 为gRPC端点添加Service,并设置HTTP配置文件
  5. 绑定gRPC端点服务到负载均衡虚拟服务器
  6. 将gRPC状态码映射到非零gRPC状态的HTTP响应
  7. 根据时间和/或大小配置gRPC缓冲

添加HTTP配置文件,启用HTTP/2和HTTP/2直通

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

在命令提示符下,输入:

add ns httpProfile -http2 (ENABLED | DISABLED) [- http2direct (ENABLED | DISABLED)]

例子:

添加ns httpProfile http2gRPC -http2Direct ENABLED -http2 ENABLED

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

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

在命令提示符下,输入:

设置nshttpparam -http2ServerSide(ON | OFF)

例子:

设置nshttpparam -http2ServerSide ON

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

属性添加负载平衡虚拟服务器Citrix ADC命令接口

在命令提示符下,输入:

添加lb vserver [(@ <端口>)][-httpProfileName ]

例子:

添加lb vserver lb-grpc HTTP 10.10.10.10 80 -httpProfileName http2gRPC

注意:

如果使用SSL类型的负载平衡虚拟服务器,则必须绑定服务器证书。看到绑定服务器证书主题获取更多信息。

为gRPC端点添加Service,并设置HTTP配置文件

使用HTTP配置文件添加gRPC服务Citrix ADC命令接口。

在命令提示符下,输入:

添加服务 ( | ) [-httpProfileName ]

例子:

add service svc-grpc 10.10.10.10 HTTP 80 -httpProfileName http2gRPC . add service svc-grpc 10.10.10.10

绑定gRPC端点服务到负载均衡虚拟服务器

使用CLI方式绑定负载均衡虚拟服务器和gRPC端点服务。

在命令界面输入:

绑定lb vserver

例子:

绑定lb vserver lb-grpc svc-grpc

将gRPC状态码映射为HTTP/1.1响应中的HTTP状态码

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

gRPC状态代码 HTTP响应状态码 HTTP响应原因-短语
Ok = 0 200 好吧
取消= 1 499 *
未知= 2 500 服务器内部错误
Invalid_argument = 3 400 坏的请求
Deadline_exceeded = 4 504 网关超时
Not_found = 5 404 *
Already_exists = 6 409 冲突
Permission_denied = 7 403 被禁止的
未验证= 16 401 未经授权的
Resource_exhausted = 8 429 *
Failed_precondition = 9 400 坏的请求
流产= 10 409 冲突
Out_of_range = 11 400 坏的请求
未实现= 12 501 没有实现
内部= 13 500 服务器内部错误
不可用= 14 503 服务不可用
Data_loss = 15 500 服务器内部错误

根据时间和/或大小配置gRPC缓冲

Citrix ADC设备缓冲来自后端服务器的gRPC响应,直到接收到响应预告。这破坏了双向gRPC调用。另外,如果gRPC响应非常大,它会消耗大量内存来完全缓冲响应。为了解决这个问题,gRPC桥接配置被增强以限制缓冲的时间和/或大小。如果缓冲区大小或时间限制超过阈值,则设备停止缓冲并将响应转发给客户端,即使在任何一个限制触发时也是如此(在配置的缓冲区大小内未接收到预告,或者发生了配置的超时)。因此,配置的策略及其表达式(基于grpc-status代码)不能按预期工作。

要通过CLI限制gRPC缓冲的时间和/或大小,可以在添加新的HTTP配置文件时进行配置,也可以在修改现有配置文件时进行配置。

在命令提示符下,输入:

add ns httpProfile http2gRPC [-grpcHoldLimit ] [-grpcHoldTimeout ]

set ns httpProfile http2gRPC [-grpcHoldLimit ] [-grpcHoldTimeout ]

在那里,

grpcholdlimit.在收到预告之前,允许缓冲gRPC数据包的最大字节数。两个参数都可以配置,也可以任意配置。

缺省值:131072最小值:0最大值:33554432

grpcholdtimeout.允许缓冲gRPC报文的最大时间(以毫秒为单位),直到收到预告。该值应该是100的倍数。缺省值:1000最小值:0最大值:180000

例子:

添加httpprofile http2gRPC -grpcholdlimit 1048576 -grpcholdtimeout 5000设置httpprofile http2gRPC -grpcholdlimit 1048576 -grpcholdtimeout 5000

通过GUI配置gRPC桥接

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

添加HTTP配置文件,启用HTTP/2和HTTP/2 direct

  1. 导航到系统>配置文件并点击HTTP配置文件
  2. 选择HTTP / 2HTTP配置文件中。

gRPC桥接添加http2参数的HTTP配置文件

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

  1. 导航到系统>设置> HTTP参数
  2. 配置HTTP参数页面,选择服务器端HTTP/2选择。
  3. 点击好吧

gRPC桥接全球后端HTTP/2

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

  1. 导航到流量管理>负载均衡>虚拟服务器
  2. 点击添加为gRPC流量创建负载均衡虚拟服务器。
  3. 负载均衡虚拟服务器页面,点击配置文件
  4. 配置文件节中,选择配置文件类型为HTTP。
  5. 点击好吧然后完成

gRPC桥接全球后端HTTP/2使能负载均衡

为gRPC端点添加Service,并设置HTTP配置文件

  1. 导航到流量管理>负载均衡>业务
  2. 点击添加为gRPC流量创建应用服务器。
  3. 负载均衡服务页面,转到配置文件部分。
  4. 配置文件,添加HTTP配置文件用于gRPC端点。
  5. 点击好吧然后完成

gRPC桥接为gRPC端点添加服务

绑定gRPC端点到负载均衡虚拟服务器的业务

  1. 导航到流量管理>负载均衡>虚拟服务器
  2. 点击添加为gRPC流量创建负载均衡虚拟服务器。
  3. 负载均衡虚拟服务器页面,点击服务及服务组部分。
  4. 负载均衡虚拟服务器服务绑定界面,选择需要绑定的gRPC服务。
  5. 点击关闭然后完成

gRPC端点的gRPC桥接绑定服务

通过GUI配置gRPC按时间和大小缓冲

  1. 导航到系统>配置文件并点击HTTP配置文件
  2. 选择HTTP / 2HTTP配置文件中。
  3. 配置HTTP配置文件界面,设置如下参数:

    1. grpcHoldTimeout。输入以毫秒为单位的gRPC报文缓冲时间,直到收到预告片。
    2. grpcHoldLimit。输入缓冲区gRPC报文的最大字节数,直到收到预告。
  4. 点击好吧关闭

gRPC桥接缓冲的时间和大小

绑定服务和负载均衡虚拟服务器的GUI操作步骤请参见负载平衡的话题。

gRPC桥接