一、蓝绿发布
- 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
}
]
}
]
}
}
}