多协议管理
概述
本文档介绍在服务网格 CSM 中启用 Dubbo、bRPC 等私有协议兼容能力,并在 CCE 集群中部署示例应用、下发 Istio 资源和验证流量治理策略的相关操作。
使用前提
创建独立网格实例,并且开启支持兼容三方协议按钮。
创建实例
按以下步骤在控制台上创建独立网格实例并且开启多协议支持:
- 登录百度智能云控制台,选择“产品服务 > 云计算 > 容器 > 服务网格 CSM”;
导航路径:产品服务->云计算->容器->服务网格 CSM->网格列表
步骤 1:进入创建网格页面
登录 百度智能云控制台 后,进入 产品服务->云计算->容器->服务网格 CSM->网格列表,单击 【创建网格】 进入创建页面。

步骤 2:选择独立网格并完成基础配置
在 【创建网格】 页面中,选择 实例类型 为 独立网格,并完成以下基础配置:
| 参数 | 必填 | 说明 |
|---|---|---|
| 实例类型 | 是 | 选择 独立网格。 |
| 当前地域 | 是 | 选择目标业务所在地域。 |
| 网格名称 | 是 | 填写符合命名规则的名称。 |
| 支持兼容三方协议 | 是 | 打开该开关,以启用 Dubbo、bRPC 等三方协议兼容能力。 |
| 服务发现范围配置 | 否 | 按业务网络规划选择对应配置。 |
| 日志服务 | 否 | 按环境要求选择是否开启。 |
| 监控指标采集 | 否 | 按观测需求选择是否开启。 |
| 链路追踪 | 否 | 按链路追踪要求选择是否开启。 |
步骤 3:选择 Istio版本
展开 Istio版本 下拉框,按环境要求选择可用版本。

步骤 4:选择主集群并确认创建
展开 主集群 下拉框,选择已准备好的 CCE 集群。确认配置无误后,单击 【确认】 完成创建。
说明: 若 主集群 下拉框中没有可选集群,请先准备可用且具备管理员权限的 CCE 集群,再返回当前页面继续创建。
部署应用
按以下步骤在CCE集群部署应用:
步骤 1:开启 default 命名空间自动注入
导航路径:服务网格 CSM->目标网格->注入配置
进入 【注入配置】 页面,搜索 default 命名空间并打开自动注入开关。

步骤 2:通过 CSM 跳转到 CCE 集群
导航路径:服务网格 CSM->目标网格->集群管理
进入 【集群管理】 页面,在已纳管集群列表中定位目标集群并单击集群名称,跳转到对应的 CCE 集群详情页。

步骤 3:在无状态页面提交测试应用 YAML
导航路径:容器引擎 CCE->目标集群->工作负载->无状态->使用YAML创建
进入 【使用YAML创建】 页面,命名空间选择 default,将以下测试应用 YAML 粘贴到编辑器后提交。
说明: 若
default命名空间中已存在dubbo-resolve-config或同名工作负载,请保留现有资源;仅在需要重新创建时,为ConfigMap名称追加唯一后缀,并同步修改各Deployment中volumes.configMap.name的引用。
测试应用的Yaml文件如下所示:
1apiVersion: v1
2kind: ConfigMap
3metadata:
4 name: dubbo-resolve-config
5data:
6 dubbo-resolve.properties: |-
7 org.apache.dubbo.samples.basic.api.DemoService=dubbo://dubbo-sample-provider:20880
8 org.apache.dubbo.samples.basic.api.TestService=dubbo://dubbo-sample-provider:20880
9 org.apache.dubbo.samples.basic.api.ComplexService=dubbo://dubbo-sample-provider:20880
10 org.apache.dubbo.samples.basic.api.SecondService=dubbo://dubbo-sample-second-provider:20880
11---
12apiVersion: apps/v1
13kind: Deployment
14metadata:
15 name: dubbo-sample-provider-v1
16 labels:
17 app: dubbo-sample-provider
18spec:
19 selector:
20 matchLabels:
21 app: dubbo-sample-provider
22 replicas: 1
23 template:
24 metadata:
25 annotations:
26 sidecar.istio.io/bootstrapOverride: aeraki-bootstrap-config
27 labels:
28 app: dubbo-sample-provider
29 version: v1
30 service_group: user
31 spec:
32 containers:
33 - name: dubbo-sample-provider
34 image: registry.baidubce.com/csm/dubbo-sample-provider:latest
35 ports:
36 - containerPort: 20880
37 volumeMounts:
38 - name: dubbo-resolve-config
39 mountPath: /dubbo-resolve.properties
40 subPath: dubbo-resolve.properties
41 readOnly: true
42 volumes:
43 - name: dubbo-resolve-config
44 configMap:
45 name: dubbo-resolve-config
46---
47apiVersion: apps/v1
48kind: Deployment
49metadata:
50 name: dubbo-sample-provider-v2
51 labels:
52 app: dubbo-sample-provider
53spec:
54 selector:
55 matchLabels:
56 app: dubbo-sample-provider
57 replicas: 1
58 template:
59 metadata:
60 annotations:
61 sidecar.istio.io/bootstrapOverride: aeraki-bootstrap-config
62 labels:
63 app: dubbo-sample-provider
64 version: v2
65 service_group: batchjob
66 spec:
67 containers:
68 - name: dubbo-sample-provider
69 image: registry.baidubce.com/csm/dubbo-sample-provider:latest
70 ports:
71 - containerPort: 20880
72 volumeMounts:
73 - name: dubbo-resolve-config
74 mountPath: /dubbo-resolve.properties
75 subPath: dubbo-resolve.properties
76 readOnly: true
77 volumes:
78 - name: dubbo-resolve-config
79 configMap:
80 name: dubbo-resolve-config
81---
82apiVersion: apps/v1
83kind: Deployment
84metadata:
85 name: dubbo-sample-second-provider
86 labels:
87 app: dubbo-sample-second-provider
88spec:
89 selector:
90 matchLabels:
91 app: dubbo-sample-second-provider
92 replicas: 1
93 template:
94 metadata:
95 annotations:
96 sidecar.istio.io/bootstrapOverride: aeraki-bootstrap-config
97 labels:
98 app: dubbo-sample-second-provider
99 version: v2
100 service_group: batchjob
101 spec:
102 containers:
103 - name: dubbo-sample-second-provider
104 image: registry.baidubce.com/csm/dubbo-sample-second-provider
105 ports:
106 - containerPort: 20880
107---
108apiVersion: apps/v1
109kind: Deployment
110metadata:
111 name: dubbo-sample-consumer
112 labels:
113 app: dubbo-sample-consumer
114spec:
115 selector:
116 matchLabels:
117 app: dubbo-sample-consumer
118 replicas: 1
119 template:
120 metadata:
121 annotations:
122 sidecar.istio.io/bootstrapOverride: aeraki-bootstrap-config
123 labels:
124 app: dubbo-sample-consumer
125 spec:
126 containers:
127 - name: dubbo-sample-consumer
128 image: registry.baidubce.com/csm/dubbo-sample-consumer:latest
129 env:
130 - name: mode
131 value: demo
132 ports:
133 - containerPort: 9009
134 volumeMounts:
135 - name: dubbo-resolve-config
136 mountPath: /dubbo-resolve.properties
137 subPath: dubbo-resolve.properties
138 readOnly: true
139 volumes:
140 - name: dubbo-resolve-config
141 configMap:
142 name: dubbo-resolve-config
143---
144apiVersion: v1
145kind: Service
146metadata:
147 name: dubbo-sample-provider
148spec:
149 selector:
150 app: dubbo-sample-provider
151 ports:
152 - name: tcp-metaprotocol-dubbo
153 protocol: TCP
154 port: 20880
155 targetPort: 20880
步骤 4:核验测试工作负载
导航路径:容器引擎 CCE->目标集群->工作负载->无状态
返回 【无状态】 页面,确认 dubbo-sample-provider-v1、dubbo-sample-provider-v2、dubbo-sample-second-provider 和 dubbo-sample-consumer 已创建在 default 命名空间下。

