一、蓝绿发布
- APISIX中新增加一个上游配置
- 记录新增上游的id
- 在对应service中加入
traffic-split
插件的配置如下, 其中:http_变量名
为http头里面指定的变量名,例如:http_version
新版本号
为字符串的版本号,例如:1.5.3
新增上游的ID
为指向部署了新版本代码的服务器的上游
"plugins": { "traffic-split": { "rules": [ { "match": [ { "vars": [ ["http_变量1", "==", "变量1的值"], ["http_变量2", ">", "变量2的值"], ... ] } ], "weighted_upstreams": [ { "upstream_id": "新增上游的ID" } ] } ] } }
做完上述操作,前端http请求头内变量和变量值全匹配的请求会发送到新增的上游服务器,否则发送到默认上游。
二、按权重分流
"plugins": { "traffic-split": { "rules": [ { "match": [ { "vars": [ ["http_变量1", "==", "变量1的值"], ["http_变量2", ">", "变量2的值"], ... ] } ], "weighted_upstreams": [ { "upstream_id": "指定上游的ID", "weight": 指定上游的权重 }, { "weight": 默认上游的权重 } ] } ] } }
按上述配置,所有变量值匹配的请求将会按指定的权重分流,未匹配的仍然走默认上游不分权重。
四、示例
下面示例定义了一个默认上游:upstream_A
, 如果http请求头里面有Hd-App-Id
的变量的值为abc
, 且Hd-Version
的变量值为0.0.1
则请求匹配到weighted_upstreams
中的规则,即1/(1+99)*100%=1%
的流量分配到upstream_B
, 剩下的99/(1+99)*100%=99%
流量分配到默认的upstream_A
{ "name": "prod_service_default", "upstream_id": "上游A", "plugins": { "traffic-split": { "rules": [ { "match": [ { "vars": [ [ "http_Hd-App-Id", "==", "abc"], [ "http_Hd-Version", "==", "0.0.1"] ] } ], "weighted_upstreams": [ { "upstream_id": "upstream_B", "weight": 1 }, { "weight": 99 } ] } ] } } }