服务路由

服务路由 #

极限网关通过路由来判断流量的去向,一个典型的路由配置示例如下:

router:
  - name: my_router
    default_flow: default_flow
    tracing_flow: request_logging
    rules:
      - method:
          - PUT
          - POST
        pattern:
          - "/_bulk"
          - "/{index_name}/_bulk"
        flow:
          - bulk_process_flow

路由有几个非常重要的概念:

  • flow:请求的处理流程,一个路由里面有三个地方定义 flow
  • default_flow: 默认的处理流,也就是业务处理的主流程,请求转发、过滤、缓存等操作都在这里面进行
  • tracing_flow:用于追踪请求状态的流,不受 default_flow 的影响,用于记录请求日志、统计等
  • rules:根据匹配规则将请求分发到特定的处理流中去,支持请求的 Method、Path 的正则匹配

参数说明 #

名称类型说明
namestring路由名称
default_flowstring默认的请求的处理流程名称
tracing_flowstring用于追踪请求的处理流程名称
rulesarray路由规则列表,按照数组的先后顺序依次应用
rules.methodstring请求的 Method 类型,支持 GETHEADPOSTPUTPATCHDELETECONNECTOPTIONSTRACE* 表示任意类型
rules.patternstring请求的 URL Path 匹配规则,支持通配符,不允许有重叠匹配
rules.flowstring规则匹配之后执行的处理流程,支持多个 flow 组合,依次顺序执行
permitted_client_ip_liststring array指定一组允许访客 IP 的白名单
denied_client_ip_liststring array指定一组拒绝访客 IP 的黑名单

Pattern 语法 #

语法说明示例
{变量名}带名称的变量/{name}
{变量名:regexp}通过正则来限制变量的匹配规则/{name:[a-zA-Z]}
{变量名:*}匹配之后的任意路径,只允许应用在 Pattern 末尾/{any:*}

更多示例:

Pattern: /user/{user}

 /user/gordon                     match
 /user/you                        match
 /user/gordon/profile             no match
 /user/                           no match

Pattern with suffix: /user/{user}_admin

 /user/gordon_admin               match
 /user/you_admin                  match
 /user/you                        no match
 /user/gordon/profile             no match
 /user/gordon_admin/profile       no match
 /user/                           no match
 
 
Pattern: /src/{filepath:*}

 /src/                     match
 /src/somefile.go          match
 /src/subdir/somefile.go   match

其他注意事项:

  • Pattern 必须是 / 开头
  • 任意匹配只能作为最后的一个规则

IP 访问控制 #

如果希望对访问网关服务的来源 IP 进行访问控制,可以通过 ip_access_control 配置节点来进行管理。

router:
  - name: my_router
    default_flow: async_bulk
    ip_access_control:
      enabled: true

白名单 #

如果只希望某些特定指定 IP 的访客才能访问网关服务,可以在路由里面配置来实现访问准入,该请求会在链接建立的过程中直接拒绝。 如下例子,133.37.55.22 会被允许网关的服务访问,其余的 IP 都会拒绝。

router:
  - name: my_router
    default_flow: async_bulk
    ip_access_control:
      enabled: true
      client_ip:
        permitted:
         - 133.37.55.22

黑名单 #

如果希望拒绝某些特定指定 IP 的访客来访问网关服务,可以在路由里面配置来实现访问拒绝,该请求会在链接建立的过程中直接拒绝。 如下例子,133.37.55.22 就会被阻止网关的服务访问。

router:
  - name: my_router
    default_flow: async_bulk
    ip_access_control:
      enabled: true
      client_ip:
        denied:
         - 133.37.55.22