Envoy 是由 Lyft 开源、现隶属于 CNCF(云原生计算基金会)的高性能代理。它以独立进程方式运行,与任何编程语言和框架无关,天然适配异构微服务环境。
与应用内嵌 SDK 的代理方案不同,Envoy 采用进程外架构(Out-of-Process),将网络关注点从业务逻辑中彻底分离,实现基础设施与应用解耦。
Envoy 是 Istio、Contour 等主流服务网格与 Ingress 控制器的核心数据平面,也是 Google、AWS 等云平台负载均衡器的底层引擎。
Envoy 提供一整套网络基础能力,无需修改业务代码即可为每个服务赋能。
理解 Envoy 的关键抽象,掌握配置的本质。
以下是一个完整的 Envoy 静态配置,将流量代理到后端 HTTP 服务。
# Envoy 静态配置示例 — HTTP 反向代理 static_resources: # ── 监听器:接受下游连接 ── listeners: - name: http_listener address: socket_address: address: 0.0.0.0 port_value: 10000 filter_chains: - filters: - name: envoy.filters.network.http_connection_manager typed_config: "@type": type.googleapis.com/.../HttpConnectionManager stat_prefix: ingress_http codec_type: AUTO # 自动检测 HTTP/1.1 or /2 route_config: virtual_hosts: - name: backend domains: ["*"] routes: - match: prefix: "/api" # 路径匹配 route: cluster: api_service timeout: 30s - match: prefix: "/" route: cluster: frontend_service http_filters: - name: envoy.filters.http.router # ── 集群:上游后端服务 ── clusters: - name: api_service connect_timeout: 5s type: STRICT_DNS # DNS 服务发现 lb_policy: ROUND_ROBIN load_assignment: cluster_name: api_service endpoints: - lb_endpoints: - endpoint: address: socket_address: address: api.default.svc.cluster.local port_value: 8080 # Docker 运行: # docker run --rm -p 10000:10000 \ # -v $(pwd)/envoy.yaml:/etc/envoy/envoy.yaml \ # envoyproxy/envoy:v1.33-latest
从边缘网关到服务网格 Sidecar,Envoy 在各种场景中发挥关键作用。