小黄人学 Service Mesh之Istio

导读:Bob从图书馆出来,巧遇学霸学长....

这是证书文件:

早在去年,Service Mesh 这个概念就开始火起来了,今年的时候 Service Mesh 更是爆发式地发展,Service Mesh 中的明星项目 Istio 更是只用了几个月的时间就已经从 0.1 到了 1.0 LTS 了。由于工作和毕业的压力,之前一直没有时间深入研究 Service Mesh。现在稍微有些时间了,所以打算写点什么关于 Service Mesh 的。

Istio 的背景我不过多介绍,G 家等大厂搞出来并且在后面推动支持的肯定不会弱。

根据 Istio 的官方文档,是这么定义自己的:一个用来连接、管理和加密微服务(流量)的开放平台。

an open platform to connect, manage, and secure microservices

Istio 可以让你在不修改微服务源代码的情况之下,很轻松地给微服务加上诸如负载均衡、身份验证、监控等等的功能。Istio 通过在你的微服务中部署一个 sidecar 作为所有流量的代理来达成这个目标。

总结下来,Istio 提供了以下功能:

流量管理(Traffic Management)

服务的身份认证和安全(Service Identity and Security)

策略配置(Policy Enforcement)

遥感(Telemetry)

除了这些之外,Istio 还支持很多不同的平台(尤其是 Kubernetes),并且支持自定义的组件和集成。

Istio 是两层架构的,分别是数据层和控制层:

数据层是由所有的部署为 sidecar 的 Envoy 所组成的。

控制层有三个组件:Pilot、Mixer 和 Citadel,顾名思义是用来控制 Service Mesh 的行为的。

总体的架构如下图:

Istio 用了一个扩展版本的 Envoy 作为底层的代理。Envoy 是一个用 C++ 开发的高性能的代理,具有非常多功能,具体的可以参考官方文档,在此不做赘述。

Envoy 在 Istio 中是以 sidecar 模式部署在 pod 里面的,Istio 通过控制 Envoy 来控制所有的流量,获取监控数据等。

Pilot 为 Envoy 提供服务发现、智能路由(如 AB 测试、金丝雀部署)和弹性流量管理功能(如超时、重试、熔断)。它负责将高层的抽象的路由规则转化成低级的 envoy 的配置。

Mixer 是一个平台无关的组件,用来控制访问策略和使用策略,同时会收集监控信息,将收集到的信息传给用户可以自定义的后端进行处理。

Citadel 提供了服务间和服务到终端用户的认证,同时可以直接将 http 流量升级成 https 流量。具体的可以查看官方文档。

在这里我打算使用 helm 进行安装。

Prerequisite

首先,你得有一个可运行的 Kubernetes 集群,我是在 GKE上开了一个三节点的集群作为测试使用。

其次,你得需要有 helm 的客户端。mac 用户可以通过 brew 来安装。

下载 release

Istio 提供了一个很方便的脚本来下载并解压最新版的 Istio,如下:

等下载完之后,我们可以进入文件夹,并把 bin 目录加到 path 里面:

使用 helm 进行安装

要使用 helm 来安装 istio,首先需要在集群里面配置好 helm 和 tiller,如下:

等 helm 和 tiller 配置完之后,就可以使用 helm 来一键安装 Istio 了:

这样,Istio 就安装好了。

为了验证安装是否成功,我们可以看一下是否部署了以下的 service:

并且确认以下的 Pod 是否在 running 状态:

当然,我们也可以自定义一些参数,具体的请看官方文档 –name istio –namespace istio-system)。

我们的样例应用叫做 BookInfo,这个应用由四个微服务所组成,具体架构图如下:

这个应用是用不同的语言所写的,让我们来见识一下 Istio 的魔力吧。

安装这个应用非常简单,我们只要执行以下命令即可:

我们可以注意一下,在bookinfo.yaml中的 manifest 如下:

但是我们真正部署出来后,变成了这样:

可以看到,本来只有一个 container 的,现在里面多了一个 container 和 initContainer。这个就是 Istio 的 Auto Injection,可以自动把 sidecar 注入到 Pod 里面,让我们不需要手动一个一个修改 yaml 文件,也防止手动修改过程中出错的可能。

使用实例

这里我们以路由设置为例子。

首先我们打开刚才部署好的这个应用的网页,可以看到页面右方的 Book Reviews 部分里面每次刷新都会随机性地出现黑星星、红星星和没有星星三种情况,这是因为我们有三个不同的 backend,路由在默认情况下会随机路由到任意一个 backend 上。

我们先尝试把所有的路由都路由到 v1 版本上(就是没有星星的版本),路由规则如下:

命令如下:

然后我们再去刷新,就会发现不管怎么刷新星星都不见了。

接着,假如我们有一个用户是 jason,我们希望他能测试 v2 的 backend,就可以用下面的路由规则:

命令如下:

这时候,我们打开网页,以 jason 这个用户登录(密码随便填),就会发现每一次访问到的都是带有黑星星的版本。

这就是 Istio 提供的路由功能。

想要了解更多可以直接访问官网 https://istio.io/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180801G095DN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券