-
Notifications
You must be signed in to change notification settings - Fork 73
Open
Labels
area/traffic-routingCategory issues or PRs related to traffic routingCategory issues or PRs related to traffic routing
Description
I'm not official member of community, here is my opinion.
(English version TBD...)
在 PR #29 中, 流量路由规范中通过 RouterRule 定义了多种协议的流量路由规则,每一种协议的路由规则中定义了**RequestMatch来提供给用户进行流量规则的定义。而我发现,在 HttpRequestMatch和RpcRequestMatch中定义的几个内置参数,都是简单规则,都是可以通过我们手动定义的,如果遇到复杂的场景,无法提前预知参数或者无法手动定义复杂的规则的话,目前的设计就很难满足了。
因此,我提出一个想法:就是在**RouteRuleContext中,添加一个自定义匹配行为参数(暂命名为action),与match一样结果以true或false来表示匹配成功与失败,但与match不同的是,action配置的是流量匹配执行器的工作负载。
通过这种方式,即使在opensergo中内置的流量匹配规则无法满足用户的需求的情况下,用户可自定义action并实现action对应的WorkLoad来满足自己复杂的路由规则。
- 路由步骤:
- 如果存在
match,则首先满足match - 如果存在
action,则在满足match的前提下,同时满足action
下面以http协议为例:
- HttpRouteRuleContext
| Field | Type | Description | Required |
|---|---|---|---|
| name | string | No | |
| match | HttpRequestMatch | Http流量的匹配规则 | No |
| action | HttpRequestAction | Http流量的匹配执行器 | No |
| targets | VirtualWorkload[] | 匹配到Http流量的匹配规则的目标虚拟工作负载集合 | Yes |
| modify | HttpModifyRule | 对匹配到Http流量匹配规则的流量进行修改的规则 | No |
- HttpRequestAction
| Field | Type | Description | Required |
|---|---|---|---|
| script | string (oneof) | 脚本 (同 PR #29 中StringMatch的vars) |
No |
| workload | VirtualWorkload (oneof) | 工作负载 | No |
- HttpRouteRule 流量路由规则
apiVersion: traffic.opensergo.io/v1alpha1
kind: RouterRule
metadata:
name: my-traffic-router-rule
spec:
selector:
app: provider-app
http: # http/rpc/db/redis
- name: my-traffic-router-http-rule
rule:
match:
headers:
- X-User-Id: # 参数名
exact: 12345 # 参数值
uri:
exact: "/index"
action:
workload:
workloads: my-request-rule-action
name: http-action
- target:
- workloads: tag-rule
name: my-app-gray
target:
- workloads: tag-rule
name: my-app-base
- HttpRouteRuleContext 中 action 的 VirtualWorkload 工作负载
apiVersion: traffic.opensergo.io/v1alpha1
kind: VirtualWorkloads
metadata:
name: my-request-rule-action
spec:
selector:
app: rule-action
virtualWorkload:
- name: http-action
target: http-action-container
type: deployment
selector:
tag: http-action
loadbalance: random
- name: rpc-action
target: rpc-action-container
type: deployment
selector:
tag: rpc-action
loadbalance: random
Metadata
Metadata
Assignees
Labels
area/traffic-routingCategory issues or PRs related to traffic routingCategory issues or PRs related to traffic routing