虚拟服务

入站流量规则

虚拟服务

VirtualService 是用于处理入站流量的规则,也就是说,它用于描述哪些入站流量适用于此路由规则。

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  • 属性描述
字段类型描述必需
namestring应以 应用程序名称/路由器类型 的形式命名。name 属性在定义路由器类型后确定
hostsstring[]通常指应用程序名称
dubboDubboRoute[]dubbo 路由规则,按顺序执行,满足条件立即返回
  • 路由器类型如下
name描述
StandardRouter一个完全使用标准 VirtualService 描述的路由器
待添加待添加

DubboRoute

DubboRouteVirtualService 中的一个属性,用于描述路由策略的边界。

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo: #DubboRoute
  - name:
    service:
    fault:
    mirror:
    retries:
    timeout:
    route details:
  • 属性描述
字段类型描述必需
namestring规则的名称,便于识别规则的用途
servicesStringMatch[]规则生效的服务名称列表。可以使用特定的服务名称或正则表达式 * 来匹配;如果默认情况下未配置,则表示所有服务均有效
faultdubboFaultInject[]故障注入(未实现)
mirrorDestination镜像流量(未实现)
retriesDubboRetry[]重试相关(未实现)
timeoutDubboTimeout[]超时相关(未实现)
routedetailDubboRouteDetail[]具体的流量规则,按顺序执行,满足条件立即返回

DubboRouteDetail

DubboRouteDetail 用于描述详细的路由规则

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - routedetail: #DubboRouteDetail
    - name:
      match:
      route:
      mirror:
      retries:
      timeout:
  • 属性描述
字段类型描述必需
namestring规则细节的名称,便于识别规则的用途
matchDubboMatchRequest[]匹配条件
routeDubboRouteDestination[]符合条件的流量的实际目标地址
mirrorDestination镜像流量(未实现)
retriesDubboRetry[]重试相关(未实现)
timeoutDubboTimeout[]超时相关(未实现)

DubboMatchRequest

DubboMatchRequest 用于描述请求的匹配规则

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - route detail:
    - match: #DubboMatchRequest
      - name:
        method:
        sourceLabels:
        attachments:
        headers:
        threshold:
  • 属性描述
字段类型描述必需
namestring匹配规则名称
methodDubboMethodMatch方法相关的匹配
sourceLabelsmap<string, string>调用者类型相关的标签,包括应用程序名称、机器组、机器环境变量信息等;对于 HSF-JAVA,您可以从报告的 URL/值中获取相应的键
attachmentsDubboAttachmentMatch附加到请求的其他信息,例如 HSF 请求上下文、Eagleeye 上下文等。
headersmap<string, StringMatch>常见的请求协议字段等,例如接口名称、方法名称、超时等。
thresholdDoubleMatch被调用子集列表中的机器占整个主机的阈值

由于 headers、attachmes 和 methods 之间可能存在字段重复,TODO 进一步细化

DubboMethodMatch

DubboMethodMatch 用于实现方法匹配

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - route detail:
    - match:
      - method: #DubboMethodRequest
        - name_match:
          argc:
          args:
          argp:
          headers:
  • 属性描述
字段类型描述必需
name_matchStringMatch匹配请求中的调用方法名称
argcint匹配请求的参数数量
argsDubboMethodArg[]是 DubboMethodArg 类型的数组,表示每个参数值需要满足的条件
argpStringMatch[]匹配请求参数类型
headersmap<string, StringMatch>reserved

DubboMethodArg

DubboMethodArg 用于匹配方法参数

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - route detail:
    - match:
      -method:
        - args: #DubboMethodArg
          - index:
            str_value:
            type:
            num_value:
            bool_value:
            reserve:
  • 属性描述
字段类型描述必需
indexuint32匹配参数的位置,index 字段从 1 开始(即 $index 参数)
typestring匹配参数的类型,以 java 的字符串类型为例,该字段的值为 java.lang.String,该字段的默认值为 java.lang.String
str_valueListStringMatch匹配参数的值,根据 $type ListStringMatcher 解析:匹配 java.lang.String)
num_valueListDoubleMatch数值类型匹配
bool_valueBoolMatchbool 值类型匹配
reservereserve复杂类型匹配,目前未定义

DubboAttachmentMatch

DubboAttachmentMatch 用于完全匹配任何对象

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - route detail:
    - match:
      - attachments: #DubboAttachmentMatch
          eagleeyecontext:
          dubbo context:
  • 属性描述
