0%

Istio教程01-服务网格和istio介绍

服务网格是一种分布式应用程序基础设施,它负责以透明的、进程外的方式代表应用程序处理网络流量。Istio是一个由谷歌、IBM和Lyft创建的服务网格的开源实现。

1714551745481
  1. 基础设施:它负责将代码部署到平台上(容器、Kubernetes、公共云、虚拟机等)。Istio不限定使用哪些自动化部署工具。

  2. 应用程序业务逻辑:为了保持竞争力而必须编写的业务差异化代码,。这段代码包括业务逻辑,以及知道要调用哪些服务、以何种顺序调用服务、如何处理服务的响应(例如,如何将它们聚合在一起)、在出现故障时如何处理。

  3. Istio扮演着部署平台和应用程序代码之间的中间人的角色,它的作用是帮助从应用程序中获取复杂的网络代码。它可以基于请求元数据内容(HTTP头等)进行路由,也可以基于服务和请求元数据匹配进行细粒度的流量控制和路由。

45739_40_1
  1. 数据平面负责建立、保护和控制通过网格的流量。数据平面的行为由控制平面配置。
  2. 控制平面是网格的大脑,它为运维人员提供了操纵网络行为的API。
  3. 由于所有的流量都通过网格,可以控制流量、熔断、超时、重试、服务发现、负载均衡等。

1. Istio

1.1 控制平面

45739_53_4

Istio控制平面及支持组件:

1714552269694

1.2 istiod

  1. 通过配置资源,我们可以指定如何允许流量进入集群,如何将其路由到特定版本的服务,在进行新部署时如何转移流量,以及服务的调用者应该如何对待超时、重试和熔断等弹性方面的问题。
  2. istiod接受这些配置,解析它们,并将它们作为特定于服务代理的配置公开。
  3. Istio使用Envoy作为服务代理,因此这些配置被转换为Envoy配置。
1714552440783

对于一个试图与catalog服务通信的服务,如果它的请求头中有x-dark-launch,我们可能希望将流量发送到该服务的v2。

istiod通过它的数据平面API,将这个配置意图作为Envoy配置公开给服务代理:

1714552562947 1714552587629

1.3 入口网关和出口网关

Istio网关的入站流量和出站流量:

1714552770557

2. 使用

2.1 部署

服务配置文件catalog.yaml

1714553497973 1714553498889

注入Istio服务代理

1714553566980

命名空间自动注入

为了启用自动注入,我们将istioinaction命名空间标记为istio-injection=enabled:

qq654766-2

部署服务

qq654766-0 qq654766-3

还要注意READY列中的2/2:这意味着Pod中有两个容器,且两个容器都处于READY状态。其中一个容器是应用程序容器本身,在本例中为catalog;另一个容器是istio-proxy sidecar。

2.2 重试

1714554442406

在这个定义中,我们指定对catalog服务的请求可以重试三次,每次尝试都有2s的超时。如果设置了这条规则,当遇到请求失败时,我们可以使用Istio自动重试。

2.3 版本控制

增加 catalog-v2 版本的服务

1714554798354

创建DestinationRule,表示catalog服务的两个不同版本

1714554717507

识别版本 【虚拟主机-> 目标规则】

我们要做的第一件事情是让Istio知道如何识别catalog服务的不同版本。我们使用DestinationRule来做到这一点:

1714554908918

接下来,我们在catalog VirtualService中创建一条规则,将所有流量路由到catalog的v1:

1714554949985

现在,如果向webapp端点发送流量,将只看到v1响应。

区分版本

qq051871-3

当调用中包含x-dark-launch:v2头时,我们会看到catalog-v2服务的响应;所有其他流量进入catalog-v1。

3. Envoy

Envoy是一个代理,位于客户端和服务器的通信之间。在Envoy中,这些协议是开箱即用的:HTTP/1.1、HTTP/2、gRPC和其他协议,Envoy可以解析它们,配置请求级超时、重试、每次重试超时、熔断和其他弹性特性。

3.1 流程

1714555646544
  1. 监听器(Listener)——向外部公开一个应用程序可以连接的端口。例如,80端口上的监听器接收流量,并将任何配置的行为应用于该流量。
  2. 路由(Route)——如何处理进入监听器的流量的路由规则。例如,如果传入一个请求并匹配/catalog,则将该流量定向到catalog集群。
  3. 集群(Cluster),Envoy可以将流量路由到这些服务。例如,catalog-v1和catalog-v2可以是单独的集群,路由可以指定将流量定向到catalog服务的v1或v2的规则。

3.2 Envoy与Istio的融合

Istio的组件和Envoy代理一起构成了一个引人注目的服务网格实现。两者都有蓬勃发展的、充满活力的社区,并面向下一代服务架构。

一个相关的例子是Envoy的服务发现,它依赖某种服务注册表来发现端点。istiod实现了这个API,但也将Envoy从所有特定的服务注册1表实现中抽象出来。当Istio被部署在Kubernetes上时,Istio使用Kubernetes的服务注册表来发现服务。Envoy代理完全不涉及这些实现细节。

4. 参考文档

  • 《istio in action》
可以加首页作者微信,咨询相关问题!