Envoy 代理
Envoy 核心概念
Envoy 是 Istio 数据平面的核心组件,一个高性能的 L4/L7 代理。
| 概念 | 说明 |
|---|---|
| Listener | 监听端口,接收下游连接 |
| Filter | 请求处理链(认证、限流、路由等) |
| Route | 匹配规则,决定请求发往哪个 Cluster |
| Cluster | 上游服务集群(一组 Endpoint) |
| Endpoint | 具体的后端服务实例 IP:Port |
xDS 动态配置
Envoy 通过 xDS API 从控制平面(Istiod)获取配置,无需重启:
| API | 全称 | 功能 |
|---|---|---|
| LDS | Listener Discovery | 监听器配置 |
| RDS | Route Discovery | 路由规则 |
| CDS | Cluster Discovery | 服务集群 |
| EDS | Endpoint Discovery | 后端实例列表 |
| SDS | Secret Discovery | TLS 证书 |
静态配置示例
envoy.yaml
static_resources:
listeners:
- name: listener_0
address:
socket_address:
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_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: backend
domains: ["*"]
routes:
- match:
prefix: "/"
route:
cluster: backend_service
http_filters:
- name: envoy.filters.http.router
clusters:
- name: backend_service
connect_timeout: 5s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: backend_service
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: backend
port_value: 3000
常见面试问题
Q1: Envoy 相比 Nginx 有什么优势?
答案:
| 特性 | Envoy | Nginx |
|---|---|---|
| 动态配置 | xDS API 热更新 | reload 重载 |
| 可观测性 | 内置丰富 Metrics | 需要额外模块 |
| L7 协议 | HTTP/2、gRPC 原生支持 | gRPC 需额外配置 |
| 服务发现 | 内置 EDS | 需要配合 Consul 等 |
| 定位 | 服务间通信代理 | Web 服务器/反向代理 |
Envoy 更适合微服务间的东西向流量,Nginx 更适合南北向入口流量。