虚拟服务
入站流量规则
虚拟服务
VirtualService
是用于处理入站流量的规则,也就是说,它用于描述哪些入站流量适用于此路由规则。
- 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
name: demo/StandardRouter
spec:
hosts:
dubbo:
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
name | string | 应以 应用程序名称/路由器类型 的形式命名。name 属性在定义路由器类型后确定 | 是 |
hosts | string[] | 通常指应用程序名称 | 否 |
dubbo | DubboRoute[] | dubbo 路由规则,按顺序执行,满足条件立即返回 | 否 |
- 路由器类型如下
name | 描述 |
---|---|
StandardRouter | 一个完全使用标准 VirtualService 描述的路由器 |
待添加 | 待添加 |
DubboRoute
DubboRoute
是 VirtualService
中的一个属性,用于描述路由策略的边界。
- 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
name: demo/StandardRouter
spec:
hosts:
dubbo: #DubboRoute
- name:
service:
fault:
mirror:
retries:
timeout:
route details:
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
name | string | 规则的名称,便于识别规则的用途 | 否 |
services | StringMatch[] | 规则生效的服务名称列表。可以使用特定的服务名称或正则表达式 * 来匹配;如果默认情况下未配置,则表示所有服务均有效 | |
fault | dubboFaultInject[] | 故障注入(未实现) | 否 |
mirror | Destination | 镜像流量(未实现) | 否 |
retries | DubboRetry[] | 重试相关(未实现) | 否 |
timeout | DubboTimeout[] | 超时相关(未实现) | 否 |
routedetail | DubboRouteDetail[] | 具体的流量规则,按顺序执行,满足条件立即返回 | 是 |
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:
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
name | string | 规则细节的名称,便于识别规则的用途 | 否 |
match | DubboMatchRequest[] | 匹配条件 | 是 |
route | DubboRouteDestination[] | 符合条件的流量的实际目标地址 | 是 |
mirror | Destination | 镜像流量(未实现) | 否 |
retries | DubboRetry[] | 重试相关(未实现) | 否 |
timeout | DubboTimeout[] | 超时相关(未实现) | 否 |
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:
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
name | string | 匹配规则名称 | 是 |
method | DubboMethodMatch | 方法相关的匹配 | 是 |
sourceLabels | map<string, string> | 调用者类型相关的标签,包括应用程序名称、机器组、机器环境变量信息等;对于 HSF-JAVA,您可以从报告的 URL/值中获取相应的键 | 是 |
attachments | DubboAttachmentMatch | 附加到请求的其他信息,例如 HSF 请求上下文、Eagleeye 上下文等。 | 否 |
headers | map<string, StringMatch> | 常见的请求协议字段等,例如接口名称、方法名称、超时等。 | 否 |
threshold | DoubleMatch | 被调用子集列表中的机器占整个主机的阈值 | 否 |
由于 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_match | StringMatch | 匹配请求中的调用方法名称 | 是 |
argc | int | 匹配请求的参数数量 | 否 |
args | DubboMethodArg[] | 是 DubboMethodArg 类型的数组,表示每个参数值需要满足的条件 | 否 |
argp | StringMatch[] | 匹配请求参数类型 | 否 |
headers | map<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:
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
index | uint32 | 匹配参数的位置,index 字段从 1 开始(即 $index 参数) | 是 |
type | string | 匹配参数的类型,以 java 的字符串类型为例,该字段的值为 java.lang.String,该字段的默认值为 java.lang.String | 是 |
str_value | ListStringMatch | 匹配参数的值,根据 $type ListStringMatcher 解析:匹配 java.lang.String) | 否 |
num_value | ListDoubleMatch | 数值类型匹配 | 否 |
bool_value | BoolMatch | bool 值类型匹配 | 否 |
reserve | reserve | 复杂类型匹配,目前未定义 | 否 |
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:
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
eagleeyecontext | map<string, StringMatch> | eagleeye 上下文 | 否 |
dubbocontext | map<string, StringMatch> | Dubbo 请求上下文 | 否 |
ListStringMatch
ListStringMatch
是 StringMatch
集合的集合,任何 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
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
oneof | StringMatch[] | 如果任何 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
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
exact | string (oneof) | 精确匹配 | 否 |
prefix | string (oneof) | 前缀匹配 | 否 |
regex | string (oneof) | 正则表达式匹配 | 否 |
noempty | string (oneof) | 非空字符匹配 | 否 |
empty | string (oneof) | 空字符匹配 | 否 |
ListDoubleMatch
ListDoubleMatch
是 DoubleMatch
集合的集合,任何 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
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
oneof | DoubleMatch[] | 如果任何 DoubleMatch 匹配,则匹配 | 否 |
DoubleMatch
DoubleMatch
用于匹配类型为 int
、long
、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: #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
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
exact | double(oneof) | 精确值匹配 | 否 |
range | DoubleRangeMatch(oneof) | 值范围匹配 | 否 |
mode | double | 取模运算,需要与上述两种语义一起配置 | 否 |
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
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
start | double | 大于或等于的值 | 是 |
end | double | 小于的值 | 是 |
BoolMatch
BoolMatch
用于精确匹配 true
、false
- 使用示例
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
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
exact | bool(oneof) | true 、false ,精确匹配 |
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
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
type | string | 匹配参数的类型,以 java 的字符串类型为例,该字段的值为 java.lang.String,该字段的默认值为 java.lang.String | 是 |
str_value | ListStringMatch | 匹配参数的值,根据 $type ListStringMatcher 解析:匹配 java.lang.String) | 否 |
num_value | ListDoubleMatch | 否 | |
bool_value | BoolMatch | 否 |
DubboRouteDestination
DubboRouteDestination
用于描述流量到目标地址的策略
- 使用示例
apiVersion: service.dubbo.apache.org/v1alpha1
kind: VirtualService
metadata:
name: demo/StandardRouter
spec:
hosts:
dubbo:
- route detail:
- route: #DubboRouteDestination
destination:
weight: 50
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
destination | DubboDestination | 路由目标 Destination | 是 |
weight | int | 路由权重 | 否 |
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:
- 属性描述
字段 | 类型 | 描述 | 必需 |
---|---|---|---|
host | string | 注册中心中对应的 key 值,现在是接口名称 | 是 |
subset | string | 地址列表 | 是 |
port | int | 端口号 | 是 |
回退 | DubboDestination | 回退的另一个地址列表 | 否 |
上次修改时间:2023 年 1 月 2 日:增强 en 文档 (#1798) (95a9f4f6c1c)