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请求时,Citrix ADC设备检查连接是否为HTTP/1.1,内容类型是否为application/ gRPC。HTTP/1.1请求转换为以下伪标头。
- 在HTTP/1.1上收到gRPC请求时。ADC设备通过HTTP/2将请求转换为gRPC,如下所示:
:method: HTTP/1.1中的method -name request:path:路径为HTTP/1.1请求内容类型:application/grpc
- 负载均衡虚拟服务器(绑定gRPC服务)根据策略评估结束请求或通过HTTP/2帧将请求转发给后端gRPC服务器。
- 在从gRPC服务器接收到HTTP/2连接的响应时,设备将进行缓冲,直到它接收到HTTP/2预告,然后检查gRPC状态码。如果gRPC错误状态为非零,设备将查找映射的HTTP状态码并发送合适的HTTP/1.1错误响应。
通过CLI配置gRPC桥接
配置gRPC桥接,需要完成以下步骤:
- 添加HTTP配置文件,启用HTTP/2和HTTP/2 direct
- 在HTTP参数中启用全局后端HTTP/2支持
- 添加SSL/HTTP类型的负载均衡虚拟服务器,并配置HTTP配置文件
- 为gRPC端点添加Service,并设置HTTP配置文件
- 绑定gRPC端点服务到负载均衡虚拟服务器
- 将gRPC状态码映射到非零gRPC状态的HTTP响应
- 根据时间和/或大小配置gRPC缓冲
添加HTTP配置文件,启用HTTP/2和HTTP/2直通
要开始配置,必须在HTTP配置文件中启用HTTP/2特性。如果客户机发送HTTP 1.1请求,设备将桥接请求并将其转发到后端服务器。
在命令提示符下,输入:
add ns httpProfile
例子:
添加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
例子:
添加lb vserver lb-grpc HTTP 10.10.10.10 80 -httpProfileName http2gRPC
注意:
如果使用SSL类型的负载平衡虚拟服务器,则必须绑定服务器证书。看到绑定服务器证书主题获取更多信息。
为gRPC端点添加Service,并设置HTTP配置文件
使用HTTP配置文件添加gRPC服务Citrix ADC命令接口。
在命令提示符下,输入:
添加服务
例子:
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
或
set ns httpProfile http2gRPC [-grpcHoldLimit
在那里,
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
- 导航到系统>配置文件并点击HTTP配置文件.
- 选择HTTP / 2HTTP配置文件中。
在HTTP参数中启用全局后端HTTP/2支持
- 导航到系统>设置> HTTP参数.
- 在配置HTTP参数页面,选择服务器端HTTP/2选择。
- 点击好吧.
添加SSL/HTTP类型的负载均衡虚拟服务器,并配置HTTP配置文件
- 导航到流量管理>负载均衡>虚拟服务器.
- 点击添加为gRPC流量创建负载均衡虚拟服务器。
- 在负载均衡虚拟服务器页面,点击配置文件.
- 在配置文件节中,选择配置文件类型为HTTP。
- 点击好吧然后完成.
为gRPC端点添加Service,并设置HTTP配置文件
- 导航到流量管理>负载均衡>业务.
- 点击添加为gRPC流量创建应用服务器。
- 在负载均衡服务页面,转到配置文件部分。
- 下配置文件,添加HTTP配置文件用于gRPC端点。
- 点击好吧然后完成.
绑定gRPC端点到负载均衡虚拟服务器的业务
- 导航到流量管理>负载均衡>虚拟服务器.
- 点击添加为gRPC流量创建负载均衡虚拟服务器。
- 在负载均衡虚拟服务器页面,点击服务及服务组部分。
- 在负载均衡虚拟服务器服务绑定界面,选择需要绑定的gRPC服务。
- 点击关闭然后完成.
通过GUI配置gRPC按时间和大小缓冲
- 导航到系统>配置文件并点击HTTP配置文件.
- 选择HTTP / 2HTTP配置文件中。
在配置HTTP配置文件界面,设置如下参数:
- grpcHoldTimeout。输入以毫秒为单位的gRPC报文缓冲时间,直到收到预告片。
- grpcHoldLimit。输入缓冲区gRPC报文的最大字节数,直到收到预告。
- 点击好吧和关闭.
绑定服务和负载均衡虚拟服务器的GUI操作步骤请参见负载平衡的话题。