OpenShift 4 之Istio-Tutorial (5) 其它流量控制场景以及VirtualService和DestinationRule的关系
《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.8环境中验证
在上一节我们了解可如何通过流量管理实现灰度发布,本节我们再介绍Istio的其它两个流量控制功能:流量镜像和流量负载均衡。这些功能都是通过VirtualService和DestinationRule实现的。
文章目录
- 流量镜像
- Service对于Pod的流量负载均衡
- VirtualService和DestinationRule的关系
流量镜像
- 在第一个命令窗口获得运行recommendation-v1和recommendation-v2的pod实例名。
$ oc get pod -n tutorial -l app=recommendation
NAME READY STATUS RESTARTS AGE
recommendation-v1-dd8544f7c-s64sx 2/2 Running 0 56m
recommendation-v2-5494578985-mx7ft 2/2 Running 0 18m
- 在第一个命令窗口执行命令查看运行recommendation-v2微服务的容器日志。
$ oc logs -f $(oc get pod | grep recommendation-v2 | awk '{print $1}') -c recommendation -n tutorial
- 在第二个命令窗口执行命令修改VirtualService策略,将请求发到recommendation-v1上,同时镜像转发到recommendation-v2上。
文件 istiofiles/virtual-service-recommendation-v1-mirror-v2.yml定义了镜像mirror的转发策略。
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:name: recommendation
spec:hosts:- recommendationhttp:- route:- destination:host: recommendationsubset: version-v1mirror:host: recommendationsubset: version-v2
- 执行命令修改对recommendation的VirtualService策略:
$ oc apply -n tutorial -f istiofiles/virtual-service-recommendation-v1-mirror-v2.yml
- 在第二个命令窗口向customer微服务请求。此时此窗口可以看到请求发到“recommendation v1”
$ curl $INGRESS_GATEWAY/customer
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 924
- 在第一个命令窗口中同时会看到recommendation-v2日志有一行新纪录,说明请求也被镜像转发到了recommendation-v2微服务。
- 删除基于镜像策略的VirutalService对象。
$ oc delete -f istiofiles/virtual-service-recommendation-v1-mirror-v2.yml -n tutorial
Service对于Pod的流量负载均衡
当一个微服务有多个版本或实例的时候,如果没有为Serivce定义DestinationRule,Serivce是按照轮序(round-robin)的方式将请求发给它对应的多个Pod。我们可以为Serivce定义DestinationRule对象,以实现从Service到Pod的负载均衡策略。
- 删除上一步创建的基于镜像策略的VirutalService对象。注意:此时已经没有针对recommendation的VirutalService了。
$ oc delete -f istiofiles/virtual-service-recommendation-v1-mirror-v2.yml -n tutorial
$ oc get istio-io -n tutorial
NAME GATEWAYS HOSTS AGE
virtualservice.networking.istio.io/customer-gateway ["customer-gateway"] ["*"] 133mNAME AGE
gateway.networking.istio.io/customer-gateway 133mNAME HOST AGE
destinationrule.networking.istio.io/recommendation recommendation 35m
- 将运行recommendation-v2微服务Pod实例增加到3个。
$ oc scale deployment recommendation-v2 --replicas=3 -n tutorial
$ oc get pod -n tutorial -l app=recommendation,version=v2
NAME READY STATUS RESTARTS AGE
recommendation-v2-5494578985-8phpb 2/2 Running 0 2m30s
recommendation-v2-5494578985-mx7ft 2/2 Running 0 78m
recommendation-v2-5494578985-wl9dw 2/2 Running 0 2m30s
- 运行命令,查看请求转发到recommendation微服务的情况。此时从序列号可以看到请求是按照Pod实例轮训分发的。
$ ./scripts/run.sh $INGRESS_GATEWAY/customer
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 1332
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-mx7ft': 82
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-8phpb': 1
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-wl9dw': 1
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 1333
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-mx7ft': 83
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-8phpb': 2
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-wl9dw': 2
...
- 运行命令修改DestinationRule对象的负载均衡策略为随机发送。
文件istiofiles/destination-rule-recommendation_lb_policy_app.yml中配置对所有recommendation的为随机发送,无论是recommendation-v1还是recommendation-v2,无论是那个pod实例。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:name: recommendation
spec:host: recommendationtrafficPolicy:loadBalancer:simple: RANDOM
执行命令修改DestinationRule对象:
$ oc apply -f istiofiles/destination-rule-recommendation_lb_policy_app.yml -n tutorial
- 运行命令,查看请求转发到recommendation微服务的情况。从序列号可以看到请求是随机分发到后台不同recommendation的实例。
$ ./scripts/run.sh $INGRESS_GATEWAY/customer
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-wl9dw': 4
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 1420
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-8phpb': 26
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 1421
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-wl9dw': 5
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-wl9dw': 6
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-mx7ft': 227
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 1422
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-wl9dw': 7
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-mx7ft': 228
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-mx7ft': 229
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-wl9dw': 8
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 1423
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 1424
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-8phpb': 5
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-mx7ft': 230
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-wl9dw': 9
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 1425
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-8phpb': 6
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-wl9dw': 10
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 1426
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 1427
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 1428
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 1429
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-8phpb': 7
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-mx7ft': 231
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 1430
customer => preference => recommendation v2 from 'recommendation-v2-5494578985-mx7ft': 232
...
VirtualService和DestinationRule的关系
从上面的操作我们可以看出VirtualService对象和DestinationRule对象既可以单独使用、也可以结合使用。功能上VirtualService的功能之一是在后端不同Service中选择一个转发请求,而Service是在后端不同Pod中选择一个转发请求。VirtualService和DestinationRule是通过subnet关联起来的。
本文第二个场景“Service对于Pod的流量负载均衡”就是独立使用DestinationRule,而VirtualService也独立使用,例如下面把对reviews.com的请求中的一部分发到dev.reviews.com。
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:name: reviews-route-two-domains
spec:hosts:- reviews.comhttp:- route:- destination:host: dev.reviews.comweight: 25- destination:host: reviews.comweight: 75
OpenShift 4 之Istio-Tutorial (5) 其它流量控制场景以及VirtualService和DestinationRule的关系相关推荐
- OpenShift / RHEL / DevSecOps 汇总目录
文章目录 OpenShift / RHEL / DevSecOps 汇总目录 OpenShift 入门 OpenShift 安装 免费线上环境 CRC单机环境 MicroShift Online安装 ...
- OpenShift 4 之Service Mesh教程(4)- 跟踪访问后端服务超时
<OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 本文说明如何在Istio中的VirtualService中设置访问的timeout特性 ...
- Istio 网关中的 Gateway 和 VirtualService 配置深度解析
原文链接:请求都去哪了? 通过前几篇文章的学习与实践,我们对 Gateway.VirtualService 和 Destinationrule 的概念和原理有了初步的认知,本篇将对这几个对象资源的配置 ...
- Istio金丝雀发布
前言 金丝雀部署的方式有很多种,istio只是其中一种选择, Kubernetes 这样的平台已经提供了进行版本上线和金丝雀部署的方法,但很多问题依然不能解决, 所以使用Istio作为金丝雀部署方案也 ...
- 实现全托管,腾讯云服务网格的架构演进
导语 | 腾讯云服务网格(TCM)作为一个兼容 isito 的服务网格平台,已经在腾讯内外部有诸多落地案例.本文是对腾讯云高级工程师钟华.苗艳强在云+社区沙龙online的分享整理,深度解析服务网格架 ...
- java常见微服务架构
1.dubbo 阿里巴巴研发的一款微服务组件,服务调用使用RPC 服务注册Zookeeper 服务调用dubbo 2.Spring Cloud Netflix Spring Cloud 的第一代实现, ...
- OpenShift 4 之Istio-Tutorial (4) 流量控制和灰度发布
<OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 本章节我们先部署一个微服务的新版本,然后基于Istio流量控制功能实现灰度发布的微服务 ...
- OpenShift 4 之Istio-Tutorial (6) 服务恢复能力(重试、超时、断路器)
<OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 文章目录 准备环境 重试(Fail Try) 超时(Timeout) 断路器(Circ ...
- OpenShift 4 - Istio-Tutorial (2) 部署三个微服务
<OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 本系列演示的场景使用了基于Java实现的三个微服务:Customer.Preferen ...
最新文章
- R语言KMeans聚类分析确定最优聚类簇数实战:期望最大化expectation-maximization准则(确定最优聚类簇数)
- 好书推荐:《零基础快速入行入职软件测试工程师》学测试一本就
- 使用NSURLConnection实现大文件断点下载
- 比特币的超能力:永恒不变
- ue4集合类型_3D游戏开发之UE4中的集合:TSet容器
- cnpm install -g live-server 安装服务
- 使用Azure DevOps Pipeline实现.Net Core程序的CD
- java local_java.time.LocalDateTime with()方法
- 操作系统——进程的状态及转换
- 由于AsyncTask是一个单独的类,如何使OnPostExecute()的结果进入主要活动?
- 关于Sliverlight的一些问题
- HDU2837 Calculation(指数循环节)题解
- Windows10更新工具
- css shine_什么是Shine Enterprise Java模式?
- ulp(unit in the last place)是什么意思
- 一战封神——提升奇珍提高战力
- 目前网页制作的基本语言html,第二讲网页制作基本语言HTML”.ppt
- spyder 设置中文_Spyder代理设置
- RTX之——时间管理
- 给bootstrap-treeview增加点击事件,单击菜单也能展开和折叠
热门文章
- 启动白屏处理_App启动优化一顿操作猛如虎
- 苹果切换系统按哪个键_Mac如何切换系统?
- enityframework 已连接的当前状态为打开。_关于性能优化 从tcp建立连接amp;断开的视角...
- redis查看某一个key的大小_Redis笔记
- netbeans 添加gif图片_告别PC 用手机完成各种GIF动画编辑
- 设计师分享社区,展示风采平台
- 电商(电子商务)网站设计技巧|从可临摹素材模板开始
- UI设计实用素材|订阅按钮(CTA按钮 )
- UI干货素材模板|从做好网页头部内容设计开始!
- oracle几何体数据类型,Oracle数据库之spatial操作geometry方法