2、核心概念:什么是云原生网关(Kong/APISIX/Envoy),路由表(Route Table)的定义与组成

在开始跨环境迁移演练之前,必须统一团队对两个核心概念的理解:云原生网关与路由表。本章将明确它们的定义、主流实现差异以及路由表的内在结构,为后续的路由对账提供精确的术语基础。

2.1 云原生网关:从流量代理到控制面数据面分离

传统网关(如 Nginx、HAProxy)通常采用静态配置 + 重载生效的模式,配置变更需要重启进程或发送 SIGHUP 信号。云原生网关则基于 控制面(Control Plane)与数据面(Data Plane)分离 的架构,支持动态路由更新、服务发现集成、插件热加载,并天然适配容器化与 Kubernetes 环境。

当前生产环境最主流的三个云原生网关实现如下:

特性 Kong Apache APISIX Envoy
数据面核心 OpenResty (Nginx + Lua) OpenResty (Nginx + Lua) C++ 自研 (Envoy Proxy)
控制面 Kong Manager / Kong Admin API APISIX Admin API / Dashboard 通常搭配 xDS (Istio/Consul/自定义)
配置热更新 增量更新(DB 轮询或事件) 增量更新(etcd watch) 全量/增量 xDS 推送
路由匹配引擎 Lua 正则 + 优先级 Radix Tree + 优先级 前缀树 / 正则 / 自定义
插件生态 Lua 插件(社区 + 商业) Lua / Wasm / Java / Go 插件 C++ / Lua / Wasm 插件
K8s 集成 Kong Ingress Controller APISIX Ingress Controller Envoy Gateway / Istio
迁移视角提示: 路由表对账的核心难点不在于网关选型,而在于不同网关对“路由”的抽象层级不同。Kong 的 Route 与 Service 分离,APISIX 的 Route 直接绑定 Upstream,Envoy 的 RouteConfiguration 嵌套在 Listener 之下。对账时必须理解这些抽象差异,否则会出现“路由存在但流量不通”的隐蔽问题。

2.2 路由表(Route Table)的定义

在云原生网关语境下,路由表 是一组 匹配规则 + 后端目标 的有序集合。网关收到请求后,按照路由表的优先级顺序逐条匹配,命中后执行对应的转发、过滤或改造动作。

一个完整的路由条目通常包含以下四个组成部分:

  1. 匹配条件(Match Criteria):定义请求必须满足的特征,包括域名(Host)、路径(Path)、HTTP 方法(Method)、请求头(Header)、查询参数(Query Param)等。
  2. 优先级(Priority / Weight):当多条路由匹配同一请求时,优先级决定最终生效的路由。不同网关的实现方式不同(整数排序 / 最长前缀优先 / 显式权重)。
  3. 后端目标(Backend Target):路由命中后流量应发往的目标,通常表示为 Upstream 名称、Service 名称或直接的目标 IP:Port 列表。
  4. 插件/策略(Plugin / Policy):附加在路由上的中间件逻辑,如限流、鉴权、重写、日志、熔断等。
路由表 ≠ 转发规则表: 在跨环境迁移中,路由表对账不仅要对比“匹配条件”和“后端目标”,还必须对比“插件配置”和“优先级顺序”。两个环境的路由条目数量一致但插件参数不同,同样属于路由表不一致。

2.3 路由表的组成结构(以 Kong 为例)

为了更直观地理解路由表的层级关系,下面以 Kong 的 Route → Service → Upstream 三级模型展示其组成:

Kong 路由表组成结构(Route → Service → Upstream) Route(路由) - hosts: api.example.com - paths: /v1/orders - methods: GET, POST Service(服务) - name: order-service - protocol: http - host: order-svc.internal Upstream(上游) - name: order-upstream - targets: 10.0.1.10:8080 - healthchecks: active 插件(Plugin) - rate-limiting: 100/min - jwt-auth: enabled 对账关键点: 1. Route 的匹配条件(hosts/paths/methods)必须完全一致 2. Route → Service 的绑定关系不能错位 3. 插件列表及参数必须逐条对比,包括启用/禁用状态

2.4 路由表在 APISIX 与 Envoy 中的差异

虽然核心概念一致,但不同网关对路由表的抽象层级和字段命名存在差异。下表列出三个网关在路由表关键字段上的对应关系:

逻辑概念 Kong APISIX Envoy (xDS)
路由条目 Route Route VirtualHost → Route
域名匹配 hosts (数组) host (字符串) domains (VirtualHost 级别)
路径匹配 paths (数组) uri (支持精确/前缀/正则) match.path (前缀/精确/正则)
方法匹配 methods (数组) methods (数组) match.headers (:method)
后端目标 service.id (引用) upstream_id (引用) 或 plugins.proxy-rewrite route.cluster_name
优先级 regex_priority (自动) + strip_path priority (整数,越大越优先) VirtualHost 顺序 + 路由顺序
插件挂载 Route 级别 / Service 级别 / Global Route 级别 / Service 级别 / Global HttpFilter (Listener 级别 / Route 级别)
迁移陷阱: APISIX 的 host 字段是单值字符串,而 Kong 的 hosts 是数组。当从 Kong 迁移到 APISIX 时,一条 Kong Route 如果配置了多个域名,必须拆成多条 APISIX Route。Envoy 的域名匹配在 VirtualHost 级别,一个 VirtualHost 可以包含多个域名,但路由条目本身不直接携带域名信息。这些差异会导致对账脚本的匹配逻辑完全不同。

2.5 路由表对账的原子单位

基于上述分析,我们可以定义路由表对账的 原子单位:

  • 源环境路由条目:从源网关(如 Kong)Admin API 导出的完整 Route 对象,包含所有匹配条件、后端引用、插件列表。
  • 目标环境路由条目:从目标网关(如 APISIX)Admin API 导出的完整 Route 对象,包含所有匹配条件、后端引用、插件列表。
  • 对账键(Reconciliation Key):用于唯一标识一条路由的复合键,通常由 域名 + 路径 + 方法 三元组构成。当网关不支持多域名时,需拆分为多条记录。
  • 对账维度:包括匹配条件一致性、后端目标一致性、插件配置一致性、优先级一致性四个维度。
路由表对账原子单位与对账维度 源环境路由条目 Kong Route (JSON) hosts: [a.com, b.com] paths: [/api/*] 对账引擎 对账键: host + path + method 维度1: 匹配条件 维度2: 后端目标 目标环境路由条目 APISIX Route (JSON) host: a.com uri: /api/* 对账输出示例: - 匹配条件一致:通过 - 后端目标一致:失败(源: order-svc:8080,目标: order-svc:9090)→ 需人工确认端口变更是否预期