Envoy 中的 Route 是用来定义如何将入站 HTTP 请求转发到后端服务的关键配置。Envoy 的路由配置提供了高度灵活的路由决策和流量管理功能,使得开发者可以精确地控制请求流向及其处理方式。本文将详细介绍 Envoy 中的路由配置概念和其功能。
路由配置的作用
在 Envoy 中,路由配置负责将来自客户端的请求映射到上游服务。这包括定义请求应当如何被处理、是否应当被重写或重定向、以及应当被发送到哪个具体的上游集群。路由配置通常与 HTTP 连接管理器 过滤器一起使用,后者是处理 HTTP 流量的主要网络过滤器。
主要特性
Envoy 路由配置的主要特性包括:
- 请求匹配:路由规则可以根据请求的属性如 HTTP 头部、URL 路径、查询参数等进行匹配。
- 路由动作:一旦请求与某个路由规则匹配,可以进行多种动作,例如路由到特定的上游集群、重定向到另一个 URL、直接响应等。
- 重写规则:允许在转发请求前修改请求的 URI、主机名或其他头部信息。
- 超时与重试策略:对于每条路由规则,可以定义特定的超时和重试策略,以增强服务的健壮性。
- 请求分流与加权路由:支持根据一定的比例将流量分配到不同的服务,或者根据权重分配流量到多个集群。
配置示例
以下是一个简单的 Envoy 路由配置示例,其中定义了一个基本的路由规则,该规则将所有根路径(/
)的 GET 请求路由到名为 service_cluster
的上游集群:
static_resources:
listeners:
- name: listener_0
address:
socket_address: { address: 0.0.0.0, port_value: 80 }
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
codec_type: AUTO
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match: { prefix: "/", methods: ["GET"] }
route: { cluster: service_cluster }
http_filters:
- name: envoy.filters.http.router
高级路由功能
除了基础的匹配和路由功能之外,Envoy 还提供了高级的路由功能,包括:
- Header-to-Header 路由:允许基于请求头部中的特定键值对进行路由决策。
- gRPC 路由:对 gRPC 交通进行支持,包括基于服务名和方法名的路由。
- 环境敏感路由:支持基于运行时环境参数(如不同环境或配置标志)动态调整路由决策。