Citrix ADC

具有响应者策略的 grPC

带响应程序策略配置的 GrPC 解释了 Citrix ADC 设备如何通过 HTTP/2 协议对 grPC 请求提供不同的响应。当用户请求网站主页时,您可能希望提供不同的主页,具体取决于每个用户所在的位置或用户使用的浏览器。

下图显示了交互的组件。

具有响应者策略的 grPC

  1. 在设备上启用响应程序功能。
  2. 配置响应程序操作以生成自定义响应、将请求重定向到其他网页或重置连接。
  3. 配置响应程序策略以确定必须对其采取操作的 gRPC 请求(流量)。
  4. 将响应程序策略绑定到负载平衡虚拟服务器,以检查流量是否与策略表达式匹配。
  5. 通过使用响应者策略,您可以根据 grPC 状态代码执行以下操作。

使用 CLI 使用响应程序策略配置 grPC 呼叫终止

要使用响应程序策略配置 grPC 呼叫终止,您必须完成以下步骤:

  1. 启用响应者功能
  2. 添加响应者操作
  3. 添加响应者策略并关联响应者操作
  4. 将响应程序策略绑定到负载平衡虚拟服务器

启用响应者功能

要使用响应程序功能,必须首先启用它。

在命令提示符下,键入:

enable ns responder

添加响应者操作

启用该功能后,您必须根据后端服务器返回的状态码配置响应程序操作以处理 gRPC 响应。

在命令提示符下,键入:

add responder action <name> <type>

示例:

add responder action grpc-act respondwith "HTTP/1.1 200 OK\r\nServer: NS-Responder\r\nContent-Type:application/grpc\r\ngrpc-status: 12\r\ngrpc-message: Not Implemented\r\n\r\n" + "Method: " + HTTP.REQ.URL+ "is not implemented."

添加响应程序策略

配置响应程序操作后,您必须接下来配置响应程序策略以选择 Citrix ADC 设备必须响应的 gRPC 请求。

在命令提示符下,键入:

add responder policy <name> <expression> <action> [<undefaction>]-appFlowaction <actionName> 示例:

add responder policy grpc-resp-pol1 HTTP.REQ.URL.NE(“/helloworld.Greeter/SayHello”) grpc-act

绑定响应程序策略以平衡虚拟服务器

要使策略生效,必须使用 gRPC 服务将其绑定到负载平衡虚拟服务器。

在命令提示符下,键入:

bind responder global <policyName> <priority> [<gotoPriorityExpression> [-type <type>] [-invoke (<labelType> <labelName>)]

示例:

bind lb vserver lb-grpc svc-grpc -policyName grpc-resp-pol1 –priority 100

有关响应者策略的更多信息,请参阅 响应程序策略 主题。

匹配 grPC 协议缓冲区字段的策略表达式

Citrix ADC 设备在 grPC 配置中支持以下策略表达式:

  • grPC 协议缓冲区字段访问。任意 grPC API 调用将消息字段编号与新的策略表达式匹配。在 PI 配置中,匹配只使用 “字段编号” 和 “API 路径” 完成。

  • grPC 标头过滤。grPC 的 “HttpProfile” 参数用于调整 grPC 解析的默认行为(包括 grPC 策略表达式)。以下参数适用于 grPC 策略表达式:

    • grpClength划界。默认情况下,它处于启用状态,并希望协议缓冲区显示长度分隔的消息。

    • grpCholdLimit。默认值为 131072。它是以字节为单位的最大协议缓冲区消息大小。它也是最大字符串长度和最大 “字节” 字段长度。

使用 CLI 配置 grPC 高级策略表达式

在命令提示符下,键入:

set ns httpProfile <name> -http2 ( ENABLED | DISABLED ) -gRPCLengthDelimitation ( ENABLED | DISABLED ) -gRPCHoldLimit <int>

示例:

set ns httpProfile http2gRPC -http2 ENABLED -gRPCLengthDelimitation ENABLED -gRPCHoldLimit 131072

使用 GUI 配置 grPC 标头过滤参数

  1. 导航到系统 > 配置文件,然后单击 HTTP 配置文件

  2. 创建 HTTP 配置文件 页面上,向下滚动到 HTTP/3 部分,选择 grPC 长度分界

    grPC 长度划界

以下策略表达式示例显示了消息 5、子消息 4 和字段 3 中的值。它是一个 32 位 int 等于 2。

http.req.body(1000).grpc.message(5).message(4).int32(3).eq(2)

添加了以下策略表达式,用于按数字匹配 grPC 协议缓冲区消息字段:

  • 消息
  • 双重的
  • 浮动
  • int32
  • int64
  • uint32
  • uint64
  • sint64
  • sint32
  • fixed32
  • fixed64
  • sfixed32
  • sfixed64
  • bool
  • string
  • 枚举
  • bytes

API 路径匹配

当使用多个 API 时,API 路径匹配用于匹配正确的 grPC API 调用。匹配 API 路径,可以在 HTTP 请求的 ‘: path’ 伪标头中找到。

示例:

http.req.header(":path").eq("acme.inventory.v1/ListBooks")
具有响应者策略的 grPC