Istio 服务网格你了解多少?

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 在分布式系统中,服务间的通信是非常常见的,然而这种通信往往面临着很多问题,比如网络异常、超时、重试、并发等等问题。那么在云原生生态环境下,又是如何做到对这些问题进行监视、发现和追踪的呢?

前言

大家好,我是路由器没有路

在分布式系统中,服务间的通信是非常常见的,然而这种通信往往面临着很多问题,比如网络异常、超时、重试、并发等等问题。

那么在云原生生态环境下,又是如何做到对这些问题进行监视、发现和追踪的呢?

今天跟大家聊的话题是:什么是 Istio 服务网格?

什么是服务网格

服务网格Service Mesh)是一种透明管理和调控服务之间通信的基础设施层,其中的基本理念是将服务间的通信和功能与应用本身的核心逻辑分离开来。

服务网格作为服务间通信的基础设施层,负责通过包含现代云原生应用程序的复杂服务拓扑来可靠地传递请求。

实际上,服务网格通常通过一组轻量级网络代理来实现,这些代理与应用程序代码一起部署,而不需要感知应用程序本身。通常用于描述构成这些应用程序的微服务网络以及应用之间的交互。

随着规模和复杂性的增长,服务网格也越来越难以理解和管理。它的需求包括服务发现、负载均衡、故障恢复、指标收集、监控以及通常更加复杂的运维需求,例如 A/B 测试、金丝雀发布、限流、访问控制和端到端认证等。

简单来说,服务网格通过一个代理模式工作,把所有的服务间通信经过代理,将网络中的应用流量载入到网格中,并支持复杂的管理和调控操作。

服务网格有什么特点

在服务网格中,代理负责其下所有服务的通信,具有如下特点:

  • 并发控制:轻量级网络代理,代理模式能够控制微服务的并发;
  • 安全特性:安全基础配置和身份验证等特性,可以加强微服务的安全性。同时还让软件开发者更加安全地部署快速增长的微服务网格;
  • 可靠性:服务网格可以保证服务间的调用是无缝的,而且服务之间的通信是可靠的,会更少出现故障;
  • 错误处理:服务网格可以处理请求得到的错误,这可以帮助开发者迅速恢复出错的服务;
  • 监控:服务网格可以在整个生命周期中,实时地监控服务间的流量,监控流量改进服务间通信的健壮性、安全性和性能;
  • 无感解耦:应用程序无感知,作为服务间通信的基础中间层,与应用程序解耦。

目前业界比较流行的服务网格开源软件 Istio 可以直接在 Kubernetes 中集成。

如何理解服务网格

如果用一句话来解释什么是服务网格,可以将它比作是应用程序或者说微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控。

对于编写应用程序来说一般无须关心 TCP/IP 这一层(比如通过 HTTP 协议的 RESTful 应用),同样使用服务网格也就无须关心服务之间的那些原来是通过应用程序或者其他框架实现的事情,比如 Spring Cloud、OSS,现在只要交给服务网格就可以了。

服务网格的架构如下图所示:

服务网格结构图

图来源于:Pattern: Service Mesh

服务网格作为 sidecar 运行,对应用程序来说是透明,所有应用程序间的流量都会通过它,所以对应用程序流量的控制都可以在 serivce mesh 中实现。

服务网关的工作原理

在服务网格中,每个微服务都有一个代理,这个代理可以使微服务之间的通信变得更加透明和容易

服务网格内部的代理可以处理应用程序路由、流量管理、安全控制和监控统计等所有通信所涉及的问题。

Istio 是一个开源的服务网格,它通过 Envoy 和后端应用程序和微服务进行自动化管理和托管。Istio 的网关代理是一个应用程序,部署到网格中的每个主机上,可提供网格边缘的入口点。

然后可以将浏览器发出的 HTTP 请求路由到 Istio 网关代理,网关代理使用规则来确定是否将这个请求带到目标服务或集群的实例。

如果网关代理将请求转化给后端服务,那么代理会将请求和响应流量路由到被选中的目标服务,并以此为一项操作服务。

下面以 Istio 为例说下服务网格在 Kubernetes 中的工作原理:

  1. Istio 将服务请求路由到目的地址,根据其中的参数判断是到生产环境、测试环境还是 staging 环境中的服务(服务可能同时部署在这三个环境中),是路由到本地环境还是公有云环境?所有的这些路由信息可以动态配置,可以是全局配置也可以为某些服务单独配置。
  2. 当 Istio 确认了目的地址后,将流量发送到相应服务发现端点,在 Kubernetes 中是 service,然后 service 会将服务转发给后端的实例。
  3. Istio 根据它观测到最近请求的延迟时间,选择出所有应用程序的实例中响应最快的实例。
  4. Istio 将请求发送给该实例,同时记录响应类型和延迟数据。
  5. 如果该实例挂了、不响应了或者进程不工作了,Istio 则把请求发送到其他实例上重试。
  6. 如果该实例持续返回 error,Istio 会将该实例从负载均衡池中移除,稍后再周期性的重试。
  7. 如果请求的截止时间已过,Istio 主动以失败的方式结束该请求,而不是再次尝试添加负载。
  8. Istio 以 metric 和分布式追踪的形式捕获上述行为的各个方面,这些追踪信息将发送到集中 metric 系统中。

服务网格的作用

服务网格并没有给我们带来新功能,它是用于解决其他工具已经解决过的问题,只不过这次是在云原生的 Kubernetes 环境下的实现。

