本文详细介绍了 Envoy 的 ext_proc 外部处理过滤器的功能、配置与性能优化策略。通过示例演示,展示了如何配置 Envoy 与实现外部处理服务器,帮助开发人员灵活处理请求与响应。
阅读原文请转到:https://jimmysong.io/blog/envoy-ext-proc-guide/
在微服务架构中,API 网关通常需要对请求和响应进行高级别的处理,如身份验证、数据转换和安全检查。Envoy 提供的 ext_proc
外部处理过滤器,是一个强大的工具,通过与 gRPC 服务交互,实现灵活的请求与响应处理。本文将深入解析该过滤器的功能、配置与性能优化策略,帮助开发人员和 DevOps 工程师高效应用该特性。
ext_proc 与其他过滤器的关系
ext_proc
[1] 和 Envoy 中的其他 gRPC 接口过滤器(如 ext_authz
[2])在功能上有相似之处,但 ext_proc
提供了更强大的功能,支持完整的请求和响应处理。这使其特别适用于需要深度内容检查和修改的应用场景。
你可以通过下面的 Envoy 外部处理过滤器思维导图快速了解 ext_proc
。
这张思维导图展示了 Envoy ext_proc
外部处理过滤器的核心结构和功能模块。ext_proc
通过 gRPC 双向流协议与外部服务交互,可灵活处理 HTTP 请求和响应的各个阶段,并支持同步与异步处理。
ext_proc 工作原理与配置
定义与功能
ext_proc
是 Envoy 提供的 HTTP 过滤器,支持将请求和响应外包给 gRPC 服务进行处理,允许在外部服务中实现复杂的逻辑,灵活应对业务需求。
工作原理
ext_proc
通过双向 gRPC 流协议与外部处理服务进行通信,Envoy 发送 ProcessingRequest
消息,外部服务返回 ProcessingResponse
消息。这种设计允许外部服务在请求和响应生命周期内的各个阶段干预消息,甚至生成全新的响应。以下是该过程的图表示:
关键功能
• 请求和响应处理:读取和修改 HTTP 请求和响应的头部、主体和尾部。
• 灵活性:根据业务需求定义自定义逻辑,弥补内置功能的不足。
• 异步处理:支持异步处理模式,防止请求阻塞。
配置示例
以下是一个基本的 Envoy 配置示例:
static_resources:
listeners:
- name: listener_0
address:
socket_address:
protocol: TCP
address: 0.0.0.0
port_value: 8080
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_conne