每当有请求被发送到 Kubernetes Customers 服务时,它将被路由到同一服务的 v1子集 。
将上述 YAML 保存为 customers-vs.yaml
,并使用 kubectl apply -f customers-vs.yaml
创建 VirtualService 。
现在我们已经准备好部署 v2 版的 Customers 服务了 。v2 版本返回与前一版本相同的客户列表,但它也包括城市名称 。
让我们创建 Customers v2 部署 。我们不需要部署 Kubernetes 服务,因为我们已经部署了一个 v1 版本的服务 。
apiVersion: apps/v1 kind: Deployment metadata:name: customers-v2labels:app: customersversion: v2 spec:replicas: 1selector:matchLabels:app: customersversion: v2template:metadata:labels:app: customersversion: v2spec:containers:- image: gcr.io/tetratelabs/customers:2.0.0imagePullPolicy: Alwaysname: svcports:- containerPort: 3000
该部署与 v1 部署几乎相同 。唯一的区别是所使用的 Docker 镜像版本和设置在版本标签上的 v2 值 。
将上述 YAML 保存为 customers-v2.yaml
,并使用 kubectl apply -f customers-v2.yaml
创建部署 。
让我们使用 weight
字段并修改 VirtualService,使 50% 的流量被发送到 v1 子集,另 50% 发送到 v2 子集 。
要做到这一点,我们将创建第二个 destination
,有相同的主机名,但有不同的子集 。我们还将为 destination
添加 weight: 50
,以便在两个版本之间平均分配流量 。
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:name: customers spec:hosts:- 'customers.default.svc.cluster.local'http:- route:- destination:host: customers.default.svc.cluster.localport:number: 80subset: v1weight: 50- destination:host: customers.default.svc.cluster.localport:number: 80subset: v2weight: 50
将上述 YAML 保存为 customers-50-50.yaml
并使用 kubectl apply -f customers-50-50.yaml
更新 VirtualService 。
在浏览器中打开 GATEWAY_URL
,刷新几次页面,看看不同的响应 。来自 Customers v2 的响应显示在下图中 。
文章插图
为了改变发送到一个或另一个版本的流量比例,我们可以更新 VirtualService 。同样,我们也可以添加 v3 或 v4 版本 , 并在这些版本之间分割流量 。
6.2 清理删除 Deployments、Services、VirtualServices、DestinationRule 和 Gateway:
kubectl delete deploy web-frontend customers-{v1,v2} kubectl delete svc customers web-frontend kubectl delete vs customers web-frontend kubectl delete dr customers kubectl delete gateway gateway
七.实战:高级流量路由7.1 高级流量路由【五 Istio:使用服务网格Istio进行流量路由】在这个实验中,我们将学习如何使用请求属性在多个服务版本之间路由流量 。我们将从部署 Gateway 开始:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata:name: gateway spec:selector:istio: ingressgatewayservers:- port:number: 80name: httpprotocol: HTTPhosts:- '*'
将上述 YAML 保存为 gateway.yaml
并使用 kubectl apply -f gateway.yaml
部署网关 。接下来,我们将部署Web前端、Customers v1、Customers v2,以及相应的 VirtualServices 和 DestinationRule 。一旦一切部署完毕,所有流量将被路由到 Customers v1 。
apiVersion: apps/v1 kind: Deployment metadata:name: web-frontendlabels:app: web-frontend spec:replicas: 1selector:matchLabels:app: web-frontendtemplate:metadata:labels:app: web-frontendversion: v1spec:containers:- image: gcr.io/tetratelabs/web-frontend:1.0.0imagePullPolicy: Alwaysname: webports:- containerPort: 8080env:- name: CUSTOMER_SERVICE_URLvalue: 'http://customers.default.svc.cluster.local' --- kind: Service apiVersion: v1 metadata:name: web-frontendlabels:app: web-frontend spec:selector:app: web-frontendports:- port: 80name: httptargetPort: 8080 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:name: web-frontend spec:hosts:- '*'gateways:- gatewayhttp:- route:- destination:host: web-frontend.default.svc.cluster.localport:number: 80
将上述 YAML 保存为 web-frontend.yaml
并使用 kubectl apply -f web-frontend.yaml
创建部署和服务 。 apiVersion: apps/v1 kind: Deployment metadata:name: customers-v1labels:app: customersversion: v1 spec:replicas: 1selector:matchLabels:app: customersversion: v1template:metadata:labels:app: customersversion: v1spec:containers:- image: gcr.io/tetratelabs/customers:1.0.0imagePullPolicy: Alwaysname: svcports:- containerPort: 3000 --- apiVersion: apps/v1 kind: Deployment metadata:name: customers-v2labels:app: customersversion: v2 spec:replicas: 1selector:matchLabels:app: customersversion: v2template:metadata:labels:app: customersversion: v2spec:containers:- image: gcr.io/tetratelabs/customers:2.0.0imagePullPolicy: Alwaysname: svcports:- containerPort: 3000 --- kind: Service apiVersion: v1 metadata:name: customerslabels:app: customers spec:selector:app: customersports:- port: 80name: httptargetPort: 3000 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:name: customers spec:hosts:- 'customers.default.svc.cluster.local'http:- route:- destination:host: customers.default.svc.cluster.localport:number: 80subset: v1 --- apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata:name: customers spec:host: customers.default.svc.cluster.localsubsets:- name: v1labels:version: v1- name: v2labels:version: v2
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Git 02: git管理码云代码仓库 + IDEA集成使用git
- node.js:《接口实现文件的上传和下载》
- Kotlin Mockito使用方法
- 之五 2流高手速成记:Springboot整合Shiro实现安全管理
- <五>掌握左值引用和初识右值引用
- 二 Istio:在Kubernetes(k8s)集群上安装部署istio1.14
- 四十八 SpringCloud微服务实战——搭建企业级开发框架:【移动开发】整合uni-app搭建移动端快速开发框架-使用第三方UI框架
- Spring Retry 重试
- C#-多线程的使用Tread
- 我国哪座山被称为五岳之首?支付宝