Istio-Bookinfo灰度发布

在这里插入图片描述

目的

我们通过灰度发布的流量控制实现以下三个目标:

  1. 用户访问的流量全部发送到Reviews V1的版本(不带五角星)
  2. 将90%的用户流量发送到Reviews V1版本,另外10%的流量发送到Reviews V2版本的应用程序(五个黑色五角星)。
  3. 将50%的流量发送到Reviews V2版本的应用程序,另外50%的流量发送到Reviews V3版本的应用程序(五个红色五角星)。

运行Bookinfo实例

[root@master istio-1.14.3]# kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
[root@master istio-1.14.3]# kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

v1版本不带五角星

在这里插入图片描述

v2版本五个黑色五角星

在这里插入图片描述

v3版本五个红色五角星

在这里插入图片描述

实践一: 用户访问的流量全部发送到Reviews V1的版本(不带五角星)

1.1 定义DestinationRule规则资源编排文件(流量控制前配置)

[root@master istio-1.14.3]# vim samples/bookinfo/networking/destination-rule-all.yaml
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule				#定义控制器的类型为DestinationRule
metadata:
  name: reviews						#控制器的名称
spec:
  host: reviews						#针对哪一个Service资源设置路由规则,要与VirtualService中的Service资源保持一致
  subsets:							#定义子集也就是路由规则,可以定义多个
  - name: v1						#规则的名称
    labels:							#路由规则一般都是根据Pod中的Label标签来做的,samples/bookinfo/platform/kube/bookinfo.yaml 中deploy内指定的保持一致
      version: v1					#v1的路由规则转发到带有version: v1标签的一组Pod资源
  - name: v2
    labels:
      version: v2					#v2的路由规则转发到带有version: v2标签的一组Pod资源
  - name: v3
    labels:	
      version: v3					#v3的路由规则转发到带有version: v3标签的一组Pod资源

1.2 定义VirtualService规则编排文件

[root@master istio-1.14.3]# cat samples/bookinfo/networking/virtual-service-all-v1.yaml
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService				#控制器类型为VirtualService
metadata:							
  name: reviews						#指定需要流量控制的控制器名称为reviews
spec:
  hosts:							#定义流量访问的目标主机
  - reviews							
  http:								#定义HTTP流量转发的规则路由表
  - route:
    - destination:						#定义流量的转发规则
        host: reviews					#转发至Service资源
        subset: v1						#将流量转发到哪一个路由规则子集,这里将流量转发到在DestinationRule中定义的v1路由规则上,就可以实现所有的流量转发到v1版本的Pod资源

1.3 创建VirtualService和DestinationRule

[root@master istio-1.14.3]# kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml -n bookinfo
destinationrule.networking.istio.io/productpage created
destinationrule.networking.istio.io/reviews created
destinationrule.networking.istio.io/ratings created
destinationrule.networking.istio.io/details created
[root@master istio-1.14.3]# kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml -n bookinfo
virtualservice.networking.istio.io/productpage created
virtualservice.networking.istio.io/reviews created
virtualservice.networking.istio.io/ratings created
virtualservice.networking.istio.io/details created

1.4 访问测试

无论如何刷新都是不带五角星页面
在这里插入图片描述

实践二: 依靠修改权重(weight)将90%的用户流量发送到Reviews V1版本,另外10%的流量发送到Reviews V2版本的应用程序(五个黑色五角星)。

2.1 修改VirtualService规则编排文件(不需要修改DestinationRule编排文件)

# 删除上个规则
[root@master istio-1.14.3]# kubectl delete -f samples/bookinfo/networking/virtual-service-all-v1.yaml -n bookinfo
virtualservice.networking.istio.io "productpage" deleted
virtualservice.networking.istio.io "reviews" deleted
virtualservice.networking.istio.io "ratings" deleted
virtualservice.networking.istio.io "details" deleted

[root@master istio-1.14.3]# vim samples/bookinfo/networking/destination-rule-all.yaml
[root@master istio-1.14.3]# kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-90-10.yaml 
virtualservice.networking.istio.io/reviews created

