Istio学习笔记-概念

服务网格

服务网格用来描述组成应用程序的微服务网络以及它们之间的交互。随着服务网格的规模和复杂性不断的增长,它将会变得越来越难以理解和管理。
其需求包括服务发现负载均衡故障恢复度量和监控等。服务网格通常还有更复杂的运维需求,比如 A/B 测试、金丝雀发布、速率限制、访问控制和端到端认证。

Istio 是什么

Istio 提供了对整个服务网格的行为洞察和操作控制的能力,以及一个完整的满足微服务应用各种需求的解决方案。
通过负载均衡、服务间的身份验证、监控等方法,Istio 可以轻松地创建一个已经部署了服务的网络,而服务的代码只需很少更改甚至无需更改。
通过在整个环境中部署一个特殊的 sidecar 代理为服务添加 Istio 的支持,而代理会拦截微服务之间的所有网络通信,然后使用其控制平面的功能来配置和管理 Istio。

核心特性

流量管理

Istio 简单的规则配置和流量路由允许您控制服务之间的流量和 API 调用过程。Istio 简化了服务级属性(如熔断器、超时和重试)的配置,并且让它轻而易举的执行重要的任务(如 A/B 测试、金丝雀发布和按流量百分比划分的分阶段发布)。

安全

Istio 的安全特性解放了开发人员,使其只需要专注于应用程序级别的安全。Istio 提供了底层的安全通信通道,并为大规模的服务通信管理认证、授权和加密。

可观察性

Istio 健壮的追踪、监控和日志特性让您能够深入的了解服务网格部署。通过 Istio 的监控能力,可以真正的了解到服务的性能是如何影响上游和下游的;而它的定制 Dashboard 提供了对所有服务性能的可视化能力,并让您看到它如何影响其他进程。

Istio 的 Mixer 组件负责策略控制和遥测数据收集。它提供了后端抽象和中介,将一部分 Istio 与后端的基础设施实现细节隔离开来,并为运维人员提供了对网格与后端基础实施之间交互的细粒度控制。

所有这些特性都使您能够更有效地设置、监控和加强服务的 SLO。

平台支持

Istio 独立于平台,被设计为可以在各种环境中运行,包括跨云、内部环境、Kubernetes、Mesos 等等。可以在 Kubernetes 或是装有 Consul 的 Nomad 环境上部署 Istio。
Istio 目前支持:

  • Kubernetes 上的服务部署
    
  • 基于 Consul 的服务注册
    
  • 服务运行在独立的虚拟机上
    

整合和定制

Istio 的策略实施组件可以扩展和定制,与现有的 ACL、日志、监控、配额、审查等解决方案集成。

架构

Istio 服务网格从逻辑上分为数据平面和控制平面。
Istio学习笔记-概念_第1张图片

  • 数据平面 由一组智能代理(Envoy)组成,被部署为 Sidecar。这些代理负责协调和控制微服务之间的所有网络通信。它们还收集和报告所有网格流量的遥测数据。

  • 控制平面 管理并配置代理来进行流量路由。

组件

Envoy

Istio 使用 Envoy 代理的扩展版本。Envoy 是用 C++ 开发的高性能代理,用于协调服务网格中所有服务的入站和出站流量。Envoy 代理是唯一与数据平面流量交互的 Istio 组件。

Envoy在Service Mesh世界中被广泛运用,除了Istio外,VMware Tanzu Service Mesh和AWS的App Mesh也使用它作为Sidecar组件。

Envoy 代理被部署为服务的 Sidecar,在逻辑上为服务增加了 Envoy 的许多内置特性,例如:

  • 动态服务发现
  • 负载均衡
  • TLS 终端
  • HTTP/2 与 gRPC 代理
  • 熔断器
  • 健康检查
  • 基于百分比流量分割的分阶段发布
  • 故障注入
  • 丰富的指标

由 Envoy 代理启用的一些 Istio 的功能和任务包括:

  • 流量控制功能:通过丰富的 HTTP、gRPC、WebSocket 和 TCP 流量路由规则来执行细粒度的流量控制。
  • 网络弹性特性:重试设置、故障转移、熔断器和故障注入。
  • 安全性和身份认证特性:执行安全性策略,并强制实行通过配置 API 定义的访问控制和速率限制。
  • 基于 WebAssembly 的可插拔扩展模型,允许通过自定义策略执行和生成网格流量的遥测。

Istiod

Istiod 提供服务发现、配置和证书管理

  • Istiod 将控制流量行为的高级路由规则转换为 Envoy 特定的配置,并在运行时将其传播给 Sidecar。Pilot 提取了特定平台的服务发现机制,并将其综合为一种标准格式。

  • Istiod 安全通过内置的身份和凭证管理,实现了强大的服务对服务和终端用户认证。

  • Istiod 充当证书授权(CA),并生成证书以允许在数据平面中进行安全的 mTLS 通信。

部署模型

Istio 部署的独立配置维度:

  • 单一或多个集群
  • 单一或多个网络
  • 单一或多控制平面
  • 单一或多个网格

在涉及多个集群的生产环境部署中,部署可能使用多种模式。