字段类型描述必需
eagleeyecontextmap<string, StringMatch>eagleeye 上下文
dubbocontextmap<string, StringMatch>Dubbo 请求上下文

ListStringMatch

ListStringMatchStringMatch 集合的集合,任何 StringMatch 匹配

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - route detail:
    - match:
      -method:
        - args:
          - index: 1
            str_value: #ListStringMatch
              oneof:
              - regex: "*abc*"
              - exact: parameter-1
  • 属性描述
字段类型描述必需
oneofStringMatch[]如果任何 StringMatch 匹配,则匹配

StringMatch

StringMatch 用于描述字符串匹配规则

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - service: #StringMatch
    - exact: org.apache.dubbo.demoService:1.0.0
    - prefix: org.apache.dubbo.hello
    - regex: org.apache.dubbo.*Service:2.0.0
  • 属性描述
字段类型描述必需
exactstring (oneof)精确匹配
prefixstring (oneof)前缀匹配
regexstring (oneof)正则表达式匹配
noemptystring (oneof)非空字符匹配
emptystring (oneof)空字符匹配

ListDoubleMatch

ListDoubleMatchDoubleMatch 集合的集合,任何 DoubleMatch 匹配都匹配参数

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - route detail:
    - match:
      -method:
        - args:
          - index: 1
            type: java.lang.Double
            num_value: #ListDoubleMatch
              oneof:
              - range:
                  start: 1
                  end: 100
                  
  • 属性描述
字段类型描述必需
oneofDoubleMatch[]如果任何 DoubleMatch 匹配,则匹配

DoubleMatch

DoubleMatch 用于匹配类型为 intlongdouble 的值

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - route detail:
    - match:
      -method:
        - args:
          - index: 1
            type: java.lang.Double
            num_value:
              oneof: #DoubleMatch[]
              - range:
                  start: 1
                  end: 100
              #Assume that the parameter value of the currently input Double type is x,
              #The meaning of the following expression is: x%mode=exact,
              #That is, it matches only when x%10=6
              - exact: 6
                mode: 10
                  
  • 属性描述
字段类型描述必需
exactdouble(oneof)精确值匹配
rangeDoubleRangeMatch(oneof)值范围匹配
modedouble取模运算,需要与上述两种语义一起配置

DoubleRangeMatch

DoubleRangeMatch 用于匹配 double 值的范围

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - route detail:
    - match:
      -method:
        - args:
          - index: 1
            type: java.lang.Double
            num_value:
              oneof:
              - range: #DoubleRangeMatch
                  start: 1.2
                  end: 1000.5
                  
  • 属性描述
字段类型描述必需
startdouble大于或等于的值
enddouble小于的值

BoolMatch

BoolMatch 用于精确匹配 truefalse

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - route detail:
    - match:
      -method:
        - args:
          - index: 1
            type: java.lang.Boolean
            bool_value: #BoolMatch
              - exact: true
  • 属性描述
字段类型描述必需
exactbool(oneof)truefalse,精确匹配

ObjectMatch (未实现)

ObjectMatch 用于对任何对象进行精确匹配

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - route detail:
    - match:
      -method:
        - args:
          - index: 1
            type: java.lang.String
            str_value:
              oneof:
              - regex: "*abc*"
              - exact: parameter-1
  • 属性描述
字段类型描述必需
typestring匹配参数的类型,以 java 的字符串类型为例,该字段的值为 java.lang.String,该字段的默认值为 java.lang.String
str_valueListStringMatch匹配参数的值,根据 $type ListStringMatcher 解析:匹配 java.lang.String)
num_valueListDoubleMatch
bool_valueBoolMatch

DubboRouteDestination

DubboRouteDestination 用于描述流量到目标地址的策略

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - route detail:
    - route: #DubboRouteDestination
        destination:
        weight: 50
  • 属性描述
字段类型描述必需
destinationDubboDestination路由目标 Destination
weightint路由权重

DubboDestination

DubboDestination 用于描述路由流量的目标地址

  • 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
  name: demo/StandardRouter
spec:
  hosts:
  dubbo:
  - route detail:
    - route: #DubboRouteDestination
        destination:
          host:
          subnet:
          port:
          fallback:
  • 属性描述
字段类型描述必需
hoststring注册中心中对应的 key 值,现在是接口名称
subsetstring地址列表
portint端口号
回退DubboDestination回退的另一个地址列表

上次修改时间:2023 年 1 月 2 日:增强 en 文档 (#1798) (95a9f4f6c1c)