[root@master istio-1.14.3]# cat samples/bookinfo/networking/virtual-service-reviews-90-10.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 90				#通过weight参数设置流量访问的权重,90%的流量转发至V1版本
    - destination:
        host: reviews
        subset: v2
      weight: 10				#10%的流量转发至V2版本

[root@master istio-1.14.3]# kubectl get VirtualService 
NAME       GATEWAYS               HOSTS         AGE
bookinfo   ["bookinfo-gateway"]   ["*"]         144m
reviews                           ["reviews"]   2m24s

2.2 访问测试

9:1的比例显示无星和黑五星

在这里插入图片描述
在这里插入图片描述

实践三: 将50%的流量发送到Reviews V2版本的应用程序,另外50%的流量发送到Reviews V3版本的应用程序(五个红色五角星)。

3.1 修改VirtualService规则编排文件(不需要修改DestinationRule编排文件)

# 删除上个规则
[root@master istio-1.14.3]# kubectl delete -f  samples/bookinfo/networking/virtual-service-reviews-90-10.yaml
virtualservice.networking.istio.io "reviews" deleted
[root@master istio-1.14.3]# vim samples/bookinfo/networking/destination-rule-all.yaml
[root@master istio-1.14.3]# kubectl apply -f  samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml 
virtualservice.networking.istio.io/reviews created

[root@master istio-1.14.3]# cat samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v2
      weight: 50					#50%的流量转发到V2版本
    - destination:
        host: reviews
        subset: v3
      weight: 50					#50%的流量转发到V3版本


[root@master istio-1.14.3]# kubectl get VirtualService 
NAME       GATEWAYS               HOSTS         AGE
bookinfo   ["bookinfo-gateway"]   ["*"]         149m
reviews                           ["reviews"]   47s

3.2 访问测试

1:1的比例显示无星和黑五星

在这里插入图片描述
在这里插入图片描述

实践四: 将用户xunaxuan的请求转发至V3版本,其余的用户转发到V2版本(匹配HTTP头部信息的流量控制)

4.1 准备工作

Istio的灰度发布还支持基于HTTP的头部信息字段做一些流量转发控制,比如根据请求中用户使用的浏览器版本做一些流量空开,谷歌浏览器使用V2版本的程序,其他浏览器使用V3版本的程序等等,只要请求头中包含的字段都可以进行匹配然后做出流量控制。
在这里插入图片描述

4.2 修改VirtualService规则编排文件(不需要修改DestinationRule编排文件)

[root@master istio-1.14.3]# vim samples/bookinfo/networking/destination-rule-all.yaml
[root@master istio-1.14.3]# kubectl apply -f  samples/bookinfo/networking/virtual-service-reviews-jason-v2-v3.yaml 
virtualservice.networking.istio.io/reviews created

[root@master istio-1.14.3]# more samples/bookinfo/networking/virtual-service-reviews-jason-v2-v3.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - match:                    # 定义匹配规则
    - headers:                # 匹配请求头
        end-user:
          exact: xuanxuan     # 定义用户
    route:                    # 满足上面的要求流量转发到v2版本上
    - destination:
        host: reviews
        subset: v2
  - route:                    # 这边没有设定match要求,其它用户访问v3
    - destination:
        host: reviews
        subset: v3

4.3 访问测试

xuanxuan用户访问是黑色五星

在这里插入图片描述

未登入以及非xuanxuan用户访问是红色五星

在这里插入图片描述

实践五: 实现URL的流量控制(匹配HTTP头部信息的流量控制)

5.1 修改VirtualService规则编排文件(不需要修改DestinationRule编排文件)

[root@master istio-1.14.3]# vim samples/bookinfo/networking/destination-rule-all.yaml
[root@master networking]# vim virtual-service-url.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
    - bookinfo.com
  http:
  - match:
    - uri:
        prefix: /reviews
    route:
    - destination:
        host: reviews
  - match:
    - uri:
        prefix: /ratings
    route:
    - destination:
        host: ratings

[root@master networking]# kubectl get virtualservices.networking.istio.io 
NAME       GATEWAYS   HOSTS              AGE
bookinfo              ["bookinfo.com"]   3h14m
reviews               ["reviews"]        24m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值