全链路灰度功能体验 本章节介绍如何实现全链路灰度发布能力 概述 全链路灰度是基于流量标签功能,在微服务整个调用链中进行统一的流量打标和治理,从而实现全链路灰度能力。本文介绍如何实现全链路灰度发布能力。 微服务调用关系 微服务架构中有三个服务,app1、app2、app3,调用关系如下图,入口由Ingress网关做流量分发,要实现全链路灰度,预期是可以实现微服务之间只在在base版本内和test版本内调用,实现虚拟泳道。 前提条件 1. 开通云容器引擎。 2. 开通服务网格实例。 操作步骤 安装ingress gateway 登录控制台,选择对应的服务网格,进入网格页面后,通过左边栏的“网关”一栏选择“入口网关”。 进入网关页面后,选择集群和命名空间后可以创建网关。 填入详细的参数后,点确认即可。如图: 部署应用 在云容器引擎集群内创建demo命名空间,部署base版本和test版本应用。 apiVersion: apps/v1 kind: Deployment metadata: name: app1base namespace: demo labels: app: app1 csmtraffictag: base spec: replicas: 1 selector: matchLabels: app: app1 name: app1 csmtraffictag: base template: metadata: labels: sidecar.istio.io/inject: "true" app: app1 name: app1 source: CCSE csmtraffictag: base spec: containers: name: default image: registryvpccrshuadong1.cnspinternal.ctyun.cn/library/tracedemo:v1.0.0 imagePullPolicy: IfNotPresent env: name: version value: base name: app value: app1 name: upstreamurl value: " ports: containerPort: 8000 apiVersion: apps/v1 kind: Deployment metadata: name: app2base namespace: demo labels: app: app2 csmtraffictag: base spec: replicas: 1 selector: matchLabels: app: app2 name: app2 csmtraffictag: base template: metadata: labels: sidecar.istio.io/inject: "true" app: app2 name: app2 source: CCSE csmtraffictag: base spec: containers: name: default image: registryvpccrshuadong1.cnspinternal.ctyun.cn/library/tracedemo:v1.0.0 imagePullPolicy: IfNotPresent env: name: version value: base name: app value: app2 name: upstreamurl value: " ports: containerPort: 8000 apiVersion: apps/v1 kind: Deployment metadata: name: app3base namespace: demo labels: app: app3 csmtraffictag: base spec: replicas: 1 selector: matchLabels: app: app3 name: app3 csmtraffictag: base template: metadata: labels: sidecar.istio.io/inject: "true" app: app3 name: app3 source: CCSE csmtraffictag: base spec: containers: name: default image: registryvpccrshuadong1.cnspinternal.ctyun.cn/library/tracedemo:v1.0.0 imagePullPolicy: IfNotPresent env: name: version value: base name: app value: app3 ports: containerPort: 8000 test版本: apiVersion: apps/v1 kind: Deployment metadata: name: app1test namespace: demo labels: app: app1 csmtraffictag: test spec: replicas: 1 selector: matchLabels: app: app1 name: app1 csmtraffictag: test template: metadata: labels: sidecar.istio.io/inject: "true" app: app1 name: app1 source: CCSE csmtraffictag: test spec: containers: name: default image: registryvpccrshuadong1.cnspinternal.ctyun.cn/library/tracedemo:v1.0.0 imagePullPolicy: IfNotPresent env: name: version value: test name: app value: app1 name: upstreamurl value: " ports: containerPort: 8000 apiVersion: apps/v1 kind: Deployment metadata: name: app2test namespace: demo labels: app: app2 csmtraffictag: test spec: replicas: 1 selector: matchLabels: app: app2 name: app2 csmtraffictag: test template: metadata: labels: sidecar.istio.io/inject: "true" app: app2 name: app2 source: CCSE csmtraffictag: test spec: containers: name: default image: registryvpccrshuadong1.cnspinternal.ctyun.cn/library/tracedemo:v1.0.0 imagePullPolicy: IfNotPresent env: name: version value: test name: app value: app2 name: upstreamurl value: " ports: containerPort: 8000 apiVersion: apps/v1 kind: Deployment metadata: name: app3test namespace: demo labels: app: app3 csmtraffictag: test spec: replicas: 1 selector: matchLabels: app: app3 name: app3 csmtraffictag: test template: metadata: labels: sidecar.istio.io/inject: "true" app: app3 name: app3 source: CCSE csmtraffictag: test spec: containers: name: default image: registryvpccrshuadong1.cnspinternal.ctyun.cn/library/tracedemo:v1.0.0 imagePullPolicy: IfNotPresent env: name: version value: test name: app value: app3 ports: containerPort: 8000 关联的Service资源: apiVersion: v1 kind: Service metadata: name: app1 namespace: demo labels: app: app1 service: app1 withServiceMesh: "true" spec: ports: port: 8000 name: http selector: app: app1 apiVersion: v1 kind: Service metadata: name: app2 namespace: demo labels: app: app2 service: app2 withServiceMesh: "true" spec: ports: port: 8000 name: http selector: app: app2 apiVersion: v1 kind: Service metadata: name: app3 namespace: demo labels: app: app3 service: app3 withServiceMesh: "true" spec: ports: port: 8000 name: http selector: app: app3