前言:接上一篇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

Istio实践(2)-流量控制及服务间调用的更多相关文章

  1. Asp.Net Core使用SignalR进行服务间调用

    网上查询过很多关于ASP.NET core使用SignalR的简单例子,但是大部分都是简易聊天功能,今天心血来潮就搞了个使用SignalR进行服务间调用的简单DEMO. 至于SignalR是什么我就不 ...

  2. SpringCloud初体验:三、Feign 服务间调用(FeignClient)、负载均衡(Ribbon)、容错/降级处理(Hystrix)

    FeignOpenFeign Feign是一种声明式.模板化的HTTP客户端. 看了解释过后,可以理解为他是一种 客户端 配置实现的策略,它实现 服务间调用(FeignClient).负载均衡(Rib ...

  3. SpringCloud实现服务间调用(RestTemplate方式)

    上一篇文章<SpringCloud搭建注册中心与服务注册>介绍了注册中心的搭建和服务的注册,本文将介绍下服务消费者调用服务提供者的过程. 本文目录 一.服务调用流程二.服务提供者三.服务消 ...

  4. 小D课堂 - 新版本微服务springcloud+Docker教程_4-04 高级篇幅之服务间调用之负载均衡策略调整实战

    笔记 4.高级篇幅之服务间调用之负载均衡策略调整实战     简介:实战调整默认负载均衡策略实战 自定义负载均衡策略:http://cloud.spring.io/spring-cloud-stati ...

  5. 小D课堂 - 新版本微服务springcloud+Docker教程_4-01 常用的服务间调用方式讲解

    笔记 第四章 服务消费者ribbon和feign实战和注册中心高可用 1.常用的服务间调用方式讲解     简介:讲解常用的服务间的调用方式 RPC:             远程过程调用,像调用本地 ...

  6. spring cloud服务间调用feign

    参考文章:Spring Cloud Feign设计原理 1.feign是spring cloud服务间相互调用的组件,声明式.模板化的HTTP客户端.类似的HttpURLConnection.Apac ...

  7. ②SpringCloud 实战:引入Feign组件,完善服务间调用

    这是SpringCloud实战系列中第二篇文章,了解前面第一篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 简介 Feign 是一个声明式的 RE ...

  8. 基于gin的golang web开发:服务间调用

    微服务开发中服务间调用的主流方式有两种HTTP.RPC,HTTP相对来说比较简单.本文将使用 Resty 包来实现基于HTTP的微服务调用. Resty简介 Resty 是一个简单的HTTP和REST ...

  9. SpringCloud微服务服务间调用之OpenFeign介绍

    开发微服务,免不了需要服务间调用.Spring Cloud框架提供了RestTemplate和FeignClient两个方式完成服务间调用,本文简要介绍如何使用OpenFeign完成服务间调用. Op ...

随机推荐

  1. Rsync反弹shell

    vulhub环境靶机 : 192.168.91.130 攻击机:kali 192.168.91.128 一.环境搭建 vulhub环境靶机环境搭建 ​ 在纯净ubuntu中部署vulhub环境: 1. ...

  2. 【Java分享客栈】Java程序员为争一口气熬夜硬刚CSS实现掘金首页

    前言 如果我做不了最厉害的Java工程师,那我就做Java工程师中最厉害的前端工程师. 前段时间,我默默给自己又喂了这碗心灵鸡汤-- 我不是很厉害的Java工程师,哪怕我已经工作八年,我依然觉得自己和 ...

  3. select 中的timeout

    1. select 相关man 资料 /* According to POSIX.1-2001 */ #include <sys/select.h> /* According to ear ...

  4. 论文翻译:2018_Source localization using deep neural networks in a shallow water environment

    论文地址:https://asa.scitation.org/doi/abs/10.1121/1.5036725 深度神经网络在浅水环境中的源定位 摘要: 深度神经网络(DNNs)在表征复杂的非线性关 ...

  5. dfs:10元素取5个元素的组合数

    #include "iostream.h" #include "string.h" #include "stdlib.h" int sele ...

  6. HTTP与HTTPS有什么区别

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...

  7. Java并发机制(3)--volatile关键字与内存模型

    Java并发编程:volatile关键字解析及内存模型 个人整理自:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3920373.html 1.线程内存模型: ...

  8. SpringBoot打包成可执行的Jar文件

    需要时SpringBoot项目 通过创建可以在生产环境中运行的完全独立的可执行jar文件来结束示例.可执行jar(有时称为"胖jar")是包含您的已编译类以及代码需要运行的所有ja ...

  9. Swing 是线程安全的?

    不是,Swing 不是线程安全的.你不能通过任何线程来更新 Swing 组件,如 JTable.JList 或 JPanel,事实上,它们只能通过 GUI 或 AWT 线程来更新. 这就是为什么 Sw ...

  10. Linux编译安装软件常见问题及排查

    1.配置cmake参数时提示: The C compiler identification is unknown. The CXX compiler identification is unknown ...