例如,基于 3 个集群实现多控制平面的高可用部署,可以通过使用单一控制平面部署 2 个集群,然后再添加第 3 个集群和 第 2 个控制平面来实现这一点,最后,再将所有 3 个集群配置为共享 2 个控制平面,以确保所有集群都有 2 个控制源来确保 HA。

集群模型

应用程序的工作负载实例运行在一个或多个集群中。 针对隔离性、性能和高可用的需求,也可以将集群限制在可用区和地域中。

根据需求,生产系统可以跨多个集群(基于多可用区、多地域)运行, 借助云负载均衡器来处理诸如本地、区域或地域性故障转移之类的问题。

大多数情况下,集群代表着配置和端点发现的边界。

单一集群

单一集群和单一网络模型包括一个控制平面,这是最简单的 Istio 部署。Istio学习笔记-概念_第2张图片

多集群

可以将单个网格配置为包括多集群。 在单一网格中使用多集群部署,与单一集群部署相比其具备以下更多能力:

  • 故障隔离和故障转移:当 cluster-1 下线,业务将转移至 cluster-2。
  • 位置感知路由和故障转移:将请求发送到最近的服务。
  • 多种控制平面模型:支持不同级别的可用性。
  • 团队或项目隔离:每个团队仅运行自己的集群。
    Istio学习笔记-概念_第3张图片
    如上图中的Cluster01A/02A和01B。
    多集群部署可为您提供更大程度的隔离和可用性,但会增加复杂性。

如果系统具有高可用性要求,则可能需要集群跨多个可用区和地域。
对于应用变更或新的版本,可以在一个集群中配置金丝雀发布,这有助于把对用户的影响降到最低。
此外,如果某个集群有问题,可以暂时将流量路由到附近的集群,直到解决该问题为止。

网络模型

许多生产系统需要多个网络或子网来实现隔离和高可用性。 Istio 支持跨多种网络拓扑扩展服务网格。

单一网络

在最简单的情况下,服务网格在单个完全连接的网络上运行。 在单一网络模型中,工作负载实例 都可以直接相互访问,而无需 Istio 网关。
如下图非阴影部分,服务流量见红色连接
Istio学习笔记-概念_第4张图片

多网络

配置单个服务网格跨多个网络,这样的配置称为多网络。

多网络模型提供了单一网络之外的以下功能:

  • 服务端点范围的 IP 或 VIP 重叠
  • 跨越管理边界
  • 容错能力
  • 网络地址扩展
  • 符合网络分段要求的标准
    Istio学习笔记-概念_第5张图片

在此模型中,不同网络中的工作负载实例只能通过一个或多个 Istio 网关(黄底)相互访问。在单一网络内的服务流量可以直接访问。

控制平面模型

Istio 网格使用控制平面来配置网格内工作负载实例之间的所有通信。

单一控制平面服务网格

在最简单的情况下,可以在单一集群上使用控制平面运行网格。
Istio学习笔记-概念_第6张图片

多集群部署共享控制平面实例

在这种情况下,控制平面实例可以驻留在一个或多个集群中。
Istio学习笔记-概念_第7张图片

多个集群、区或地域之间部署控制平面

该模型具有以下优点:

  • 更强的可用性:如果控制平面不可用,则不可用范围仅限于该控制平面。

  • 配置隔离:您可以在一个集群、区域或地域中进行配置更改,而不会影响其他集群、区或或地域。
    Istio学习笔记-概念_第8张图片

可以通过故障转移来提高控制平面的可用性。当控制平面实例不可用时,工作负载实例可以连接到另一个可用的控制平面实例。 故障转移可能发生在集群、区域或地域之间。
Istio学习笔记-概念_第9张图片

可用性对控制平面部署进行了排名:

每个地域一个集群(最低可用性)
每个地域多个集群
每个区域一个集群
每个区域多个集群
每个集群(最高可用性)

网格模型

单一网格

最简单的 Istio 部署是单一网格。
网格内,服务名称是唯一的。例如,在命名空间 foo 中只能存在一个名为 mysvc 的服务。 此外,工作负载实例具有相同的标识,因为服务帐户名称在命名空间中也是唯一的,就像服务名称一样。

单一网格可以跨越一个或多个集群和一个或多个网络。
网格内部,命名空间用于多租户。

多网格

  • 网格联邦是在网格之间公开服务的一种行为,并且能跨越网格边界进行通信。每一个网格或许会公开其一部分的服务,使一个或多个其他网格使用此公开的服务。 可以使用网格联邦来启用网格之间的通信。
  • 通过网格联邦可以实现多网格部署。

多网格具备以下更多功能:

组织边界:业务范围
服务名称或命名空间复用:比如 default 的使用
加强隔离:将测试工作负载与生产工作负载隔离

为避免服务命名冲突,可以为每个网格赋予全局唯一的 mesh ID,以确保每个服务的完全限定域名(FQDN)是不同的。

联合两个不共享同一信任域的网格时,必须 联合身份标识和它们之间的 trust bundles。

你可能感兴趣的:(云原生,云原生,istio)