Dubbo協議治理
更新時間 2025-02-21 10:02:50
最近更新時間: 2025-02-21 10:02:50
分享文章
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.daliqc.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 | 分組路由權重 |