总目录索引:istio从入门到放弃系列

转载链接:https://blog.51cto.com/14625168/2483980


1、架构概述

        istio 服务网格逻辑上分为数据和控制两大平面。

数据平面:由一组智能代理(envoy)组成,这些代理不仅控制和协调微服务之间的所有网络通信,同时也负责收集和汇报网格的遥测。

控制平面:制定、应用策略控制网络流量的路由。

        下图展示 istio 架构:Istio 架构_istio架构


2、流量概述

        由上可知,Istio 架构由数据面和控制面构成,那么 Istio 的流量也可以分为数据面流量和控制面流量。数据面流量是指微服务之间业务调用的流量,控制面流量是指 Istio 各组件之间配置和控制网格行为的流量。

Istio 中 traffic management 专指数据平面流量。


3、组件介绍

        Istio 1.5.0 取消了原有的 Mixer 组件,保留了 Envoy、Pilot、Citadel、Galley 这 4 个核心的组件,这 4 个组件除了 Envoy 属于 Istio 数据面,其他都属于控制面。下面分别介绍如下:

3.1 Envoy

        Envoy 是使用 C++ 开发的高性能代理,Istio 使用的是经过扩展过的 Envoy,Istio 中的 Envoy 作用是调解所有服务网格单元的入口和出口流量。同时 Envoy 也是与数据平面流量交互的唯一 Istio 组件。

因为 Envoy 被部署作为微服务的 sidecar,从而与微服务构成了一个有机的整体,所以从功能上自然就具备了 Envoy 的功能:

  • 动态服务发现

  • 负载均衡

  • TLS 终止

  • HTTP/2 和 gRPC 代理

  • 断路器

  • 健康检查

  • 分阶段滚动更新和基于百分比分配流量

  • 失败注入

  • 丰富的指标

        这种 sidecar 代理方式使 Istio 可以收集网络流量中特定信息作为指标(比如 HTTP 协议头的某些字段、目标 IP 等等),Istio 可以利用这些指标来实施策略,并将其发送给监控系统以报告整个网格行为。

Sidecar 代理模式允许使用者将 Istio 功能添加到现有微服务中,而无需重新构造或重写代码。

        Envoy proxy 启用了一些 Istio 功能和任务,其中包括:

  • 流量控制功能:使用丰富的路由规则对 HTTP、gRPC、WebSocket 和 TCP 流量实施细粒度的流控

  • 弹性网络功能:设置重试、故障转移、断路器和故障注入

  • 安全和身份验证:通过资源部署的方式来应用安全策略、访问控制以及速率限制等功能特性

  • 基于 WebAssembly 可插拔扩展模型,允许制定自定义策略和网格遥测流量规则

3.2 Pilot

        Pilot 提供 Envoy 边车服务发现、智能路由(比如 A/B 测试、金丝雀发布等)的流量管理能力、网络弹性(超时、重试、断路器等等)。

        Pilot 将控制流量行为的高级路由规则转换为 Envoy 特定的配置,并在运行时将其传播给 sidecar。Pilot 抽取特定于平台的服务发现机制,并将其合成为任何符合 Envoy API 的 sidecar 都可以使用的标准格式。

        下图展示了平台适配器如何跟 Envoy 代理如何交互:Istio 架构_istio架构_02

1 平台启动一个服务的新实例,该实例通知其平台适配器

2 平台适配器将实例注册到 Pilot 抽象模型

3 Pilot 将流量规则和配置分发给 Envoy 代理通知其更改

        Pilot 这种设计使得 Istio 可以在 K8s、Consul 和 Nomad 等多种环境中运行,同时保持用于流量管理的相同操作界面。

        可以使用 Istio 流控 API 通知 Pilot 转换为 Envoy 配置以达到更新粒度操控服务网格中的流量。

3.3 Citadel

        Citadel 通过内置的身份认证和凭证管理实现了强大的服务到服务、用户到端的身份认证。可以使用 Citadel 升级网格中未加密的流量。运维人员可以通过 Citadel 基于服务身份而不是相对不稳定的第 3 层或第 4 层网络标识符来实施策略。

3.4 Galley

        Galley 是 Istio 验证、提取、处理和分发配置的组件。它负责将其余 Istio 组件与底层平台(例:K8S)获取用户配置的细节隔离开。