OpenShift 4 之Istio-Tutorial (5) 其它流量控制场景以及VirtualService和DestinationRule的关系

34 篇文章 1 订阅
21 篇文章 3 订阅

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

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

流量镜像

  1. 在第一个命令窗口获得运行recommendation-v1和recommendation-v2的pod实例名。
$ oc get pod -n ${ISTIO_APP} -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 ${ISTIO_APP}
  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:
  - recommendation
  http:
  - route:
    - destination:
        host: recommendation
        subset: version-v1
    mirror:
      host: recommendation
      subset: version-v2
  1. 执行命令修改对recommendation的VirtualService策略:
$ oc apply -n ${ISTIO_APP} -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 ${ISTIO_APP}

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 ${ISTIO_APP}
$ oc get virtualservice -n ${ISTIO_APP}
NAME               GATEWAYS               HOSTS   AGE
customer-gateway   ["customer-gateway"]   ["*"]   133m

$ oc get gateway -n ${ISTIO_APP}
NAME               AGE
customer-gateway   133m

$ oc get destinationrule -n ${ISTIO_APP}
NAME             HOST             AGE
recommendation   recommendation   35m
  1. 将运行recommendation-v2微服务Pod实例增加到3个。
$ oc scale deployment recommendation-v2 --replicas=3 -n ${ISTIO_APP}
$ oc get pod  -n ${ISTIO_APP} -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: recommendation
  trafficPolicy:
    loadBalancer:
      simple: RANDOM

执行命令修改DestinationRule对象:

$ oc apply -f istiofiles/destination-rule-recommendation_lb_policy_app.yml -n ${ISTIO_APP}
  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.com
  http:
  - route:
    - destination:
        host: dev.reviews.com
      weight: 25
    - destination:
        host: reviews.com
      weight: 75
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值