Envoy 是一个高性能的 L7 代理和服务网格数据平面,由 Lyft 开源。在现代云原生架构中,Envoy 作为 Sidecar 代理与每个服务实例一同部署,接管所有南北向和东西向流量,为微服务提供统一的流量管理、可观测性和安全能力。
Sidecar 代理架构
每个服务实例旁部署一个 Envoy 代理,所有进出流量都经过该代理。这种架构使服务本身无需关心网络层面的复杂逻辑,实现了基础设施逻辑与业务代码的解耦。
流量分割与路由
Envoy 通过动态配置支持精细的流量管理。以下配置演示了如何实现金丝雀发布,将 10% 的流量路由到新版本:
# envoy-config.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: "/api/v1/" }
route:
weighted_clusters:
clusters:
- name: service_v1
weight: 90
- name: service_v2
weight: 10
http_filters:
- name: envoy.filters.http.router
clusters:
- name: service_v1
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: service_v1
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address: { address: service-v1, port_value: 8080 }
- name: service_v2
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: service_v2
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address: { address: service-v2, port_value: 8080 }
yaml
# envoy-config.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: "/api/v1/" }
route:
weighted_clusters:
clusters:
- name: service_v1
weight: 90
- name: service_v2
weight: 10
http_filters:
- name: envoy.filters.http.router
clusters:
- name: service_v1
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: service_v1
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address: { address: service-v1, port_value: 8080 }
- name: service_v2
type: STRICT_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: service_v2
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address: { address: service-v2, port_value: 8080 }可观测性与安全
Envoy 原生支持分布式追踪(兼容 Zipkin、Jaeger)、Prometheus 指标导出和结构化访问日志。在安全方面,支持 TLS 双向认证(mTLS)、RBAC 访问控制和限流。这些能力共同构成了生产级服务网格的基石,让 SRE 团队能够全面掌控微服务通信的质量与安全。