ext_proc 的 Envoy 过滤器未达到 EOF

问题描述 投票:0回答:1

我正在使用 Istio 1.16 和 envoy (v1.24.1)sidecar。 我为 ext_proc (v3) 创建了一个过滤器,它连接到远程 API 并针对每个请求发送一些运行状况信息。

          ext_proc 
             ^
             |
client ->  envoy -> upstream

ext_proc 使用 GRPC 并发送请求标头、请求正文等... 下面还给出了处理模式

          request_header_mode: "SEND"
          response_header_mode: "SEND"
          request_body_mode: "BUFFERED"
          response_body_mode: "BUFFERED"
          request_trailer_mode: "SKIP"
          response_trailer_mode: "SKIP"

使用此处理模式配置,上下文不会取消,并且读取不会达到 EOF。因此,我在 EOF 内的代码不起作用。

    ctx := srv.Context()
for {
    select {
    case <-ctx.Done():
        return ctx.Err()
    default:
    }
    req, err := srv.Recv()
    if err == io.EOF {
        **send request to remote API**
        return nil
    }
    if err != nil {
        return status.Errorf(codes.Unknown, "cannot receive stream request: %v", err)
    }

但是,当我将response_trailer_mode更改为SEND时,流程工作正常,上下文被取消并且EOF满足。然而,我不需要响应预告片,SKIP 是实际需要。 参考代码取自以下链接 ext_proc.

如何使其与预告片模式 SKIP 一起工作?有什么建议吗?

go grpc istio envoyproxy
1个回答
0
投票

您的问题找到解决方案了吗?

© www.soinside.com 2019 - 2024. All rights reserved.