0%

服务网格和ASM介绍

1. 服务网格

服务网格(Service Mesh)是一种将服务之间的通信从应用层解耦到基础设施层的技术。在服务网格中,通过代理服务之间的流量来实现基础设施层的抽象。

500

代理作为一个 Sidecar 容器与应用程序一起部署。流入和流出服务的流量被代理拦截,并提供高级流量管理和安全功能。

500

2. Istio

Istio 是一个 Kubernetes 原生的解决方案,由 Lyft 公司创建,有许多主流科技公司已经选择使用 Istio 作为他们的服务网格技术方案。

2.1 Istio 为什么可以实现流量治理

Istio 中对流量的转发处理都是通过 Envoy 实现的。

Envoy 作为 Sidecar 和每个服务容器部署在同一个 pod 中,Sidecar 在注入到 pod 之后,将原有服务调用从源容器 -> 目标容器的通信方式改变为源容器 -> Sidecar (源端) -> Sidecar (目的端) -> 目的容器

2.2 Istio 的架构原理

Istio 服务网格从逻辑上分为数据平面和控制平面。

  • 数据平面由一组智能代理(Envoy Proxy)组成,被部署为 sidecar。
  • 控制平面管理并配置代理来进行流量路由。

Istio 架构体系中,流控 (Traffic Management) 虽然是数据平面的 Envoy Proxy 实施的,但整个架构的核心其实在于控制平面 Pilot。Pilot 主要功能就是管理和配置部署在特定 Istio 服务网格中的所有 sidecar 代理实例。它管理 sidecar 代理之间的路由流量规则,并配置故障恢复功能,如超时、重试和熔断。
600

这样 Envoy 接管了流入流出用户服务的流量,持有流量策略。并且 Istio 会自动探测 kubernetes 集群的 services 和 endpoints,从而可以获取 services 与 endpoints 之间的关系,Envoy 配置里既有流量策略,又有 endpoints 自然可以实现流量的转发处理。

500

2.3 Istio 工作流程

数据平面是业务之间的通信平面。如果没有一个服务网格,网络就无法理解正在发送的流量,也无法根据它是哪种类型的流量,或者它从谁那里来,到谁那里去做出任何决定。

服务网格使用代理拦截所有的网络流量,允许根据您设置的配置提供广泛的应用程序感知功能。

500

2.4 Envoy

Envoy 是一个由 C++ 开发的高性能七层代理,和 Nginx 的技术架构相似,也采用了多线程 + 非阻塞 + 异步 IO(Libevent) 的架构。Envoy 核心是一个 L3/L4 代理,以 NetFilter hook 的形式执行 TCP/UDP 的相关任务,例如 TCP 转发,TLS 认证等。现在 Envoy 的功能已经非常完善在 L3/L4 之上,Envoy 实现了 HTTP L7 代理、HTTP/2、gRPC、服务发现、负载均衡、Tracing、动态配置等等高级功能。

Envoy 通常以 sidecar 的方式和应用服务并行运行,透明地代理应用服务发出/接收的流量。在这种机制下,应用服务只需要和 Envoy 通信,无需知道其他微服务应用在哪里。

3. ASM (阿里云服务网格)

3.1 控制平面

从架构设计上看,服务网格 ASM 逻辑上分为控制平面和数据平面两部分。控制平面负责管理和配置代理,从而实现路由流量。

3.2 数据平面

数据平面由一组以 Sidecar 方式部署的智能代理(Envoy)组成,负责调节和控制微服务以及控制平面之间所有的网络通信。

3.3 入口网关(Ingress Gateway)

入口网关并不是指 ASM 自定义资源,而是指 Kubernetes 服务。它是真实的入口网关服务的抽象,由对应的容器来提供支持。通过 ASM 创建一个入口网关时,会部署一个 Kubernetes 服务和 Deployment 资源到用户集群中。

3.4 出口网关(Egress Gateway)

出口网关为网格内应用提供统一的流量出口。

3.5 网关规则(Gateway)

作为 ASM 自定义资源之一,网关规则定义了在网格出入口操作的负载均衡器,用于接收传入或传出的 HTTP/TCP 连接。它描述了需要公开的一组端口、要使用的协议类型、负载均衡器的 SNI 配置等信息。

每个网关规则在网格边缘定义流量进入或流出的一个负载均衡器。

3.6 虚拟服务(Virtual Service)

作为 ASM 自定义资源之一,虚拟服务定义了一系列针对指定服务的流量路由规则。每个路由规则都针对特定协议定义流量匹配规则。如果流量符合这些特征,就会根据规则发送到服务注册表中的目标服务(或者目标服务的子集或版本)。

每个虚拟服务为网格中所部署的对应服务定义路由规则。

3.7 目标规则(Destination Rule)

作为 ASM 自定义资源之一,目标规则定义了在路由发生后应用于服务的流量策略。这些规则指定负载均衡的配置、来自 Sidecar 代理的连接池大小以及异常检测设置,从而实现从负载均衡池中检测和驱逐不健康的主机。

每个目标规则为网格中所部署的对应服务定义服务版本和客户端访问行为 (负载均衡、离群驱逐、mTLS 等)。

3.8 灰度发布

灰度发布又名金丝雀发布,指在原有部署版本可用的情况下,同时部署新版本应用作为金丝雀,测试新版本的性能。在保证整体系统稳定的情况下,帮助您尽早发现问题和修复问题。

金丝雀发布由来:以前矿工开矿,在下矿洞前需要检查下方是否有毒气,矿工们先会放一只金丝雀进去探是否有毒气体,看金丝雀能否活下来。

特点:

  • 用户体验影响小,灰度发布过程出现问题影响范围较小
  • 新版本功能逐步发布,可以逐步评估新版服务性能、稳定性和健康状态
  • 发布自动化程度不够,发布期间可能引发服务中断
img

3.9 蓝绿发布

蓝绿发布提供了一种零宕机的部署方式。在老版本运行的基础上,部署新版本进行测试。确认新版本运行正常后,将流量切到新版本,然后同时将老版本升级到新版本。始终有两个版本同时在线,有问题可以快速切换,可以减少发布过程中服务停止的时间。

首先将一半的服务流量从负载均衡列表中移除,并且更新服务版本,验证新版本没有问题后,将生产流量指向蓝环境,然后对于老版本的绿环境进行版本升级,最后将所有服务流量加回负载均衡。

  • 升级过程无需停机,用户感知小
  • 升级过程一半资源提供服务
  • 升级/回滚速度快
  • 如果出了问题,影响面较广
img

4. 参考资料

给作者打赏,可以加首页微信,咨询作者相关问题!