前言:接上一篇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. ssh中pam模块造成认证失败

    由于编译参数增加了pam认证 安装后发现这个模块没启用 vim /etc/ssh/sshd_config UsePAM yes 将这个模块打开后就ok了

  2. ZYNQ 驱动初始化套路--UART串口

    @ 目录 UART 串口 GPIO之 MIO控制 LED 套路如下: 1.定义硬件信息结构体 namePs_Config *Config; 2.定义驱动信息结构体 namePs name_Ps; 3. ...

  3. 给windows右键添加快捷启动程序

    给windows右键添加快捷启动程序 修改点击空白处的右键 运行--redegit 打开注册表 展开第一个H..C..R 找到 Direcory,展开 找到Background 展开 右键shell, ...

  4. select、poll和epoll的区别

    操作系统在处理io的时候,主要有两个阶段: 等待数据传到io设备 io设备将数据复制到user space 我们一般将上述过程简化理解为: 等到数据传到kernel内核space kernel内核区域 ...

  5. 一种基于USB转串口的设备如何赋予权限

    1. 利用open打开USB转串口的设备遇到打开异常. 若用vs调试代码,则需要usermod 对应归到watson组下,因为watson这个是vs ssh连接虚拟机的用户名,若用root则无法使用改 ...

  6. 不会真有人还不会调用Excel吧?

    哈喽,大家好!我是指北君. 大家有没有过这样的经历:开发某个项目,需要调用Excel控件去生成Excel文件.填充数据.改变格式等等,常常在测试环境中一切正常,但在生产环境却无法正常调用Excel,不 ...

  7. Java 中计算注意!!!

    * 使用BigDecimal需要注意的事项:  * 1.两个BigDecimal值不能使用" +, -, *, / " 进行加减乘除,要使用" add, substrac ...

  8. java线程池源码分析

    我们在关闭线程池的时候会使用shutdown()和shutdownNow(),那么问题来了: 这两个方法又什么区别呢? 他们背后的原理是什么呢? 线程池中线程超过了coresize后会怎么操作呢? 为 ...

  9. 如果我不输入<!DOCTYPE HTML>,HTML 5能工作吗?

    No,浏览器将无法识别HTML文件,并且HTML 5标签将无法正常工作.

  10. 学习Kvm(二)

    一.走进云计算 云计算:云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供, ...