最近接触到了 istio,感觉十分强大,写篇短文推荐给大家。本文所涉及的具体实验步骤可以参考官网教程

istio 相关文章列表:

istio 是什么

Istio 提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控等功能,而不需要对服务的代码做任何改动。

  • istio 适用于容器或虚拟机环境(特别是 k8s),兼容异构架构。
  • istio 使用 sidecard(边车模式)代理服务的网络,不需要对业务代码本身做任何的改动。
  • HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。
  • istio 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制;支持访问控制、速率限制和配额。
  • istio 对出入集群入口和出口中所有流量的自动度量指标、日志记录和跟踪。

部署示例

官网的例子在我的环境下有点问题,直接使用部署 review 应用会报 com.ibm.ws.kernel.boot.LaunchException 错误,启动失败。具体原因没找到,猜测是 websphere 和我的环境有点冲突(网上很多直接用 kubeadm 起的集群好像都有点问题)?我将它改写成了 spring boot 项目,代码可见 github

首先部署一个简短书评网站,构架如图。

 
构架示意

网站包括四个微服务:

  1. productpage :本服务会调用 details 和 reviews 两个微服务,用来生成页面。
  2. details :这个微服务包含了书籍的信息。
  3. reviews :这个微服务包含了书籍相关的评论。它还会调用 ratings 微服务。
  4. ratings :ratings 微服务中包含了由书籍评价组成的评级信息。

reviews 微服务有 3 个版本:

  1. v1 版本不会调用 ratings 服务。
  2. v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
  3. v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。

访问效果如下:

 
访问效果

由于 Bookinfo 示例部署了三个版本的 reviews 微服务,当我们多次访问应用程序时,可以看到有时输出包含星级评分,有时又没有。

智能路由

可以通过路由规则对流量进行细粒度的控制。

1. 自定义路由

首先将所有流量导入 v1 版本的 reviews

使用如下配置,并提交给 k8s 。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1

稍等几秒钟就可以看到变化:

 
提交配置后的访问效果

可以看到现在所有流量都走 v1 版 review。

根据 header 内容分发流量

istio 可以基于内容分发流量,在这里我们让普通用户全部访问 v1 版,而特殊用户(jason)访问 v2 版。
使用如下配置,并提交给 k8s。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1

可以看到普通用户仍然访问 v1 版 review。

 
普通用户仍然访问 v1 版 review

而以 jason 身份登录后会访问 v2 版 review(黑色五角星)。

 
jason 访问 v2 版 review

除此以外 istio 可以在服务之间注入延迟、断开等故障。也可以做到按比例迁移等需求。

监控

在 Istio 中,可以让 Mixer 自动为所有的网格内流量生成和报告新的指标以及新的日志流。下面以 book-info 应用为例,展示分布式追踪。

Prometheus

用作指标采集与查询。

 
Prometheus 指标查询
 
Prometheus 指标采集 job

分布式追踪

虽然 Istio 代理能够自动发送 Span 信息,但还是需要一些辅助手段来把整个跟踪过程统一起来。应用程序应该自行传播跟踪相关的 HTTP Header,这样在代理发送 Span 信息的时候,才能正确的把同一个跟踪过程统一起来。

 
productpage 服务访问总览
 
调用链追踪
 
服务拓扑图

grafana

使用 grafana 对 istio 本身和服务网格进行监控。

 
服务大盘
 
client workload
 

作者:RuiWang14
链接:https://www.jianshu.com/p/bed143a1c886
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

