Istio 简介
At a high level, Istio helps reduce the complexity of these deployments, and eases the strain on your development teams. It is a completely open source service mesh that layers transparently onto existing distributed applications. It is also a platform, including APIs that let it integrate into any logging platform, or telemetry or policy system. Istio’s diverse feature set lets you successfully, and efficiently, run a distributed microservice architecture, and provides a uniform way to secure, connect, and monitor microservices. -- Istio官网
从官网的介绍上可以看出,Istio是一个服务网格(service mesh),可以透明的嵌入到现有的分布式应用程序中。同时Istio是一个平台(platform),通过API的方式集成到其他的功能性平台上,例如日志、监控和策略平台等。最终Istio可以用统一的方式来保护,连接和监视微服务。
服务网格
服务网格是指微服务网格,在每个网格中部署service服务,Istio主要就是控制网格与网格之间的通讯。Istio服务网格从逻辑可以分为数据平面和控制平面。在数据平面,Istion通过Envoy代理原有的服务进行业务流量的发送和接收;在控制平面Istio 组件之间发送配置和控制消息来进行网络编排。整体架构如下图所示。
在Fission的基础上应用Istio之后产生的变化,也能看出Istio的代理思想,多出了Istio的两个服务。
Istio 主要特性
负载均衡
Istio支持HTTP、TCP以及任意的WebSocket通讯协议。
通讯策略
过路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。
访问控制
在具有强大的基于身份验证和授权的集群中实现安全的服务间通信。
可视化监控
集群内(包括集群的入口和出口)所有流量的自动化度量、日志记录和追踪
Istio 架构
再来回顾一下Istio的架构图,其中设计的组件主要有Proxy、Pilot、Citadel和Galley四个核心组件,官网介绍链接,这里做一个简单的汇总。
Proxy
Istion使用的Proxy组件是Envoy,它是用C++开发的高性能代理,用于控制服务中的所有出入流量。Proxy组件是Istio的唯一侵入式部署,通常称之为服务的sidecar。
Pilot
Pilot是Envoy sidecar的控制组件。Pilot将路由信息转换成对应sidecar的配置信息,传播给sidecar,实现流量控制。这种管理方式在数据层面仍是分布式的去中心化,因此不影响大规模的应用部署。
Citadel
内置证书和身份管理,支持服务于服务和服务与用户之间的身份验证,对网络流量进行加密。可以执行基于角色的的策略。
Galley
Galley 是 Istio 的配置验证、提取、处理和分发组件。它负责将其余的 Istio 组件与从底层平台(例如 Kubernetes)获取用户配置的细节隔离开来。
Istiod
在2020年3月19日,Istio发布了Introducing istiod: simplifying the control plane的blog。介绍了 Istio 1.5将会采用全新的单体模式来实现。istiod 将先前由 Pilot,Galley,Citadel 和 sidecar 的功能统一为一个二进制文件,不在采用之前的多组件部署方式。简化了运维Istio的成本。