托管网格使用Demo
1.创建托管服务网格
进入百度智能云控制台 -> 选择服务网格 CSM -> 创建网格(选择实例类型为托管网格、填写必要的信息、选择托管实例所属的网络信息)-> 确认创建即可。
2.添加用户集群
添加需要使用服务网格的业务集群,以便 CSM 托管网格实例可以管理用户集群上的微服务应用。
因此需要提前准备一个百度智能云容器引擎 CCE 集群,用于部署示例应用程序。具体创建集群步骤可参考文档:创建集群。
注意:
- 托管网格纳管的CCE集群,如果选择vpc-eni网络模式,需要确保选择的安全组出站规则配置了能访问托管网格实例vpc的网段
- CCE集群创建worker节点时,镜像推荐选择unbuntu
- Baidulinux 操作系统请开启相关内核模块
CCE 集群准备完成后,可在 CSM 中添加用户集群,路径:进入百度智能云控制台 -> 选择服务网格 CSM -> 点击对应的网格实例 -> 集群管理 -> 添加集群 -> 确认。
3.开启Sidecar注入
开启自动注入功能,可实现业务无感注入 Sidecar 代理,该 Sidecar 代理用于实现服务网格中各项能力。开启对应命名空间自动注入功能后,重启或重新部署对应命名空间下的工作负载,可实现该命名空间下的 Pod自动注入了 Sidecar 容器。
路径:进入百度智能云控制台 -> 选择服务网格 CSM -> 点击对应的网格实例 ->添加集群 ->注入配置 -> 开启对应命名空间自动注入开关。
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 提供的服务网格微服务治理能力。
一个例子,通过服务网格服务治理能力可实现 Consumer Demo 访问 Provider Demo 的流量 100% 发往Provider Demo V1版本,而不再将流量发往 Provider Demo V2 版本,如下图所示:
进入百度智能云控制台 -> 选择服务网格 CSM -> 点击对应网格实例 -> Istio 资源管理 -> 创建 Istio 资源。
Istio 资源 YAML 定义如下:
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.查看托管网格访问凭证
进入CSM控制台——>托管网格实例——>基本信息——>查看网格凭证,同时支持VPC访问凭证和公网访问凭证,您可以进行下载或者复制。您可利用访问凭证通过 kubectl 命令等方式提交 Istio 相关 CRD 资源(如 Envoyfilter、VirtualService、DestinationRule等)。