Envoy 是一种开源边缘和服务代理,专为云原生应用程序设计。它在现代微服务架构中被广泛使用,因为它提供了灵活的网络功能,包括动态服务发现、负载均衡、TLS终止、HTTP/2和gRPC代理、健康检查、故障注入以及丰富的度量收集。以下是关于 Envoy 的更多详细信息:
使用场景
- 服务网格:在服务网格中,Envoy 常用作每个服务的边车代理,提供网络通信控制和观测功能。
- API网关:Envoy 可以作为入口网关管理入站流量,提供路由、鉴权和安全功能。
- 边缘代理:用于边缘服务,如处理外部流量和提供缓存功能。
使用技巧
- 配置管理:使用动态服务发现(例如与 Consul 集成)自动化服务注册和发现。
- 流量管理:利用 Envoy 的路由规则和负载均衡策略来控制流量分配。
- 观测性:集成 Prometheus 或其他监控工具收集和观察度量指标。
- 故障注入:用于测试的故障注入能力,以增强服务的弹性。
使用案例
基于 Envoy 的服务网格
- 场景描述:在微服务架构中,使用 Envoy 作为每个服务的边车代理,以实现服务间的安全、可靠通信。
- 示例代码:部署一个简单的服务网格配置,其中包括服务A和服务B,以及它们的 Envoy 代理。
# Envoy 配置示例
admin:
access_log_path: /tmp/admin_access.log
address:
socket_address:
address: 0.0.0.0
port_value: 9901
static_resources:
listeners:
- name: listener_0
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/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
codec_type: AUTO
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: backend
domains:
- "*"
routes:
- match:
prefix: "/"
route:
cluster: service_a
clusters:
- name: service_a
connect_timeout: 0.25s
type: LOGICAL_DNS
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: service_a
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: service_a
port_value: 80
- 解释:此配置为 Envoy 启动一个 HTTP 监听器,将所有入站流量路由到名为
service_a
的服务。
API 网关
- 场景描述:使用 Envoy 作为入口网关管理对外部 API 的访问,包括路由、鉴权和限流。
- 示例代码:配置 Envoy 作为 API 网关,代理外部请求到后端服务。
# Envoy API 网关配置示例
admin:
access_log_path: /tmp/admin_access.log
address:
socket_address:
address: 0.0.0.0
port_value: 9901
static_resources:
listeners:
# 监听器配置 ...
clusters:
# 后端服务集群配置 ...
http_filters:
- name: envoy.filters.http.jwt_authn
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.jwt_auth
n.v3.JwtAuthentication
providers:
provider1:
issuer: "https://example.com"
audiences:
- "api"
forward: true
remote_jwks:
http_uri:
uri: "https://example.com/.well-known/jwks.json"
cluster: jwks_cluster
cache_duration:
seconds: 300
- 解释:此配置示例展示了如何通过 JWT 鉴权集成,为 API 请求添加安全验证。
通过这些案例和技巧,可以看到 Envoy 如何灵活地应用于不同的网络和服务场景中,从而提升微服务架构的可靠性和可管理性。