让我们创建 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
,以便在两个版本之间平均分配流量 。
【五 Istio:使用服务网格Istio进行流量路由】 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 高级流量路由在这个实验中,我们将学习如何使用请求属性在多个服务版本之间路由流量 。我们将从部署 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
并使用
经验总结扩展阅读
- 破壁机玉米汁怎么榨才好喝
- 五行穿衣指南2023年9月24日 2023年穿衣五行颜色
- 玻璃自爆没掉下来怎么处理
- 2023年11月24日五行穿衣配色 今日幸运颜色讲究
- 2023年11月25日五行穿衣分享 穿什么颜色衣服好
- 2023年11月26日五行穿衣颜色搭配 今日招桃花幸运颜色
- 2023年11月27日五行穿衣颜色搭配 今日幸运颜色讲究
- 2023年11月28日五行穿衣配色 分享好运色穿衣搭配
- 2023年11月19日五行穿衣颜色搭配 今日幸运颜色查询
- 2023年11月20日五行穿衣查询 今日招桃花幸运颜色