使用 Istio Service Mesh 管理微服务

今天的文章经过 Istio 开源项目展现如何为 Kubernetes 管理的微服务提供可见性,弹性,安全性和控制。html


服务是现代软件体系结构的核心。比起复杂庞大的总体,部署一系列模块化的小型(微型)服务可以使开发人员灵活地使用不一样的语言、技术并能放缓节奏,并会有更高的生产力和更快的速度,特别是对于大团队,效果会更好。然而,随着微服务的采用,因为大型系统中存在大量的服务,就会出现新的问题,那就须要为每一个服务处理一个复杂的问题,例如安全性,负载均衡,监控和速率限制。git


Kubernetes 和服务github


Kubernetes 经过 Service(https://kubernetes.io/docs/concepts/services-networking/service/) 构造支持微服务架构。它容许开发人员将一组 Pod(https://kubernetes.io/docs/concepts/workloads/pods/pod/) 的功能抽象出来,并经过定义良好的 API 将其展现给其余开发人员。它容许为这个抽象级别添加一个名称,并执行基本的 L4 负载均衡。可是它不能解决更高层次的问题,好比 L7 指标,流量分流,速率限制,熔断等。后端


Istio (https://istio.io/) 团队在 GlueCon 2017大会上宣布,借助 Istio 经过 Service Mesh 框架从根本上解决了这些问题。开发人员能够实现微服务的核心逻辑,并让框架负责剩下的部分,如流量管理、服务发现、服务标识和安全以及策略实施。更好的是,对于现有的微服务,也能够这样作,而不用重写或从新编译它们的任何部分。Istio 使用 Envoy (https://lyft.github.io/envoy/) 做为其运行时代理组件,并提供一个容许全球跨领域政策执行和遥测收集的可扩展的中介层 (https://istio.io/docs/concepts/policy-and-control/mixer.html)浏览器


当前版本的 Istio 是面向 Kubernetes 用户的,而且能够经过几行命令的安装方式进行打包,从而为 Kubernetes 中的微服务提供可视性,弹性,安全性和控制力。安全


在文章中,咱们将看到由4个独立的微服务组成的简单应用程序。咱们首先看看如何使用普通的 Kubernetes 部署应用程序。而后,咱们将在不改变任何应用程序代码的状况下将彻底相同的服务部署到 Istio 的群集中启用,并了解下咱们该如何观察指标。架构


在后面的文章中,咱们将重点介绍更高级的功能,如 HTTP 请求路由,策略,身份和安全管理。app


示例应用程序:BookInfo负载均衡


咱们将使用一个简单的应用程序 BookInfo ,显示商店书籍的信息,评论和评分。该应用程序由四个以不一样语言编写的微服务组成:框架


图片


由于这些微服务的容器镜像均可以在 Docker Hub 中找到,因此咱们在 Kubernetes 中部署这个应用程序须要的就是 yaml 配置。


值得注意的是,这些服务对 Kubernetes 和 Istio 没有依赖关系,但作了一个有趣的案例研究。特别是评论服务的众多服务,语言和版本使其成为一个有趣的 Service Mesh 示例。


关于这个例子: 

(https://istio.io/docs/samples/bookinfo.html) 的更多信息能够在这里找到。


在 Kubernetes 中运行

Bookinfo 应用程序


在这篇文章中,咱们将重点介绍应用的 v1版本:


图片


使用 Kubernetes 进行部署很是简单,与部署其余服务无异。productpage 微服务的服务和部署资源以下所示:


图片


若是咱们想运行应用程序,咱们须要部署的另外两个服务是详细信息和评论 v1 。咱们目前不须要部署评级服务,由于评论服务 v1 不会使用它。其他的服务基本上与 productpage 遵循相同的模式。全部服务的 yaml 文件能够在这里(https://raw.githubusercontent.com/istio/istio/master/samples/apps/bookinfo/bookinfo-v1.yaml) 找到。


做为一个普通的 Kubernetes 应用程序运行服务:


图片


要从咱们须要的 NodePort 地址的群集外部访问应用程序 productpage 服务。


图片


咱们如今能够将浏览器指向

http:// $ BOOKINFO_URL / productpage,并查看:


图片


使用 Istio 运行 Bookinfo 应用程序


如今咱们已经看到了这个应用程序,咱们稍微调整一下咱们的部署,使其与 Istio一块儿工做。 咱们首先须要在咱们的集群中安装 Istio(https://istio.io/docs/tasks/installing-istio.html)。要查想看全部的指标和启用追踪功能,咱们还能够安装可选的 Prometheus , Grafana 和 Zipkin 插件。 咱们如今能够删除之前的应用程序,并使用彻底相同的 yaml 文件再次启动 Bookinfo 应用程序,此次是 Istio :


图片


须要注意,此次在建立部署以前咱们使用 istioctl kube-inject 命令修改 bookinfo-v1.yaml 文件。在这里 (https://istio.io/docs/reference/commands/istioctl.html#istioctl-kube-inject) 它记录注入 Envoy sidecar 到 Kubernetes pods 。所以,全部微服务都与 Envoy sidecar 一块儿打包,管理服务的传入和传出流量。


在 Istio 服务网格中,就像在普通的 Kubernetes 中同样,咱们不会直接访问应用程序 productpage,相反,咱们但愿在请求路径中使用 Envoy sidecar ,就像咱们处理内部请求同样,以便咱们可使用 Istio 的管理功能(版本路由,断路器,策略等)来控制对 productpage 的外部调用。Istio 的 Ingress 控制器便用于此目的。


要使用 Istio Ingress 控制器,咱们须要为应用程序建立一个 Kubernetes Ingress 资源,并用 kubernetes.io/ingress.class 注释:“istio”,以下所示:


图片


Istio 和 Bookinfo app 的 v1版本的结果部署以下所示:


图片


此次咱们将使用 Istio Ingress 控制器的 NodePort 地址访问应用程序:


图片


如今咱们能够在 http:// $ BOOKINFO_URL / productpage 上看到页面,并再次看到正在运行的应用程序,并且与没有使用 Istio 的用户先前部署的应用应该没有什么不一样。可是,如今应用程序正在 Istio 服务网格中运行,咱们能够当即开始看到一些好处。


指标集合


咱们从 Istio 开箱便可获得的第一件事就是在 Prometheus 中收集指标。这些指标由 Envoy 中的 Istio 过滤器生成,根据默认规则(能够自定义)收集,而后发送给 Prometheus 。指标能够在 Grafana 的 Istio 视图中可视化。请注意,尽管 Prometheus 是现成的默认指标后端,但 Istio 容许您使用其余的,咱们将在之后的博客文章中演示。


为了演示,咱们将开始运行如下命令来在应用程序上生成一些负载:


图片


咱们得到 Grafana 的 NodePort URL:


图片


咱们如今能够在浏览器打开 
http:// $ GRAFANA_URL / dashboard / db / istio-dashboard ,并检查每一个 Bookinfo 服务的各类性能指标:


图片


分布式跟踪


咱们从 Istio 得到的下一个功能是使用 Zipkin 进行跟踪。咱们得到它的 NodePort URL:


图片


如今咱们能够经过浏览器打开 

http:// $ ZIPKIN_URL / 来查看经过 Bookinfo 服务的请求跨度跟踪。


图片


尽管 Envoy 代理将跟踪跨度发送到 Zipkin 开箱即用,为了充分利用其功能,应用程序须要 Zipkin 获取到并转发一些头部以将各个跨度绑定在一块儿。有关详细信息,请参阅: 

zipkin-tracing (https://istio.io/docs/tasks/zipkin-tracing.html)。


指标总体总结


Istio 提供的指标不只仅是一种便利。它们经过生成统一的度量标准来提供服务网格的一致视图。咱们没必要担忧协调各类代理运行时发出的不一样类型的指标,或者添加任意代理来收集传统的未配置的应用程序的指标。咱们也再也不须要依靠开发过程来正确地测试应用程序来生成度量标准。服务网格能够查看全部流量,甚至能够查看传统的“黑匣子”服务,并生成全部流量的度量标准。


结论


Google ,IBM 和 Lyft 自豪地宣布 Istio :一个开源项目,提供统一的链接,安全,管理和监控微服务的方。 目前的版本针对 Kubernetes 环境; 打算在将来几个月内为虚拟机和 Cloud Foundry 等其余环境增长支持。 Istio 将流量管理添加到微服务中,并为增值功能(如安全性,监控,路由,链接管理和策略)创造了基础。 该软件使用来自 Lyft 的通过测试的特使代理构建,并提供对流量的可见性和控制,而不须要对应用程序代码进行任何更改。 Istio 为 CIO 提供了强大的工具,能够在整个企业中实施安全性,政策和合规性要求。