步骤 5:下发 DestinationRule 规则
导航路径:服务网格 CSM->目标网格->Istio资源管理
进入 【Istio资源管理】 页面,创建或打开名为 dubbo-sample-provider 的 DestinationRule,确认规则内容如下:
说明: 若控制台中已存在同名
DestinationRule,可直接打开对应规则并核对 YAML 内容;同名规则可能显示在网格系统命名空间下。
1apiVersion: networking.istio.io/v1alpha3
2kind: DestinationRule
3metadata:
4 name: dubbo-sample-provider
5spec:
6 host: dubbo-sample-provider.default.svc.cluster.local
7 subsets:
8 - name: v1
9 labels:
10 version: v1
11 - name: v2
12 labels:
13 version: v2
流量验证
步骤 1:查看 dubbo-sample-consumer 业务容器日志
导航路径:容器引擎 CCE->目标集群->工作负载->无状态部署->dubbo-sample-consumer->关联容器组->日志
进入日志页面后,切换 Container 为 dubbo-sample-consumer,在未下发流量治理策略前,观察 org.apache.dubbo.samples.basic.api.DemoService 的 sayHello 请求是否按预期轮询访问 v1 与 v2 子集。
说明: 若日志页显示
PodInitializing等初始化信息,请等待相关 Pod 进入Running状态后再继续验证。
步骤 2:下发 MetaRouter 流量治理策略
导航路径:服务网格 CSM->目标网格->Istio资源管理->创建Istio资源
进入 【创建Istio资源】 页面,提交以下 MetaRouter YAML,将 sayHello 请求路由到 v1 子集。
说明: 若提交后提示
the server could not find the requested resource,表示当前网格实例未接受metaprotocol.aeraki.io/v1alpha1的MetaRouter资源,请先确认环境已启用对应能力后再继续验证。![]()
1apiVersion: metaprotocol.aeraki.io/v1alpha1
2kind: MetaRouter
3metadata:
4 name: test-metaprotocol-dubbo-route
5spec:
6 hosts:
7 - dubbo-sample-provider.default.svc.cluster.local
8 routes:
9 - name: v1
10 match:
11 attributes:
12 interface:
13 exact: org.apache.dubbo.samples.basic.api.DemoService
14 method:
15 exact: sayHello
16 foo:
17 exact: bar
18 route:
19 - destination:
20 host: dubbo-sample-provider.default.svc.cluster.local
21 subset: v1
- 通过CCE集群中的工作负载在此查看业务容器中的日志:
步骤 3:复查业务容器日志
导航路径:容器引擎 CCE->目标集群->工作负载->无状态部署->dubbo-sample-consumer->关联容器组->日志
策略生效后,再次查看 dubbo-sample-consumer 业务容器日志,确认 org.apache.dubbo.samples.basic.api.DemoService 的 sayHello 请求已全部路由到 v1 子集。若流量治理策略未创建成功,或业务容器仍未就绪,则无法完成该验证。
说明
评价此篇文章


