Envoy 简介

Envoy 是由 Lyft 公司开发的开源代理服务,它作为 Service Mesh 实现方案 Istio 的默认数据平面。随着云原生生态的蓬勃发展,Envoy 在云原生领域的地位日益重要,其作用可与主机时代的 Nginx 相媲美。

Envoy 以其卓越的性能、丰富的监控指标和遵循云原生声明式 API 约束的强大编程能力而著称。对于需要在代理场景下实现业务定制的开发者来说,Envoy 是一个极佳的选择。

开发 Envoy 需要的基础知识

尽管 Envoy 的核心代码是用 C++ 编写的,但是进行 envoy 相关的开发一定需要使用 c++吗?当然不是,由于 envoy 极强的可扩展性设计,以及与云原生 k8s 生态的结合。多数场景下 envoy 的的开发工作更像是使用编程语言去控制生成一份动态的 yaml 配置。

Web Server 编程

代理最常见的使用场景之一是 Web Server。许多 Web Server 在提供服务时会主动或被动地使用代理。具备一定的 Web Server 编程基础有助于更好地理解代理的工作机制。此外,Envoy 相关的开发工作常依赖于 Web Server 实现 HTTP API。

Golang

envoy 本身设计了一套 grcp 接口用来对接控制面服务。官方提供的控制面 sdk 有 golang 和 java 两种不同语言的实现,golang 的使用更加广泛,相关案例和讨论也更多。掌握 Golang 基础知识可以帮助你基于官方示例更快地构建代理控制服务。

gRPC

Envoy 与控制服务之间的交互协议是 gRPC。了解 gRPC 有助于深入理解 Envoy 与控制服务的交互细节。

TCP/IP 协议

对 TCP/IP 协议的了解可以帮助你更好地分析网络流量,深入理解 Envoy 配置背后的原理。

概念名词

downstream

以 c2s 的模型角度来看,在 envoy 的术语概念里面,downstream 可以认为是客户端或者是请求的发起方。

upstream

upstream 则可以认为是服务端或者是请求的接受方。

listener

listener 作为代理流量入口的配置,定义了监听的端口,流量处理路径选择,组合流量处理过滤链。

filter

filter 是 envoy 实现具体业务逻辑的地方,可以读取、添加、修改、删除代理的数据流里面的内容。

分别有 listener filternetwork filterhttp filter 以及官方文档提及的没有可以开箱即用的 cluter filter

cluster

cluster 作为代理流量出口的配置,决定数据了请求从 envoy 内部处理完成之后,以什么样的形式发送到什么目的地址。

相关资源

  1. https://jimmysong.io/tags/envoy/
  2. https://academy.tetrate.io/courses/envoy-fundamentals-zh