在传统的 MVC 三层 Web 应用程序架构下,服务之间的通讯并不复杂,在应用程序内部自己管理即可。但是在现今的复杂的大型网站或云原生架构下,单体应用被分解为众多的微服务,服务之间的依赖和通讯十分复杂。

而容器的使用给予了异构应用程序的更多可行性,Kubernetes 增强应用的横向扩容能力,用户可以快速的编排出复杂环境、复杂依赖关系的应用程序,同时开发者又无须过多关心应用程序的监控、扩展性、服务发
现和分布式追踪这些繁琐的事情而专注于程序开发,赋予开发者更多的创造性。

服务网格可以为应用和微服务提供许多有用的功能和服务,以下是服务网格的作用:

  • 网络规则:网络规则功能可以对微服务之间的流量进行管理,以期达到服务的可靠性、可扩展性和安全性等目的;
  • 服务发现:服务网格可以通过提供服务发现功能,在网格中使微服务之间的通信变得更加透明和容易。同时,此功能还提供了更多的可视化效果,可以帮助开发者更好地监控网格中的所有服务;
  • 监视和追踪:服务网格还可以在运行时监视和追踪所有请求。这可以帮助开发者处理应用程序中的任何错误,得以快速恢复功能和服务;
  • 可靠性:服务网格可以更好地管理流量,以减少错误和故障,从而提高服务的可靠性;
  • 安全性:服务网格中的代理模式可以加强微服务的安全性。通过安全基础配置和身份验证等特性,可以让软件开发者更加安全地部署网格中快速增长的微服务;

总结

以上是对 Istio 服务网格进行简单的讲解,主要从服务网格是什么、有什么特点以及它的作用是什么等这几个方面来进行说明。

后续会进一步对 Istio 服务网格的实现模式进行讲解,由浅到深带你彻底搞懂微服务网格 Istio

相关文章
|
6月前
|
负载均衡 Kubernetes Cloud Native
OpenKruise 是一个基于 Istio 的云原生服务网格
OpenKruise 是一个基于 Istio 的云原生服务网格
74 10
|
运维 负载均衡 监控
服务网格技术对比:深入比较Istio、Linkerd和Envoy等服务网格解决方案的优缺点
服务网格技术对比:深入比较Istio、Linkerd和Envoy等服务网格解决方案的优缺点
563 0
|
5月前
|
安全 测试技术 开发者
探索服务网格技术:Istio的奥秘与力量
【6月更文挑战第1天】本文介绍了服务网格技术的代表Istio,它是处理服务间通信的基础设施层,由Google、IBM和Lyft联合开发。Istio提供流量管理、安全和可观察性等功能,支持灰度发布、蓝绿部署等,并确保通信安全。适用于微服务治理、多云环境和复杂网络拓扑,尤其适合安全敏感应用。理解Istio有助于解决微服务架构中的挑战。
|
1月前
|
Kubernetes 负载均衡 安全
Istio在微服务中释放服务网格的力量
Istio在微服务中释放服务网格的力量
50 4
|
3月前
|
负载均衡 监控 安全
Istio:微服务治理的超级英雄,一键解锁你的服务网格超能力,让管理复杂变简单!
【8月更文挑战第31天】随着云原生技术的发展,微服务架构成为主流,但其复杂性与管理难题也随之增加。Istio作为开源服务网格平台,通过独特的数据平面和控制平面设计,实现了微服务通信的透明管理,简化了治理复杂度。本文将对比Istio与传统微服务管理方法,详细介绍Istio的架构及其工作原理,包括Envoy代理、服务发现、负载均衡、流量管理、安全认证以及监控等功能。Istio不仅简化了微服务治理,还提供了强大的流量控制和安全机制,使开发者能更高效地管理应用。
71 2
|
3月前
|
开发者 项目管理 开发工具
震惊!单人开发者如何成功过渡到团队协作?Xamarin 项目管理经验大揭秘,让你的开发之路一帆风顺!
【8月更文挑战第31天】Xamarin 是移动应用开发领域的热门跨平台工具,适用于个人开发者及团队。个人开发时需明确需求、运用版本控制(如 Git)并合理规划项目结构以增强代码可维护性。团队协作时,则需建立有效沟通渠道、统一代码规范、严格版本控制及合理分配任务,以提升开发效率与项目质量。
64 1
|
3月前
|
Kubernetes 安全 Cloud Native
解锁安全新纪元:利用服务网格Istio,打造全链路mTLS加密隧道,从入口网关到出口网关,守护数据安全的每一步
【8月更文挑战第2天】随着云原生技术的发展,服务网格(Service Mesh)如Istio已成为微服务架构的核心,通过双向TLS(mTLS)确保通信安全。首先,在Kubernetes部署Istio以管理服务通信。接着,配置入口网关实现所有入向流量的加密处理,防止数据泄露。最后,通过配置Sidecar代理如Envoy,确保服务网格安全访问外部mTLS服务,从而构建起全链路的数据安全防护。
80 11
|
6月前
|
负载均衡 安全 网络协议
如何通过计算巢在ACK集群上使用Istio服务网格
本文主要介绍怎么通过计算巢部署Isito服务网格,并介绍了使用示例。
|
Kubernetes 监控 Go
在Kubernetes上安装和配置Istio:逐步指南,展示如何在Kubernetes集群中安装和配置Istio服务网格
在Kubernetes上安装和配置Istio:逐步指南,展示如何在Kubernetes集群中安装和配置Istio服务网格
264 0
|
Cloud Native 前端开发 JavaScript
《Istio 服务网格在生产环境的实践与挑战》
《Istio 服务网格在生产环境的实践与挑战》
189 0