Skip to content

[Discussion] About add a customized match-action t for RouteRuleContext in RouterRule | 关于在 RouterRule 的 RouteRuleContext 中添加自定义流量匹配执行器的参数 #30

@jnan806

Description

@jnan806

I'm not official member of community, here is my opinion.


(English version TBD...)


在 PR #29 中, 流量路由规范中通过 RouterRule 定义了多种协议的流量路由规则,每一种协议的路由规则中定义了**RequestMatch来提供给用户进行流量规则的定义。而我发现,在 HttpRequestMatchRpcRequestMatch中定义的几个内置参数,都是简单规则,都是可以通过我们手动定义的,如果遇到复杂的场景,无法提前预知参数或者无法手动定义复杂的规则的话,目前的设计就很难满足了。
因此,我提出一个想法:就是在**RouteRuleContext中,添加一个自定义匹配行为参数(暂命名为action),与match一样结果以truefalse来表示匹配成功与失败,但与match不同的是,action配置的是流量匹配执行器的工作负载。
通过这种方式,即使在opensergo中内置的流量匹配规则无法满足用户的需求的情况下,用户可自定义action并实现action对应的WorkLoad来满足自己复杂的路由规则。

  • 路由步骤:
  1. 如果存在match,则首先满足match
  2. 如果存在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 #29StringMatchvars) 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

No one assigned

    Labels

    area/traffic-routingCategory issues or PRs related to traffic routing

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions