Istio 1.0学习笔记(五):Istio的基本概念
2018-09-18
前面我们在Kubernetes上部署了Istio 1.0并实际操作了一下官方示例应用及流量管理的基本功能。本篇将总结一下Istio的基本概念,加深理解。
1.0 Istio的定义 #
istio的官网https://istio.io/首页上用一句话描述了istio的定义:Istio Connect, secure, control, and observe services.
,即Istio用来连接、保护、控制、观测服务。
- 连接(connect):智能控制服务之间的流量和API调用,进行一系列测试,并通过红/黑部署逐步的升级
- 保护(secure):通过托管认证、授权和服务之间的通信加密自动保护服务
- 控制(control):应用策略,确保策略得以执行,并使资源在消费者之间平均分配
- 观测(Observe):通过丰富的自动跟踪、监控、日志观测服务,了解正在发生的事情
根据istio这4个基本功能的解释,已经对istio有了基本了解,后边准备继续分别以实操的形式学习这些功能。
2.0 Istio的架构 #
Istio中的官方文档中对Istio的架构做了介绍。下图是文档中的Istio架构示意图:
Istio在逻辑上分为数据平面(data plane)和控制平面(control plane)两部分:
- 数据平面:由一系列以sidecar形式部署的智能代理(Envoy)组成。这些代理可以调节和控制微服务及混合器(Mixer)之间的所有网络通信
- 控制平面:负责管理和配置代理来路由流量,除此之外控制平面还配置混合器(Mixer)以执行策略和收集遥测数据
2.1 数据平面(Envoy) #
Envoy是Istio的数据平面。Envoy早已经是CNCF的ServiceMesh项目之一,功能强大和稳定。
Istio使用Envoy的扩展版本。Envoy是以C++开发的高性能代理,用于接管服务网格中所有服务的所有inbound和outbound流量。 Istio实际上利用了很多Envoy已有的特性,例如:服务的动态发现、负载均衡、TSL终止、HTTP/2和gRPC代理、断路器、健康检查、基于百分比流量拆分的灰度发布(Staged rollouts with %-based traffic split)、故障注入以及丰富的度量指标。
Envoy以sidecar部署,与对应的服务在同一个Kubernetes Pod中。这样的部署方式使得Istio可以将大量了关于流量行为的信号作为属性(Attribute)提取出来。这些属性可以被用来在混合器(Mixer)中执行策略决策,并发送给监控系统,以提供整个Service Mesh的行为信息。
Sidecar模式允许我们将istio的功能添加到现有的部署中,而无需重构或重写现有的代码。
2.2 控制平面 #
控制平面对Service Mesh具有强大的控制力。Istio的控制平面由包括以下组件:
Pilot(领航员):为 Envoy sidecar 提供服务发现功能,为智能路由(例如 A/B 测试、金丝雀部署等)和弹性(超时、重试、熔断器等)提供流量管理功能。 将控制流量行为的高级路由规则转换为Envoy的相关配置,并在运行时将它们传播到sidecar。Pilot将平台特定的服务发现机制抽象化并将其合成为符合Envoy data plane APIs的sidecar都可以使用的标准格式。这种松耦合的设计使得Istio能够在多种环境下运行,如Kubernetes、Consul、Nomad,为流量管理提供了统一的管理接口。
Mixer(混合器):Mixer是一个平台独立的组件,它的职责是在ServiceMesh上实施访问控制和使用策略(usage policies),并从envoy代理和其它服务中收集遥测数据。 代理提取请求级别的属性(Attribute),发送给Mixer进行评估。有关属性提取和策略评估的更多信息,请参见Mixer Configuration documentation。Mixer包含一个灵活的插件模型,确保其可以接入各种主机环境和基础设施的后端。因此,istio从这些细节中抽象出 Envoy代理和Istio管理的服务。
Citadel(城堡?):通过内置身份和凭证管理提供强大的服务之间和终端用户间的认证。可以使用Citadel将ServiceMesh中未加密的流量升级,并为运维人员提供基于服务标识而非网络控制的策略管理能力。Istio 0.5 版本开始支持授权特性Istio’s authorization feature,以控制谁可以访问您的服务。
Galley:是Istio 1.0中新引入的组件,在Istio中,承担配置的导入、处理和分发任务,为Istio提供了配置管理服务,提供在k8s服务端验证Istio的CRD 资源的合法性的方法。
2.3 个人理解 #
前面根据istio文档What is Istio?中的内容理解一下Istio架构中各个组件。下面都是个人的简单理解:
Istio有数据平面和控制平面组成:
- 数据平面是以sidecar运行的Envoy代理,Envoy接收来自控制平面中Pilot的配置信息。Envoy作为代理接管了服务网格中所有服务的所有inbound和outbound流量。
- 控制平面:
- Pilot:负责与Kubernetes API Server交互。Pilot管理Envoy代理,提供了服务发现、流量管理等功能。 —– 连接(connect)
- Citadel:主要关注安全,为服务之间以及与终端用户提供认证、授权、凭据管理等功能。 —– 保护(secure)
- Mixer:用来接收来自Envoy代理的指标数据(遥测数据),可以实施访问控制和使用策略。—- 控制(control) 和 观测(Observe)
- Galley:为Istio提供配置管理服务
最后,看一下我们前面部署istio时,在istio-system命名空间下创建了下面的的deployment:
1kubectl get deploy -n istio-system
2NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
3grafana 1 1 1 1 25d
4istio-citadel 1 1 1 1 25d
5istio-egressgateway 1 1 1 1 25d
6istio-galley 1 1 1 1 25d
7istio-ingressgateway 1 1 1 1 25d
8istio-pilot 1 1 1 1 25d
9istio-policy 1 1 1 1 25d
10istio-sidecar-injector 1 1 1 1 25d
11istio-statsd-prom-bridge 1 1 1 1 25d
12istio-telemetry 1 1 1 1 25d
13istio-tracing 1 1 1 1 25d
14prometheus 1 1 1 1 25d
15servicegraph 1 1 1 1 25d
其中包含了istio-pilot
、istio-citadel
、istio-policy
、istio-telemetry
组成的控制平面。