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 ...
随机推荐
- JavaWeb 02_servlet基础
1. servlet是什么?作用? 1) Servlet 是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案I而具体的Servlet容器负责提供标准的 ...
- Citus 分布式 PostgreSQL 集群 - SQL Reference(创建和修改分布式表 DDL)
创建和分布表 要创建分布式表,您需要首先定义表 schema. 为此,您可以使用 CREATE TABLE 语句定义一个表,就像使用常规 PostgreSQL 表一样. CREATE TABLE ht ...
- BGP的五种报文六种状态
BGP的五种报文 Open报文:用于协商BGP参数,包括版本号,AS号等信息.在两个路由器之间建立了TCP会话之后开始交换Open信息以确认是否能形成邻居关系,是TCP建立后发送的第一个信息,类似OS ...
- RabbitMQ入门到进阶(Spring整合RabbitMQ&SpringBoot整合RabbitMQ)
1.MQ简介 MQ 全称为 Message Queue,是在消息的传输过程中保存消息的容器.多用于分布式系统 之间进行通信. 2.为什么要用 MQ 1.流量消峰 没使用MQ 使用了MQ 2.应用解耦 ...
- outlook配置osc地址(删除原账户重新配置)
方法二:使用手动配置邮箱(适用于标准化未入域机器) Step1:在"开始"菜单找到 "控制面板"并打开(或按键盘上的"Win"+" ...
- 在虚拟机里面运行java程序
首先输入vi在里面写一个java程序 然后再查找jdk 复制jdk名字 然后安装jdk 安装完之后输入Javac加你创建的文件名 然后再输入Java 和文件名(这个不要加后缀)然后就打印出来了
- 区分 BeanFactory 和 ApplicationContext?
BeanFactory ApplicationContext 它使用懒加载 它使用即时加载 它使用语法显式提供资源对象 它自己创建和管理资源对象 不支持国际化 支持国际化 不支持基于依赖的注解 支持基 ...
- 学习saltstack (五)
Saltstack介绍 Salt三种运行方式 1.local本地运行2.Master/Minion3.Salt ssh Salt的三大功能 a.远程执行b.配置管理(状态管理)c.云管理:阿里云,aw ...
- BMZCTF SDNISC2020_过去和现在
SDNISC2020_过去和现在 打开附件就一张图片 根据题意感觉是图片中隐藏了什么信息 使用binwalk -e分离这里foremost不行 三个文件查看在第一个中发现flag
- MATLAB设计模糊控制器并用simulink仿真
一.设计模糊控制器1.1 创建项目文件夹在此路径如图 1.2 打开MATLAB打开MATLAB R2012a切换当前目录为上一步路径,如图 1.3 设计模糊控制器打开模糊控制器设计对话框 根据模糊控制 ...