3. Envoy 流量管理核心:路由匹配规则、虚拟主机、权重路由、流量镜像与影子流量
在集群升级与节点池巡检场景中,Envoy 作为南北向与东西向流量网关,其流量管理能力直接决定了迁移过程的平滑度与可观测性。本章深入解析 Envoy 流量管理的五大核心概念:路由匹配规则、虚拟主机、权重路由、流量镜像与影子流量,并结合节点池巡检的典型场景进行配置说明。
3.1 路由匹配规则:流量入口的精准分类
Envoy 的路由匹配发生在 HttpConnectionManager 的 RouteConfiguration 层。匹配规则决定了请求如何被分发到后端集群。在节点池巡检场景中,我们通常需要根据 Header、Path、Query Parameter 或 Source IP 来区分流量属于哪个节点池。
关键匹配字段:
- prefix:路径前缀匹配,如
/v1/。 - path:精确路径匹配,如
/healthz。 - safe_regex:正则匹配,用于复杂路径模式。
- headers:基于 HTTP Header 的匹配,支持精确、正则、范围等。
- query_parameters:基于查询参数的匹配。
# 示例:基于 Header 匹配节点池巡检流量
routes:
- match:
prefix: "/probe"
headers:
- name: "x-node-pool"
string_match:
exact: "pool-01"
route:
cluster: "pool-01-backend"
3.2 虚拟主机:多租户与多域名的逻辑隔离
虚拟主机(VirtualHost)是 Envoy 中一组路由规则的逻辑容器,通常对应一个域名或一组域名。在集群升级场景中,我们可以为不同的节点池或不同的升级阶段创建独立的虚拟主机,实现流量的逻辑隔离。
| 虚拟主机属性 | 说明 | 巡检场景应用 |
|---|---|---|
domains |
匹配的域名列表 | 如 pool-01.cluster.local |
routes |
路由规则列表 | 定义该节点池的流量转发策略 |
require_tls |
TLS 要求 | 巡检流量可跳过 TLS 以降低延迟 |
virtual_clusters |
虚拟集群统计 | 用于监控各节点池的请求量 |
# 虚拟主机配置示例
virtual_hosts:
- name: "pool-01-vhost"
domains: ["pool-01.cluster.local"]
routes:
- match:
prefix: "/"
route:
cluster: "pool-01-backend"
3.3 权重路由:灰度迁移与流量比例控制
权重路由(Weighted Cluster)是 Envoy 实现灰度发布和流量迁移的核心机制。在节点池巡检中,我们通过调整权重比例,逐步将流量从旧节点池迁移到新节点池,实现零中断升级。
最佳实践:在集群升级初期,建议将新节点池的权重设置为 5%-10%,观察指标稳定后再逐步增加。每次调整后应至少观察 1-2 个巡检周期。
# 权重路由配置:逐步迁移流量
routes:
- match:
prefix: "/"
route:
weighted_clusters:
clusters:
- name: "old-pool-backend"
weight: 70
- name: "new-pool-backend"
weight: 30
total_weight: 100
3.4 流量镜像与影子流量:无风险验证
流量镜像(Traffic Mirroring)允许将实时请求复制一份发送到影子集群,而原始请求的响应不受影响。影子流量(Shadow Traffic)则是一种特殊的镜像模式,通常用于测试新版本服务的兼容性与性能。
注意:镜像流量会加倍后端负载。在节点池巡检场景中,建议仅镜像
GET 请求或只读接口,避免写操作导致数据不一致。
# 流量镜像配置:将 50% 的请求镜像到影子集群
routes:
- match:
prefix: "/api"
route:
cluster: "production-backend"
request_mirror_policies:
- cluster: "shadow-backend"
runtime_fraction:
default_value:
numerator: 50
denominator: 100
3.5 节点池巡检中的综合配置策略
在集群升级治理中,上述四个核心概念需要组合使用。以下是一个典型的节点池巡检流量配置策略:
- 虚拟主机隔离:为每个节点池创建独立的虚拟主机,如
pool-01.cluster.local、pool-02.cluster.local。 - 路由匹配:在虚拟主机内定义路由规则,根据
x-node-poolHeader 或路径前缀匹配流量。 - 权重路由:在升级过程中,逐步调整新旧节点池的权重比例,实现平滑迁移。
- 流量镜像:在迁移前,将部分生产流量镜像到新节点池的影子集群,验证服务稳定性。
巡检场景配置示例:
# 节点池巡检流量管理完整配置
static_resources:
listeners:
- name: "node-pool-listener"
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: "node_pool"
route_config:
name: "node-pool-routes"
virtual_hosts:
- name: "pool-01-vhost"
domains: ["pool-01.cluster.local"]
routes:
- match:
prefix: "/probe"
route:
weighted_clusters:
clusters:
- name: "pool-01-old"
weight: 80
- name: "pool-01-new"
weight: 20
total_weight: 100
request_mirror_policies:
- cluster: "pool-01-shadow"
runtime_fraction:
default_value:
numerator: 10
denominator: 100
3.6 关键指标与监控
在实施流量管理策略时,需要关注以下关键指标,以确保迁移过程健康可控:
| 指标名称 | Prometheus 查询 | 告警阈值 |
|---|---|---|
| 请求成功率 | envoy_cluster_upstream_rq_completed{...} |
< 99.9% |
| P99 延迟 | envoy_cluster_upstream_rq_time{...} |
> 500ms |
| 镜像流量比例 | envoy_cluster_mirror_rq{...} |
偏离配置值 > 5% |
| 权重偏差 | envoy_cluster_weight{...} |
与配置值不一致 |
巡检建议:在节点池巡检过程中,建议每 30 秒采集一次上述指标,并配合 Grafana 仪表盘实时观察。当发现成功率下降或延迟飙升时,应立即暂停权重调整并回滚到上一稳定状态。