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且内容类型是应用程序/ grpc.HTTP / 1.1请求将转换为以下伪标头。
- 如内容类型标头所示,在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
- 根据策略评估,负载平衡虚拟服务器(将gRPC服务绑定到它)终止请求或通过HTTP / 2帧将其转发到后端gRPC服务器。
- 在从GrPC服务器接收HTTP / 2连接上的响应后,设备会缓冲,直到收HTTP / 2拖到车,然后检查GrPC状态代码。如果GrPC错误状态为非零,设备将查找映射HTTP状态代码并发送合适的HTTP / 1.1错误响应。
使用CLI配置GRPC桥接
要配置grPC桥接,必须完成以下步骤:
- 在HTTP / 2和HTTP / 2直接启用的情况下添加HTTP配置文件
- 在HTTP函数中使用全局后端http / 2支持
- 添加SSL / HTTP类型的负载平衡虚拟服务器并设置HTTP配置文件
- 为grpc端点加加服务设置设置http配置文库
- 将gRPC端点服务绑定到负载平衡虚拟服务器
- 将gRPC状态码映射到HTTP响应以获得非零gRPC状态
- 按时间和/或大小配置grPC缓冲
在启用HTTP / 2和HTTP / 2直接启用的情况下添加HTTP配置文件
要开始配置,必须在HTTP配置文件中启用HTTP / 2功能。如果客户端发送HTTP 1.1请求,设备会桥接请求并将其转发到后端服务器。
在命令提示符下,键入:
add ns httpProfile
示例:
add ns httpProfile http2gRPC -http2Direct ENABLED -http2 ENABLED
在HTTP函数中使用全局后端http / 2支持
使用Citrix ADC命令行在服务器端全局启用HTTP / 2支持。
在命令提示符下,键入:
设置nshttpparam -http2ServerSide(ON | OFF)
示例:
设置ns httpParam -http2ServerSide ON
添加SSL / HTTP类型的负载平衡虚拟服务器并设置HTTP配置文件
使用Citrix ADC命令界面添加负载平衡虚拟服务器
在命令提示符下,键入:
添加lb vserver
示例:
add lb vserver lb-grpc HTTP 10.10.10.10 80 -httpProfileName http2gRPC . add lb vserver lb-grpc HTTP 10.10.10.10
注意:如果如果使用的是ssl类型的负载平衡仪器,则则绑定仪器证书。有关何信息,请参阅绑定服务器证书主
为grpc端点加加服务设置设置http配置文库
使用Citrix ADC命令界面添加带HTTP配置文件的gRPC服务。
在命令提示符下,键入:
添加服务
示例:
add service svc-grpc 10.10.10.10 HTTP 80 -httpProfileName http2gRPC . add service svc-grpc
将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响应原因短语 |
---|---|---|
好吧= 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 | 服务不可用 |
数据丢失=15 | 500 | 内部服务器错误 |
按时间和/或大小配置grPC缓冲
Citrix ADC设备会缓冲来自后端服务器的gRPC响应,直到收到响应拖车。这打破了双向gRPC调用。此外,如果gRPC响应很大,它会消耗大量内存来完全缓冲响应。为了解决此问题,gRPC桥接配置已增强,以根据时间和/或大小限制缓冲。如果缓冲区大小或时间限制超过阈值,则设备将停止缓冲并将响应转发给客户端,即使触发任何一个限制(在配置的缓冲区大小内未收到拖车或发生配置的超时)。因此,配置的策略及其表达式(基于grpc-status代码)无法按预期工作。
要通过CLI按时间和/或大小限制gRPC缓冲,您可以配置何时添加新的HTTP配置文件或在修改现有配置文件时进行配置。
在命令提示符下,键入:
添加ns httpProfile http2gRPC [-grpcHoldLimit
或
设置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 / 2和HTTP / 2直接启用的情况下添加HTTP配置文件
- 导航到系统 > 配置文件,然后单击HTTP配置文件。
- 在HTTP配置文件中选择HTTP / 2。
在HTTP函数中使用全局后端http / 2支持
- 导航到”“>”系统设置“>”HTTP参数”。
- 在“配置HTTP参数”页中,选择”服务器端上的HTTP / 2”选项。
- 单击好吧(确定)。
添加SSL / HTTP类型的负载平衡虚拟服务器并设置HTTP配置文件
- 导航到流量管理 > 负载平衡 > 虚拟服务器。
- 单击添加为GRPC通信创建负载平衡虚拟服务器。
- 在“负载平衡虚拟服务器”页中,单击概要文件。
- 在“配置文件“部分中,选择配置文件类型为HTTP。
- 单击确定,然后单击完成。
为grpc端点加加服务设置设置http配置文库
- 导航到流量管理 > 负载平衡 > 服务。
- 单击添加为GRPC通信创建应用程序服务器。
- 在“负载平衡服务”页面中,转到“概要文件“部分。
- 在配置文件下,为GRPC端点添加HTTP配置文件。
- 单击确定,然后单击完成。
将gRPC端点的服务绑定到负载平衡虚拟服务器
- 导航到流量管理 > 负载平衡 > 虚拟服务器。
- 单击添加为GRPC通信创建负载平衡虚拟服务器。
- 在负载平衡虚拟服务器页面中,单击服务和服务组部
- 在“负载平衡虚拟服务器服务绑定“页中,选择要绑定的grpc服务。
- 单击关闭,然后单击完成。
使用GUI按时间和大小配置grPC缓冲
- 导航到系统 > 配置文件,然后单击HTTP配置文件。
- 在HTTP配置文件中选择HTTP / 2。
在“配置HTTP配置文件“页中,设置以下数:
- grpcholdtimeout。输入在收到收到车之外缓冲grpc数码的时间(以毫秒为单位)。
- grpcholdLimit。输入最大大小(以字节为单位)以缓冲gRPC数据包,直到收到拖车。
- 单击确定和关闭。
有关绑定服务和负载平衡虚拟服务器的详细GUI过程,请参阅负载平衡主题。