前言:接上一篇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. 分布式 PostgreSQL 集群(Citus),官方快速入门教程

    多租户应用程序 在本教程中,我们将使用示例广告分析数据集来演示如何使用 Citus 来支持您的多租户应用程序. 注意 本教程假设您已经安装并运行了 Citus. 如果您没有运行 Citus,则可以使用 ...

  2. 【Linux】apt软件管理和远程登录

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 1. apt 介绍 apt 是 Advanced Packaging Tool 的简称,是一款安装包管理工具.在 Ubuntu 下,可以使用 ap ...

  3. 自动化运维之SaltStack初探

    1.1.基础环境 linux-node1(master服务端) 192.168.31.46 CentOS 6.6 X86_64 linux-node2(minion客户端) 192.168.31.47 ...

  4. burp token爆破(DVWA high暴力破解)

    一.选择Pitchfork模式.选择要爆破的参数 二.options设置 找到optiops(设置)把线程设为1 配置Grep=Extract,点添加 点击Refetch  response 获取返回 ...

  5. k8s集群Job Pod 容器可能因为多种原因失效,想要更加稳定的使用Job负载,有哪些需要注意的地方?

    k8s集群Job Pod 容器可能因为多种原因失效,想要更加稳定的使用Job负载,有哪些需要注意的地方? 面试官:"计数性Job默认完成模式是什么?Indexed模式如何发布自定义索引呢?& ...

  6. 【freertos】003-任务基础知识

    目录 前言 任务概念 任务状态 任务优先级 空闲任务和空闲任务钩子 空闲任务 空闲任务钩子 创建空闲钩子 创建任务 任务参数相关概念 创建静态内存任务 配置静态内存 实现空闲任务堆栈函数 实现定时器任 ...

  7. 用 Java 写一个线程安全的单例模式(Singleton)?

    请参考答案中的示例代码,这里面一步一步教你创建一个线程安全的 Java 单例类.当我们说线程安全时,意思是即使初始化是在多线程环境中,仍然能保证单个实例.Java 中,使用枚举作为单例类是最简单的方式 ...

  8. Java 中如何将字符串转换为整数?

    String s="123"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法:i=Integer.valueOf(s).intValue();

  9. 信号量,semaphore源代码之我见

    信号量,Semaphore,一个限定访问线程数量的工具类,属于并发包java.util.concurrent 里面的类. Semaphore,内部提供了构造方法(包含默认的非公平信号量构造方法,已经可 ...

  10. SpirngMVC源码分析

    分析过程 通过 前端控制器源码 分析 SpringMVC 的执行过程 前端控制器在 web.xml 文件中的配置 <!-- springmvc 前端控制器 --> <servlet& ...