托管网格使用Demo
前提条件
- 已登录百度智能云控制台,并具备服务网格 CSM 与容器引擎 CCE 的相关操作权限。
- 已准备可纳管的 CCE 集群,用于部署示例应用。具体创建步骤可参考文档:创建集群。
- 已确认后续用于部署示例应用的命名空间可开启 Sidecar 自动注入。## 概述
本文档介绍如何在百度智能云控制台创建托管服务网格、纳管用户集群、开启 Sidecar 自动注入、部署示例应用,并通过下发 Istio 资源实现流量治理。完成后,您还可以按需查看托管网格控制面监控和网格访问凭证。## 1. 创建托管服务网格
导航路径: 百度智能云控制台->服务网格 CSM->网格列表->创建网格
操作步骤
步骤 1:进入创建网格页面
进入服务网格 CSM 的 【网格列表】 页面,点击 【创建网格】。
步骤 2:填写网格配置
在 创建网格 页面完成相关配置。
| 参数 | 必填 | 说明 |
|---|---|---|
| 网格类型 | 是 | 选择 托管网格。 |
| 地域 | 是 | 根据业务部署地域选择。 |
| 网格名称 | 是 | 填写便于识别的网格名称。 |
| Istio 版本 | 是 | 根据业务兼容性选择合适版本。 |
| VPC | 是 | 选择托管网格所属的 VPC。 |
| 子网 | 是 | 选择托管网格所属的子网。 |
| 控制面 BLB | 否 | 按业务规模选择负载均衡规格。 |
| 安全组 | 否 | 可使用系统默认安全组,或按网络规划选择已有安全组。 |
| Istio 资源配置 | 否 | 按实际管理模式选择对应资源配置方式。 |
| API Server 访问 | 否 | 按访问需求选择是否开启。 |
| 链路追踪 | 否 | 按观测需求选择是否开启。 |
步骤 3:提交创建
确认信息无误后,点击 【确认】。返回 【网格列表】 页面后,可查看新建托管网格实例及其状态。

2.添加用户集群
添加需要使用服务网格的业务集群,以便 CSM 托管网格实例可以管理用户集群上的微服务应用。
因此需要提前准备一个百度智能云容器引擎 CCE 集群,用于部署示例应用程序。具体创建集群步骤可参考文档:创建集群。
注意:
- 托管网格纳管的CCE集群,如果选择vpc-eni网络模式,需要确保选择的安全组出站规则配置了能访问托管网格实例vpc的网段
- CCE集群创建worker节点时,镜像推荐选择unbuntu
- Baidulinux 操作系统请开启相关内核模块

CCE 集群准备完成后,可在 CSM 中添加用户集群,路径:进入百度智能云控制台 -> 选择服务网格 CSM -> 点击对应的网格实例 -> 集群管理 -> 添加集群 -> 确认。
3. 开启 Sidecar 注入
开启自动注入功能后,重启或重新部署对应命名空间下的工作负载,即可在该命名空间下的 Pod 中自动注入 Sidecar 容器,用于实现服务网格中的各项能力。
导航路径: 百度智能云控制台->服务网格 CSM->网格列表->目标网格实例->注入配置
操作步骤
步骤 1:进入注入配置页面
在 【网格列表】 页面点击目标网格实例,进入实例详情后点击 【注入配置】。
步骤 2:开启命名空间自动注入
在 【自动注入配置】 页面中,定位目标集群和命名空间,开启 自动注入 开关,并在确认框中点击 【确定】。开启后,系统会为对应命名空间配置 istio-injection: enabled 标签。后续重启或重新部署该命名空间下的工作负载后,Pod 会自动注入 Sidecar 容器。

4.部署应用程序
在 CCE 容器引擎上可通过页面配置 或 YAML 的方式部署工作负载和服务。
路径:进入百度智能云控制台 -> 选择容器引擎 CCE -> 点击对应的集群 -> 工作负载 -> 无状态服务部署 -> 新建无状态部署/使用 YAML 创建。
以本文以 YAML 创建为例,consumer-demo的K8S deployment YAML 定义如下:
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: consumer-demo-deployment
5 labels:
6 app: consumer-demo
7 name: consumer-demo
8spec:
9 replicas: 1
10 selector:
11 matchLabels:
12 app: consumer-demo
13 template:
14 metadata:
15 labels:
16 app: consumer-demo
17 spec:
18 restartPolicy: Always
19 containers:
20 - name: consumer-demo
21 image: registry.baidubce.com/csm-offline/bms-orignal-consumer:dev
22 imagePullPolicy: Always
23 ports:
24 - containerPort: 9999
为演示的演示服务网格的功能,需要为provider-demo定义不同的版本,即v1和v2。
1provider-demo v1版本K8S deployment YAML 定义如下:
2apiVersion: apps/v1
3kind: Deployment
4metadata:
5 name: provider-demo-deployment-v1
6 labels:
7 app: provider-demo
8 name: provider-demo
9 version: v1
10spec:
11 replicas: 1
12 selector:
13 matchLabels:
14 app: provider-demo
15 version: v1
16 template:
17 metadata:
18 labels:
19 app: provider-demo
20 version: v1
21 spec:
22 restartPolicy: Always
23 containers:
24 - name: provider-demo
25 image: registry.baidubce.com/csm-offline/bms-orignal-provider:dev
26 imagePullPolicy: Always
27 ports:
28 - containerPort: 10001
provider-demo v2版本K8S deployment YAML 定义如下:
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: provider-demo-deployment-v2
5 labels:
6 app: provider-demo
7 name: provider-demo
8 version: v2
9spec:
10 replicas: 1
11 selector:
12 matchLabels:
13 app: provider-demo
14 version: v2
15 template:
16 metadata:
17 labels:
18 app: provider-demo
19 version: v2
20 spec:
21 restartPolicy: Always
22 containers:
23 - name: provider-demo
24 image: registry.baidubce.com/csm-offline/bms-orignal-provider:dev
25 imagePullPolicy: Always
26 ports:
27 - containerPort: 10001

