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
Envoy 流量管理核心架构 客户端请求 虚拟主机 (VirtualHost) 域名匹配 · 逻辑隔离 · 多租户 路由匹配规则 Prefix / Path / Regex / Header / Query 权重路由 (Weighted Cluster) 灰度迁移 · 比例控制 旧池 70% → 新池 30% 流量镜像 / 影子流量 无风险验证 · 请求复制 生产集群 + 影子集群 生产后端集群 影子后端集群 响应 丢弃

3.5 节点池巡检中的综合配置策略

在集群升级治理中,上述四个核心概念需要组合使用。以下是一个典型的节点池巡检流量配置策略:

  1. 虚拟主机隔离:为每个节点池创建独立的虚拟主机,如 pool-01.cluster.local、pool-02.cluster.local。
  2. 路由匹配:在虚拟主机内定义路由规则,根据 x-node-pool Header 或路径前缀匹配流量。
  3. 权重路由:在升级过程中,逐步调整新旧节点池的权重比例,实现平滑迁移。
  4. 流量镜像:在迁移前,将部分生产流量镜像到新节点池的影子集群,验证服务稳定性。
巡检场景配置示例:
# 节点池巡检流量管理完整配置
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 仪表盘实时观察。当发现成功率下降或延迟飙升时,应立即暂停权重调整并回滚到上一稳定状态。