Istio实践(2)-流量控制及服务间调用
前言:接上一篇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)-流量控制及服务间调用的更多相关文章
- Asp.Net Core使用SignalR进行服务间调用
网上查询过很多关于ASP.NET core使用SignalR的简单例子,但是大部分都是简易聊天功能,今天心血来潮就搞了个使用SignalR进行服务间调用的简单DEMO. 至于SignalR是什么我就不 ...
- SpringCloud初体验:三、Feign 服务间调用(FeignClient)、负载均衡(Ribbon)、容错/降级处理(Hystrix)
FeignOpenFeign Feign是一种声明式.模板化的HTTP客户端. 看了解释过后,可以理解为他是一种 客户端 配置实现的策略,它实现 服务间调用(FeignClient).负载均衡(Rib ...
- SpringCloud实现服务间调用(RestTemplate方式)
上一篇文章<SpringCloud搭建注册中心与服务注册>介绍了注册中心的搭建和服务的注册,本文将介绍下服务消费者调用服务提供者的过程. 本文目录 一.服务调用流程二.服务提供者三.服务消 ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-04 高级篇幅之服务间调用之负载均衡策略调整实战
笔记 4.高级篇幅之服务间调用之负载均衡策略调整实战 简介:实战调整默认负载均衡策略实战 自定义负载均衡策略:http://cloud.spring.io/spring-cloud-stati ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-01 常用的服务间调用方式讲解
笔记 第四章 服务消费者ribbon和feign实战和注册中心高可用 1.常用的服务间调用方式讲解 简介:讲解常用的服务间的调用方式 RPC: 远程过程调用,像调用本地 ...
- spring cloud服务间调用feign
参考文章:Spring Cloud Feign设计原理 1.feign是spring cloud服务间相互调用的组件,声明式.模板化的HTTP客户端.类似的HttpURLConnection.Apac ...
- ②SpringCloud 实战:引入Feign组件,完善服务间调用
这是SpringCloud实战系列中第二篇文章,了解前面第一篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 简介 Feign 是一个声明式的 RE ...
- 基于gin的golang web开发:服务间调用
微服务开发中服务间调用的主流方式有两种HTTP.RPC,HTTP相对来说比较简单.本文将使用 Resty 包来实现基于HTTP的微服务调用. Resty简介 Resty 是一个简单的HTTP和REST ...
- SpringCloud微服务服务间调用之OpenFeign介绍
开发微服务,免不了需要服务间调用.Spring Cloud框架提供了RestTemplate和FeignClient两个方式完成服务间调用,本文简要介绍如何使用OpenFeign完成服务间调用. Op ...
随机推荐
- pycharm远程调试、开发(详细操作)
如果仅是远程开发,新建 ssh Interpreter 并 apply tools -> deployment -> browser remote host 即可 1.服务器侧准备 准备调 ...
- redis哨兵功能
redis哨兵功能 redis-Sentinel(哨兵) 前言 当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户都没有实现主从切换的功能 redis ...
- I 安装饮水机 中国石油大学新生训练赛#10
问题 I: 安装饮水机 时间限制: 1 Sec 内存限制: 128 MB提交 状态 题目描述 为倡导城市低碳生活,市文明办计划举办马拉松比赛,为确保比赛安全,沿途设置了一些观察点.每个观察点派一个观 ...
- python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)
经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路. 我们在百度搜索天气查询,会出现如下图所示结果: 接下来,我们以该天气查询接口为例,编写接 ...
- Oacle 插入多条记录的语法理解;INSERT ALL INTO ....... SELECT 1 FROM dual;
单表Insert into的语句就不说了,这里主要说插入多条语句的说明 For a multitable insert operation, each expression in the values ...
- 构造器(constructor)是否可被重写(override)?
构造器不能被继承,因此不能被重写,但可以被重载.
- 什么是RabbitMQ?RabbitMQ的使用场景是什么?
参考链接:RabbitMQ 简介以及使用场景
- kafka consumer代码梳理
kafka consumer是一个单纯的单线程程序,因此相对于producer会更好理解些.阅读consumer代码的关键是理解回调,因为consumer中使用了大量的回调函数.参看kafka中的回调 ...
- Javascript Range对象的学习
Range对象有几个特别难理解的属性,这里学习总结下 Range.startOffset:返回一个表示 Range 起点在 startContainer 中的位置的数字.此属性的值与Range.sta ...
- CAS和CAP代表的作用
CAS(自旋锁):https://www.jianshu.com/p/ab2c8fce878b CAP原则:https://baike.baidu.com/item/CAP原则/5712863?fr= ...