API7 网关 AI Agent Skill:traffic-split 插件
概览
traffic-split 插件会根据自定义规则(match)和加权分配(weighted_upstreams),将部分流量动态转发到不同的上游服务。它适用于灰度发布、蓝绿发布和 A/B 测试,且无需修改 DNS 或负载均衡器配置。
适用场景
- 灰度发布:逐步将流量切换到新版本(10% → 50% → 100%)。
- 蓝绿发布:根据请求头或 Cookie 切换流量。
- A/B 测试:根据用户属性(请求头、查询参数或 Cookie)拆分流量。
- 功能开关:将特定用户路由到功能分支。
- 多版本 API:同时运行多个后端版本。
插件配置参考(路由/服务)
顶层配置
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
rules | array[object] | 是 | — | 流量拆分规则列表。每条规则都可以包含可选的 match,并且必须包含 weighted_upstreams。 |
rules[].match
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
match | array[object] | 否 | [] | 激活此规则的条件。为空表示无条件匹配(所有流量都按权重分配)。 |
match[].vars | array[array] | 否 | — | 变量表达式:["variable", "operator", "value"]。使用 NGINX 变量。同一对象中的多个变量表示 AND,match 中的多个对象表示 OR。 |
运算符:==、~=、>、<、>=、<=、~~(正则匹配)、!~~、in、has、!。详见 lua-resty-expr。
常用变量:arg_name(查询参数)、http_header-name(请求头)、cookie_name(Cookie 值)。
rules[].weighted_upstreams[]
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
upstream | object | 否 | — | 内联上游配置(见下文)。 |
weight | integer | 否 | 1 | 此上游的流量权重。 |
如果只设置 weight(没有内联 upstream),流量将转发到路由所关联服务的上游。
内联上游对象
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
type | string | 否 | "roundrobin" | 负载均衡类型:"roundrobin" 或 "chash"。 |
nodes | array | 是 | — | 后端节点,格式为 [{host, port, weight}]。 |
timeout | object | 否 | 15(秒) | {"connect": N, "send": N, "read": N} |
pass_host | string | 否 | "pass" | "pass" 表示客户端 Host,"node" 表示上游节点,"rewrite" 表示使用 upstream_host。 |
upstream_host | string | 否 | — | 自定义 Host 请求头。仅在 pass_host: "rewrite" 时生效。 |
name | string | 否 | — | 上游的可读名称。 |
内联加权上游不支持:service_name、discovery_type、checks、retries 和 retry_timeout。如有可能,请将共享上游行为保留在关联的服务中。