接下来进入百度智能云控制台 -> 选择容器引擎 CCE -> 点击对应的集群 -> 网络 -> 服务 -> 新建服务。
provider-demo Service YAML 定义如下:
1apiVersion: v1
2kind: Service
3metadata:
4 name: provider-demo
5 annotations:
6 prometheus.io/scrape: "true"
7spec:
8 selector:
9 app: provider-demo
10 type: ClusterIP
11 sessionAffinity: None
12 ports:
13 - protocol: TCP
14 port: 80
15 targetPort: 10001
16 name: http-port

验证流量
在本文的示例中 Consumer Demo 访问 Provider Demo 时通过 K8S Service 轮询访问后端服务,即轮询访问 V1 和 V2 版本 Provider Demo Pod,而无法精准控制流量。
进入consumer-demo的pod容器中,访问接口:
1while true; do curl http://127.0.0.1:9999/echo-rest/hello && echo && sleep 1; done;
2while true; do curl -H 'x-b3-user: admin' http://127.0.0.1:9999/echo-rest/hello && echo && sleep 1; done;
5. 服务治理策略下发
完成前述准备工作后,即可使用 CSM 提供的服务网格微服务治理能力,实现对流量走向的精准控制。
导航路径: 百度智能云控制台->服务网格 CSM->网格列表->目标网格实例->Istio 资源管理->创建 Istio 资源

示例 1:将 consumer-demo 访问 provider-demo 的流量 100% 下发到 v1
1apiVersion: networking.istio.io/v1alpha3
2kind: DestinationRule
3metadata:
4 name: dr-provider-demo
5spec:
6 host: provider-demo.default.svc.cluster.local
7 subsets:
8 - name: v1
9 labels:
10 version: v1
11 - name: v2
12 labels:
13 version: v2
1apiVersion: networking.istio.io/v1alpha3
2kind: VirtualService
3metadata:
4 name: vs-provider-demo
5spec:
6 hosts:
7 - provider-demo.default.svc.cluster.local
8 http:
9 - route:
10 - destination:
11 host: provider-demo.default.svc.cluster.local
12 subset: v1
13 weight: 100
14 - destination:
15 host: provider-demo.default.svc.cluster.local
16 subset: v2
17 weight: 0
验证流量
在本文的示例中 Consumer Demo 访问 Provider Demo 时 流量只会访问 V1 版本,而不再访问V2 版本,通过 CSM 可实现精准控制流量走向的目的。
同样可以进入consumer-demo的pod容器中,访问接口:
1while true; do curl http://127.0.0.1:9999/echo-rest/hello && echo && sleep 1; done;
2while true; do curl -H 'x-b3-user: admin' http://127.0.0.1:9999/echo-rest/hello && echo && sleep 1; done;
另一个例子,服务网格也支持istio原生的envoyfilter资源
进入百度智能云控制台 -> 选择服务网格 CSM -> 点击对应网格实例 -> Istio 资源管理 -> 创建 Istio 资源。
1apiVersion: networking.istio.io/v1alpha3
2kind: EnvoyFilter
3metadata:
4 name: add-baibu-header
5 namespace: istio-system
6spec:
7 workloadSelector:
8 labels:
9 istio: ingressgateway # 可以根据需要更改为特定的工作负载选择器
10 configPatches:
11 - applyTo: HTTP_FILTER
12 match:
13 context: SIDECAR_OUTBOUND
14 patch:
15 operation: INSERT_BEFORE
16 value:
17 name: envoy.lua
18 typed_config:
19 "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
20 inlineCode: |
21 function envoy_on_request(request_handle)
22 request_handle:headers():add("baidu", "some-value")
23 end
6.托管网格控制面监控
具体可参考:对接Cprom实现监控告警
7. 查看托管网格访问凭证
您可利用访问凭证通过 kubectl 命令等方式提交 Istio 相关 CRD 资源,如 EnvoyFilter、VirtualService、DestinationRule 等。
导航路径: 百度智能云控制台->服务网格 CSM->网格列表->目标托管网格实例->基本信息->查看网格凭证
操作步骤
步骤 1:进入基本信息页面
在 【网格列表】 页面点击目标托管网格实例,进入实例详情页后查看 【基本信息】。
步骤 2:查看并获取网格访问凭证
在 【基本信息】 页面点击 【查看网格凭证】。弹窗默认展示 【VPC 访问凭证】,可通过 【复制】 或 【下载】 获取 kubeconfig 内容。
若实例已开启 API Server 公网访问,可切换到 【公网访问凭证】 查看并获取对应凭证;若未开启,则仅支持查看和获取 VPC 访问凭证。

评价此篇文章
