最近接触到了 istio,感觉十分强大,写篇短文推荐给大家。本文所涉及的具体实验步骤可以参考官网教程。
istio 相关文章列表:
Istio 提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控等功能,而不需要对服务的代码做任何改动。
官网的例子在我的环境下有点问题,直接使用部署 review 应用会报 com.ibm.ws.kernel.boot.LaunchException
错误,启动失败。具体原因没找到,猜测是 websphere 和我的环境有点冲突(网上很多直接用 kubeadm 起的集群好像都有点问题)?我将它改写成了 spring boot 项目,代码可见 github 。
首先部署一个简短书评网站,构架如图。
网站包括四个微服务:
reviews 微服务有 3 个版本:
访问效果如下:
由于 Bookinfo 示例部署了三个版本的 reviews 微服务,当我们多次访问应用程序时,可以看到有时输出包含星级评分,有时又没有。
可以通过路由规则对流量进行细粒度的控制。
首先将所有流量导入 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。
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。
而以 jason 身份登录后会访问 v2 版 review(黑色五角星)。
除此以外 istio 可以在服务之间注入延迟、断开等故障。也可以做到按比例迁移等需求。
在 Istio 中,可以让 Mixer 自动为所有的网格内流量生成和报告新的指标以及新的日志流。下面以 book-info 应用为例,展示分布式追踪。
用作指标采集与查询。
虽然 Istio 代理能够自动发送 Span 信息,但还是需要一些辅助手段来把整个跟踪过程统一起来。应用程序应该自行传播跟踪相关的 HTTP Header,这样在代理发送 Span 信息的时候,才能正确的把同一个跟踪过程统一起来。
使用 grafana 对 istio 本身和服务网格进行监控。
原文:https://www.cnblogs.com/cheyunhua/p/11981692.html