Apache Dubbo是一款RPC框架,用于实现微服务架构;Dubbo2.X版本通信层基于私有协议实现,Dubbo3的底层通信协议已经升级为HTTP/2,利用服务网格原生的HTTP治理能力就可以实现对Dubbo3服务的治理。服务网格针对使用Dubbo2的场景提供了CRD的形式实现服务治理能力,本文主要介绍服务网格对Dubbo2服务的治理和配置说明。
注意本功能仅针对Dubbo2.X版本,如果要对Dubbo3做服务治理,基于服务网格原生DestinatinRule、VirtualService就可以实现。
操作
进入服务网格控制台 -> 流量管理中心 -> Dubbo协议治理 菜单下,可以创建、查看、修改、删除DubboProxyRule规则。
配置示例
服务网格提供了CRD的配置方式实现对Dubbo2服务的治理配置。如下示例
给匹配标签app=dubbo-samples-apiserver-consumerdubbo的Dubbo服务消费者下发访问Dubbo服务治理规则,匹配规则为:
- 请求Dubbo接口名不限,版本号为1.0.0
- Dubbo方法为sayHello
- 参数0的范围在10086和11000之间
- 请求路由到dubbo-samples-apiserver-provider.dubbo-demo.svc.cluster.local的v1和v2版本,权重比例为20/80(目标服务的版本通过DestinationRule定义)
apiVersion: istio.ctyun.cn/v1beta1
kind: DubboProxyRule
metadata:
name: test-method-params-exact
spec:
workloadSelector:
labels:
app: dubbo-samples-apiserver-consumer
port: 20880
configs:
- name: dubbo_router_test_method_params_exact
interface: '*'
version: 1.0.0
routes:
- match:
method:
name:
exact: sayHello
params_match:
'0':
range_match:
start: 10086
end: 11000
route:
destination:
- host: dubbo-samples-apiserver-provider.dubbo-demo.svc.cluster.local
subset: v1
weight: 20
- host: dubbo-samples-apiserver-provider.dubbo-demo.svc.cluster.local
subset: v2
weight: 80
CRD说明
DubboProxyRuleSpec
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
WorkloadSelector | map[string]string | N | 使用标签选择器匹配要下发到的目标工作负载 |
Port | RouteMatch | Y | 目标Dubbo服务的端口 |
DubboProxyMultiRouteConfigs | []*DubboProxyMultiRouteConfig | N | 一组Dubbo协议治理规则 |
DubboProxyMultiRouteConfig
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
Name | string | N | 治理规则名称 |
Interface | string | Y | Dubbo接口名称 |
Group | string | N | 接口所属的分组名称 |
Version | string | N | 接口版本号 |
Routes | []*DubboProxyRouteConfig | N | 一组Dubbo协议路由规则 |
DubboProxyRouteConfig
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
Match | DubboProxyRouteMatcher | Y | 路由匹配规则 |
Route | DubboRouteAction | Y | 路由目标定义 |
DubboProxyRouteMatcher
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
Method | DubboMethodMatcher | Y | Dubbo请求方法匹配规则 |
Headers | []*DubboHeaderMatcher | Y | Dubbo请求头部匹配规则 |
DubboMethodMatcher
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
Name | StringMatcher | N | 请求方法名称匹配规则 |
ParamsMatch | map[uint32]*ParameterMatchSpecifier | N | 请求参数匹配,key为参数位置索引,从0开始 |
StringMatcher
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
Exact | string | N | 精确匹配 |
Prefix | string | N | 前缀匹配 |
Suffix | string | N | 后缀匹配 |
SafeRegex | RegexMatcher | N | 正则匹配 |
Contains | string | N | 包含匹配 |
IgnoreCase | bool | N | 是否忽略大小写 |
RegexMatcher
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
Regex | string | Y | 正则表达式 |
ParameterMatchSpecifier
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
ExactMatch | string | N | 精确匹配参数值 |
RangeMatch | Int64Range | N | 匹配范围,参数必须是数字,匹配区间为左闭右开 |
Int64Range
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
Start | int64 | Y | 范围下限,闭区间 |
End | int64 | Y | 范围上限,开区间 |
DubboHeaderMatcher
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
Name | string | Y | 匹配的头部名称 |
SafeRegexMatch | string | N | 全匹配正则规则 |
RangeMatch | Int64Range | N | 范围匹配 |
PresentMatch | bool | N | 存在匹配 |
InvertMatch | bool | N | 反向匹配,和其他匹配条件配合使用 |
StringMatch | StringMatcher | N | 字符串匹配 |
DubboRouteAction
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
Destination | []*DubboDestinationWeight | Y | Dubbo路由目标定义 |
DubboDestinationWeight
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
Host | string | Y | 目标Dubbo服务 |
Subset | string | N | 目标Dubbo服务分组,对应DestinationRule定义的分组 |
Weight | uint32 | N | 分组路由权重 |