前言:接上一篇istio应用部署,本文介绍通过virtualservice实现流量控制,并通过部署client端进行服务调用实例

1. 修改virtualservice组件,实现权重占比访问不同版本服务(v1版本70%,v2版本30%)

  • 拆分流量使用weight关键字来设置,70%的流量走v1版本,30%的流量走v2版本

  • 输入命令,重新应用一下virtualservice组件
      sudo kubectl apply -f springbootapp-vs-v1.yaml -n springistiodemo
  • 通过istio-ingressgateway对外访问的地址,进行服务访问(http://ip:31380/hello)

  • 通过kiali管理界面,查看服务调用详情,可以看到v1版本访问占比大概达到70%左右

2. 超时时间设置,timeout:0.002s

  • 修改virtualservice的yaml文件,添加timeout属性,数值改小一些,方便测试

  • 访问服务,不断刷新,发现有一部分服务已超时,访问不到

  • 通过kiali管理界面,查看服务调用详情,发现v2版本已100% error

3. 服务间调用:运行busybox容器客户端,访问springbootapp应用服务

  • 新建一个busybox的客户端资源,与应用不在同一命名空间中,当然也可以在同一命名空间中;创建命名空间istioclient,并设置istio自动注入
      sudo kubectl create namespace istioclient
    sudo kubectl label namespace istioclient istio-injection=enabled
    sudo kubectl get ns istioclient --show-labels # 查看注入状态

  • client文件busybox-client.yaml内容
      apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: busyclient
    # namespace: istioclient
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: busyclient
    strategy:
    rollingUpdate:
    maxSurge: 25%
    maxUnavailable: 25%
    type: RollingUpdate
    template:
    metadata:
    labels:
    app: busyclient
    version: v1
    spec:
    containers:
    - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent # 不存在才拉取镜像,默认值
    command: [ "/bin/sh", "-c", "sleep 3600" ]

  • 执行命令,创建Deployment:
      sudo kubectl apply -f busybox-client.yaml -n istioclient
  • 查看pod
      sudo kubectl get pods -n istioclient

  • 进入客户端容器中,访问springbootapp服务
      sudo kubectl exec -it busyclient-5f6b7b954d-9wq5q /bin/sh -n istioclient

  • 访问springbootapp服务
      wget -q -O - http://springbootapp-svc.springistiodemo:8080/hello

    说明:
      1.上述服务格式[servicename].[namespace]:[port]/[action]
    客户端与服务不在同一命名空间下,使用上述格式访问服务,参考k8s的namespace隔离机制
    2.如在同一命名空间下,则直接使用[servicename]:[port]/[action]访问
    for i in `seq 10`;do wget -q -O - http://springbootapp-svc:8080/hello;done
    3.此处的port对应的是k8s的service(svc)节点的port端口值,不是nodePort端口设置值;
    port是service端口,即k8s中服务之间的访问端口
    targetport是pod(也就是容器)的端口
    nodeport是容器所在node节点的端口,即外部机器可访问的端口。(通过nodeport类型的service暴露给集群节点)
    4.busybox client客户端也必须经过 Istio 注入,因为只有客户端被 Istio 注入才可以接收到来自 Pilot 有关 Virtual Service 和 Destination Rule 的配置信息,才可以保证流量接管生效。
  • 可以通过命令运行busybox,退出后pod自动删除释放
      sudo kubectl run --namespace=springistiodemo busybox --rm -ti --image busybox /bin/sh

最新文章

  1. 旺财速啃H5框架之Bootstrap(三)
  2. 小众Tox——大众的“去中心化”聊天软件
  3. python Gunicorn
  4. PDA项目介绍
  5. java.net.UnknownHostException: Unable to resolve host "api102.meishi.cc": No address associated with hostname
  6. numpy.concatenate
  7. android- FileProvider崩溃 - NPE试图调用一个空字符串XmlResourceParser(FileProvider crash - npe attempting to invoke XmlResourceParser on a null String)
  8. 反弹shell的十种姿势
  9. PHPer 为什么会被 Javaer 鄙视?
  10. 最新Node.js 资源汇总
  11. python web环境相关
  12. 二、Hadoop学习笔记————架构学习
  13. 【USACO】 录制唱片
  14. Linux安装.net core
  15. Scala 按名称参数调用函数 与 =>的用法
  16. 数组,集合,字符串,bean,map
  17. Delphi中QuotedStr介绍及使用
  18. libtool 创建库的工具
  19. VMware10 安装centos6.7 设置NAT模式固定ip
  20. Packagist 镜像使用方法--composer

热门文章

  1. 内置方法 __new__ __del__
  2. java高级用法之:无所不能的java,本地方法调用实况
  3. C# 委托应用总结(委托,Delegate,Action,Func,predicate)
  4. SSL的作用?
  5. 数组有没有 length()方法?String 有没有 length()方法?
  6. 在虚拟机里面运行java程序
  7. ACM中的位运算技巧
  8. 数据库遇到的问题之“datetime设置默认为CURRENT_TIMESTAMP时报无效默认问题”和“时区问题”
  9. H5扇形
  10. C#编写一个简易的文件管理器