最近接触到了 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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最新文章

  1. Linux下安装使用Solr
  2. 你们信不信一句Console.WriteLine就能让你的控制台程序失去响应
  3. 在Gradle中使用jaxb的xjc插件
  4. js 中{},[]中括号,大括号使用详解
  5. TortoiseSVN的相关问题
  6. 6.3.28微信需群主确认才可进群&发GIF动图功能内测开始了
  7. 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!【转载+整理】
  8. 微信公众号API返回不可打印字符的处理。
  9. sql ROUND() 函数三个参数的含义
  10. 软件工程随堂小作业——(C++)
  11. android sdk manager下载慢可以使用代理信息
  12. nginx 请求负载 转发规则设置
  13. cocos2d-x 不规则形状按钮的点击判定
  14. 抛弃JQ,回归原生js……
  15. 这么说吧,java线程池的实现原理其实很简单
  16. react 开发知识准备
  17. [NOIp 2009]Hankson的趣味题
  18. Jquery图集
  19. vue 项目实战 (生命周期钩子)
  20. MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本

热门文章

  1. xinetd配置文件
  2. springboot学习笔记(二)—— springboot的启动模式设置
  3. 题解 洛谷P3745 【[六省联考2017]期末考试】
  4. 【Python学习】Python3 基础语法
  5. java中equals和==的使用
  6. 使用Default Trace查看谁还原了你的数据库?
  7. c# 自动将string字符串转成实体属性的类型
  8. redis系列(五):搭建redis-cluster集群
  9. OpenStack RPC框架解析
  10. Codeforces 1172E Nauuo and ODT [LCT]