前言
Istio 是一个由谷歌、IBM 与 Lyft 共同开发的开源项目,旨在提供一种统一化的微服务连接、安全保障、管理与监控方式。Istio 项目能够为微服务架构提供流量管理机制,同时亦为其它增值功能(包括安全性、监控、路由、连接管理与策略等)创造了基础。这款软件利用久经考验的 Lyft Envoy 代理进行构建,可在无需对应用程序代码作出任何发动的前提下实现可视性与控制能力。Istio 项目是一款强大的工具,可帮助 CTO/CIO 们立足企业内部实施整体性安全、政策与合规性要求。
优势
集群规模可视性:在故障状况出现时,运营人员需要利用多种工具以始终关注集群运行状况并分析微服务状态图表。Istio 项目能够监控与应用程序及网络活动相关的数据,利用 Prometheus 与 Grafana 对这部分数据加以渲染,而后将相关指标与日志记录发送至任何收集、聚合与查询系统当中以实现功能扩展。Istio 项目亦利用 Zipkin 追踪分析性能热点并对分布式故障模式加以诊断。
弹性与效率:在开发微服务时,运营人员需要假设网络本身处于不可靠状态。运营人员能够利用重试、负载均衡、流量控制(HTTP/2)以及断路补偿等方式解决由网络可靠性低下所造成的各类常见故障模式。Istio 项目则提供一种统一方法以配置上述功能,使得运营人员能够更为轻松地运作高弹性水平服务网格。
开发人员生产力:Istio 项目能够确保开发人员专注于利用已选择的编程语言构建服务功能,从而极大提升其生产能力。另外,Istio 项目则负责以统一化方式处理弹性与网络挑战。开发人员无需将解决方案的分布式系统问题解决机制引入编写的代码当中。Istio 项目还能够支持 A/B 测试、金丝雀部署以及故障注入等常用功能,旨在进一步提高生产效率。
政策驱动型运营:Istio 项目能够授权具有不同职能的团队以实现独立运作。其将集群运营人员与功能开发人员进行周期性剥离,从而在无需更改代码的前提下提升安全性、监控能力、扩展性与服务拓扑水平。运营人员能够精确控制生产流量中各个子集的路由方式,从而匹配新的服务版本。另外,运营人员还能够在流量中注入故障或者提高延迟水平,用以测试服务见长的弹性 ; 同时设置速率限制以防止服务过载。Istio 项目还可用于强制执行合规性要求,例如在服务之间定义 CL 以确保仅具备授权的服务间可相互通信。
默认安全:分布式计算当中经常存在着大量网络安全问题。Istio 项目允许运营人员利用 TLS 连接以认证并保护各服务之间的所有通信,而不会给开发人员或者运营人员带来由证书管理造成的额外负担。其安全框架与新的 SPIFFE 规范保持一致,事实上谷歌公司一直在内部广泛使用类似的保障性系统。
增量化采用:在设计 Istio 项目时充分考虑到网络内所运行各服务的透明性,允许团队随着时间推移逐步采用 Istio 提供的各项功能。采用方可以先从启用集群范围内可视性起步,并在 Istio 在环境中的表现感到满意后根据实际需要启用其它功能。
官方架构图
可以看到,Istio 就是 Service Mesh 架构的一种实现,服务之间的通信(比如这里的 Service A 访问 Service B)会通过代理(默认是 Envoy)来进行。而且中间的网络协议支持 HTTP/1.1,HTTP/2,gRPC 或者 TCP,可以说覆盖了主流的通信协议。控制中心做了进一步的细分,分成了 Pilot、Mixer 和 Citadel,它们的各自功能如下:
Pilot:为 Envoy 提供了服务发现,流量管理和智能路由(AB 测试、金丝雀发布等),以及错误处理(超时、重试、熔断)功能。用户通过 Pilot 的 API 管理网络相关的资源对象,Pilot 会根据用户的配置和服务的信息把网络流量管理变成 Envoy 能识别的格式分发到各个 Sidecar 代理中。
Mixer:为整个集群执行访问控制(哪些用户可以访问哪些服务)和 Policy 管理(Rate Limit,Quota 等),并且收集代理观察到的服务之间的流量统计数据。
Citadel:为服务之间提供认证和证书管理,可以让服务自动升级成 TLS 协议。
代理会和控制中心通信,一方面可以获取需要的服务之间的信息,另一方面也可以汇报服务调用的 Metrics 数据。
1.4.3 版本具体更新内容
Bug fixes
修复了 Mixer 创建过多 watch,使 kube-apiserver 超载的问题
修复了 Pod 有多个没有暴露端口的容器时的注入问题
修复了正则表达式字段过于严格的验证
修复了正则表达式字段的升级问题
修复了 istioctl 安装的问题,可以正确将日志发送到 stderr
修复了无法为 istioctl 安装指定文件和配置文件的问题
修复了无法为 istioctl install 安装某些对象的问题
修复了防止在 JWT 策略中将某些 JWK 与 EC 密钥一起使用的问题
更新说明:https://istio.io/news/releases/1.4.x/announcing-1.4.3/
总结
1、Istio 的架构在数据中心和集群管理中是比较常见,每个 Agent 分布在各个节点上(可以是服务器、虚拟机、Pod、容器)负责接收指令并执行,以及汇报信息。
2、控制中心负责汇聚整个集群的信息,并提供 API 让用户对集群进行管理。
3、Kubernetes 也是类似的架构,SDN(Software Defined Network) 也是如此。
4、数据中心要管理的节点越来越多,我们需要把任务执行分布到各节点(Agent 负责的功能)。
5、同时也需要对整个集群进行管理和控制(Control Plane 的功能),完全去中心化的架构是无法满足后面这个要求的。
6、Istio 的出现为负责的微服务架构减轻了很多的负担,开发者不用关心服务调用的超时、重试、Rate Limit 的实现,服务之间的安全、授权也自动得到了保证。
7、集群管理员也能够很方便地发布应用(AB 测试和灰度发布),并且能清楚看到整个集群的运行情况。
8、但是这并不表明有了 Istio 就可以高枕无忧了,Istio 只是把原来分散在应用内部的复杂性统一抽象出来放到了统一的地方,并没有让原来的复杂消失不见。
9、因此我们需要维护 Istio 整个集群,而 Istio 的架构比较复杂,尤其是它一般还需要架在 Kubernetes 之上,这两个系统都比较复杂,而且它们的稳定性和性能会影响到整个集群。
总的来说Istio 使用门槛是相对较高的,需要提升整体团队技术能力,在使用前必须做好清晰的规划,衡量它带来的好处是否远大于额外维护它的花费。
注意:本文归作者所有,未经作者允许,不得转载