《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.8环境中验证

在上一节我们了解可如何通过流量管理实现灰度发布,本节我们再介绍Istio的其它两个流量控制功能:流量镜像和流量负载均衡。这些功能都是通过VirtualService和DestinationRule实现的。

文章目录

  • 流量镜像
  • Service对于Pod的流量负载均衡
  • VirtualService和DestinationRule的关系

流量镜像

  1. 在第一个命令窗口获得运行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
  1. 在第一个命令窗口执行命令查看运行recommendation-v2微服务的容器日志。
$ oc logs -f $(oc get pod | grep recommendation-v2 | awk '{print $1}') -c recommendation -n tutorial
  1. 在第二个命令窗口执行命令修改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
  1. 执行命令修改对recommendation的VirtualService策略:
$ oc apply -n tutorial -f istiofiles/virtual-service-recommendation-v1-mirror-v2.yml
  1. 在第二个命令窗口向customer微服务请求。此时此窗口可以看到请求发到“recommendation v1”
$ curl $INGRESS_GATEWAY/customer
customer => preference => recommendation v1 from 'recommendation-v1-dd8544f7c-s64sx': 924
  1. 在第一个命令窗口中同时会看到recommendation-v2日志有一行新纪录,说明请求也被镜像转发到了recommendation-v2微服务。
  2. 删除基于镜像策略的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的负载均衡策略。

  1. 删除上一步创建的基于镜像策略的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
  1. 将运行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
  1. 运行命令,查看请求转发到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
...
  1. 运行命令修改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
  1. 运行命令,查看请求转发到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的关系相关推荐

  1. OpenShift / RHEL / DevSecOps 汇总目录

    文章目录 OpenShift / RHEL / DevSecOps 汇总目录 OpenShift 入门 OpenShift 安装 免费线上环境 CRC单机环境 MicroShift Online安装 ...

  2. OpenShift 4 之Service Mesh教程(4)- 跟踪访问后端服务超时

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 本文说明如何在Istio中的VirtualService中设置访问的timeout特性 ...

  3. Istio 网关中的 Gateway 和 VirtualService 配置深度解析

    原文链接:请求都去哪了? 通过前几篇文章的学习与实践,我们对 Gateway.VirtualService 和 Destinationrule 的概念和原理有了初步的认知,本篇将对这几个对象资源的配置 ...

  4. Istio金丝雀发布

    前言 金丝雀部署的方式有很多种,istio只是其中一种选择, Kubernetes 这样的平台已经提供了进行版本上线和金丝雀部署的方法,但很多问题依然不能解决, 所以使用Istio作为金丝雀部署方案也 ...

  5. 实现全托管,腾讯云服务网格的架构演进

    导语 | 腾讯云服务网格(TCM)作为一个兼容 isito 的服务网格平台,已经在腾讯内外部有诸多落地案例.本文是对腾讯云高级工程师钟华.苗艳强在云+社区沙龙online的分享整理,深度解析服务网格架 ...

  6. java常见微服务架构

    1.dubbo 阿里巴巴研发的一款微服务组件,服务调用使用RPC 服务注册Zookeeper 服务调用dubbo 2.Spring Cloud Netflix Spring Cloud 的第一代实现, ...

  7. OpenShift 4 之Istio-Tutorial (4) 流量控制和灰度发布

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 本章节我们先部署一个微服务的新版本,然后基于Istio流量控制功能实现灰度发布的微服务 ...

  8. OpenShift 4 之Istio-Tutorial (6) 服务恢复能力(重试、超时、断路器)

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 文章目录 准备环境 重试(Fail Try) 超时(Timeout) 断路器(Circ ...

  9. OpenShift 4 - Istio-Tutorial (2) 部署三个微服务

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 本系列演示的场景使用了基于Java实现的三个微服务:Customer.Preferen ...

最新文章

  1. R语言KMeans聚类分析确定最优聚类簇数实战:期望最大化expectation-maximization准则(确定最优聚类簇数)
  2. 好书推荐:《零基础快速入行入职软件测试工程师》学测试一本就
  3. 使用NSURLConnection实现大文件断点下载
  4. 比特币的超能力:永恒不变
  5. ue4集合类型_3D游戏开发之UE4中的集合:TSet容器
  6. cnpm install -g live-server 安装服务
  7. 使用Azure DevOps Pipeline实现.Net Core程序的CD
  8. java local_java.time.LocalDateTime with()方法
  9. 操作系统——进程的状态及转换
  10. 由于AsyncTask是一个单独的类,如何使OnPostExecute()的结果进入主要活动?
  11. 关于Sliverlight的一些问题
  12. HDU2837 Calculation(指数循环节)题解
  13. Windows10更新工具
  14. css shine_什么是Shine Enterprise Java模式?
  15. ulp(unit in the last place)是什么意思
  16. 一战封神——提升奇珍提高战力
  17. 目前网页制作的基本语言html,第二讲网页制作基本语言HTML”.ppt
  18. spyder 设置中文_Spyder代理设置
  19. RTX之——时间管理
  20. 给bootstrap-treeview增加点击事件,单击菜单也能展开和折叠

热门文章

  1. 启动白屏处理_App启动优化一顿操作猛如虎
  2. 苹果切换系统按哪个键_Mac如何切换系统?
  3. enityframework 已连接的当前状态为打开。_关于性能优化 从tcp建立连接amp;断开的视角...
  4. redis查看某一个key的大小_Redis笔记
  5. netbeans 添加gif图片_告别PC 用手机完成各种GIF动画编辑
  6. 设计师分享社区,展示风采平台
  7. 电商(电子商务)网站设计技巧|从可临摹素材模板开始
  8. UI设计实用素材|订阅按钮(CTA按钮 )
  9. UI干货素材模板|从做好网页头部内容设计开始!
  10. oracle几何体数据类型,Oracle数据库之spatial操作geometry方法