技术
Envoy
面向云原生应用的高性能代理
Envoy 是一个为云原生应用构建的高性能、可扩展的代理。它同时工作在三/四层和七层,为流经它的流量处理负载均衡、服务发现、重试、熔断和可观测性 —— 并且它是大多数现代服务网格和 API 网关底层的数据平面代理。
工作原理
Envoy 通常作为 sidecar 部署在每个应用实例旁边,或者作为独立的边缘代理。它通过一组发现 API(统称 “xDS”)动态配置 —— 由控制平面推送 listener、route、cluster 和 endpoint 的配置,Envoy 无需重启即可应用。这种将快速、通用的数据平面与可插拔的控制平面分离的设计,使 Istio 等工具能够在 Envoy 之上构建完整的服务网格。
核心概念
- Listener —— Envoy 接受连接的具名网络位置(一个 IP 和端口)。
- Route —— 匹配传入请求并决定由哪个上游 cluster 处理的配置。
- Cluster —— Envoy 可以在其间做负载均衡的一组上游端点,以及健康检查和连接池设置。
- xDS API —— 控制平面用来向 Envoy 动态推送配置的一族发现协议(LDS、RDS、CDS、EDS 等)。
为什么团队选择 Envoy
- 丰富的七层功能。 原生支持 HTTP/2、gRPC、重试、超时、熔断以及细粒度的流量拆分。
- 深度可观测性。 详尽的指标、日志和分布式追踪是内置的,而非事后附加。
- 动态配置。 路由和端点的变更无需重启或断开连接即可生效。
- 通用基座。 它是 Istio、若干 API 网关和许多托管 ingress 控制器的底层,因此技能可以跨工具迁移。
快速开始
在 Kubernetes 环境中,Envoy 很少被独立运行 —— 大多数团队是在 Istio 之类的服务网格中,将它作为 sidecar 代理,或者作为 ingress 控制器或 API 网关背后的引擎来接触它。下面的指南涵盖在这些常见场景中配置 Envoy 的方法。