istio 简介的更多相关文章

  1. Service Mesh服务网格新生代--Istio

    原文: 数人云|万字解读:Service Mesh服务网格新生代--Istio 参考: istio 简介 Istio是啥?一文带你彻底了解! 使用Istio治理微服务入门 Istio 流量管理 ist ...

  2. 服务网格istio概念应知应会

    一.背景 最近架构组基于istio开发了服务网格(Service Mesh)平台,借此机会把相关的背景知识做一次学习和记录,方便回头查看. 初版的效果: 二.istio 官方手册:https://is ...

  3. Istio实践(1)-环境搭建及应用部署

    1. Istio简介 Istio是最初由IBM,Google和Lyft开发的服务网格的开源实现.它可以透明地分层到分布式应用程序上,并提供服务网格的所有优点,例如流量管理,安全性和可观察性. 它旨在与 ...

  4. Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14

    目录 一.模块概览 二.系统环境 三.安装istio 3.1 使用 Istioctl 安装 3.2 使用 Istio Operator 安装 3.3 生产部署情况如何? 3.4 平台安装指南 四.Ge ...

  5. image management in kubernet

    Image How can I edit an existing docker image metadata? docker-copyedit Registry Disk kubevirtis a g ...

  6. 基于Kubernetes 的Cloud Native 实战 培训课程安排

    课程安排: 基于Kubernetes 的Cloud Native 实战 课程介绍: 云计算.虚拟化.容器微服务PaaS 技术已经广泛应用于新兴互联网企业(如电商平台.搜索引擎.社交平台网站.位置服务平 ...

  7. 浅谈服务治理、微服务与Service Mesh(三) Service Mesh与Serverless

    作为本系列文章的第三篇(前两篇<浅谈服务治理.微服务与Service Mesh(一)Dubbo的前世今生>,<浅谈服务治理.微服务与Service Mesh(二) Spring Cl ...

  8. 云原生网络代理(MOSN)的进化之路

    本文系云原生应用最佳实践杭州站活动演讲稿整理.杭州站活动邀请了 Apache APISIX 项目 VP 温铭.又拍云平台开发部高级工程师莫红波.蚂蚁金服技术专家王发康.有赞中间件开发工程师张超,分享云 ...

  9. Java进阶专题(二十八) Service Mesh初体验

    前言 ​ ⽬前,微服务的架构⽅式在企业中得到了极⼤的发展,主要原因是其解决了传统的单体架构中存在的问题.当单体架构拆分成微服务架构就可以⾼枕⽆忧了吗? 显然不是的.微服务架构体系中同样也存在很多的挑战 ...

随机推荐

  1. python 全局声明 global

    https://www.cnblogs.com/Lin-Yi/p/7305364.html 在基本的python语法当中,一个函数可以随意读取全局数据,但是要修改全局数据的时候有两种方法:1 glob ...

  2. 关于元素间的边距重叠问题与BFC

    一.边距重叠常见情况 1.垂直方向上相邻元素的重叠 (水平方向上不会发生重叠) 2. 垂直方向上父子元素间的重叠 二.BFC 1.什么是 BFC BFC(Block Formatting Contex ...

  3. 神经网络学习中的损失函数及mini-batch学习

    # 损失函数(loss function).这个损失函数可以使用任意函数,# 但一般用均方误差(mean squared error)和交叉熵误差(cross entropy error)等一切都在代 ...

  4. 《你又怎么了我错了行了吧》【Beta】Scrum meeting 3

    第三天 日期:2019/6/26 前言: 第3次会议在女生宿舍召开(前一天晚上开的) 项目全部基本测试完成,解决了多处bug,明天终于可以拿去演示了.... 1.1 今日完成任务情况.成员贡献时间及工 ...

  5. 关于jquery的事件委托-bind,live,delegate,on的区别发展

    1.bind()方法 (只能给已经存在的元素上绑定事件) 只能给调用它的时候已经存在的元素绑定事件,不能给未来新增的元素绑定事件. $('ul li').bind('click', function( ...

  6. kafka的HA机制

    1.kafka的HA机制:副本机制+消息同步+leader选举. 每个topic有多个partition,每个partition又有多个副本,这些副本当中也存在不同的角色,leader.followe ...

  7. usa单位换算

    1.温度换算 摄氏度    C = 5/9(F-32) ≍ (F-32)/1.8 (F为华氏温度值) 华氏度   F = 1.8C + 32 (C为摄氏温度值) 3.重量换算 1品脱(pint) ≍ ...

  8. Mysql 查询阻塞和事物情况

    MYSQL 服务器逻辑架构图 连接/线程处理 == > (解析器 –> 查询缓存) ===> 优化器 ===> 存储引擎 服务器级别锁MYSQL 使用的锁类型:表锁(显式:LO ...

  9. flutter ListView 页面滚动组件

    ListView class A scrollable list of widgets arranged linearly. ListView is the most commonly used sc ...

  10. MySQL Create table as / Create table like

    a.create table like方式会完整地克隆表结构,但不会插入数据,需要单独使用insert into或load data方式加载数据 b.create table as  方式会部分克隆表 ...