前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【译文连载】 理解Istio服务网格(第一章 概述)

【译文连载】 理解Istio服务网格(第一章 概述)

作者头像
SammyLiu
发布于 2020-02-25 04:13:27
发布于 2020-02-25 04:13:27
6120
举报
文章被收录于专栏:世民谈云计算世民谈云计算

书籍英文版下载链接为 https://developers.redhat.com/books/introducing-istio-service-mesh-microservices/,作者 Burr Sutter 和 Christian Posta

第一章 概述

中文翻译 刘世民 @2020.02

如果你正在寻找带有详细示例的有关Istio的介绍性文档,那这本书正好合适你。本书适合正在基于微服务架构开发云原生应用的应用架构师和开发团队组长们阅读。本书假设你已有Docker使用经验;因为Istio已在多个Linux容器编排项目中被用到,本书聚焦在Kubernetes和OpenShift中使用Istio。本书中,我们会不加区分地使用Kubernetes和OpenShift这两个术语(OpenShift是红帽公司发布的Kubernetes发行版本)。

如果你需要一本介绍基于Spring Boot和Thorntail(之前被称为WildFly Swarm)的Java微服务的书,我推荐你阅读由Christian Posta写作的Microservices for Java Developers(O’Reilly)一书。

如果你对响应式微服务(reactive microservice)感兴趣,那我推荐你从阅读Clement Escoffier所作的Build Reactive Microservices in Java(O’Reilly)一书开始。这书详细介绍了Vert.x,这是一个使用JVM的响应式微服务编程套件。

另外,本书还假设你已有一些Kubernetes/OpenShift使用经验;如果还没有,那我推荐你阅读由Grant Shipley 和 Graham Dumpletion写作的OpenShift for Developers(面向开发者的OpenShift,O’Reilly)一书。我们会在OpenShift环境中部署、配置和使用Istio;然而,我们所用到的大多数命令都可以直接在Kubernetes中使用。

我们现在来看下Istio可以帮助开发者解决哪些困难,然后介绍它的主要组件。

1.1 前方的挑战

当前,软件开发领域正处于数字化转型时代,正在追求更好地服务客户和用户。如今的数字化创造者,也就是应用程序员们,不仅已通过运用Agile标准进入更快的开发周期,而且还在不断追求更快的开发速度。尽管单体应用有可能每月或每周做一次部署,但是,通过将大型单体应用拆分为更小的单元,将大型开发团队拆分为更小的小组,采用小组间无依赖的工作流、管理模型和开发流水线,我们还可能取得更快的产品交付速度。业界将这称为微服务架构。

关于使用微服务而会面临的各种挑战已有很多报道,首当其冲的,是将它和分布式计算(distributed computing)混为一谈。最大的假象是“网络是可靠的”。微服务通过网络(即微服务之间的连接)进行有效通信。这是过去几十年来大多数企业软件制作方式的根本变化。当你将网络依赖性添加到应用程序的逻辑中时,就会导致很多潜在风险,这些风险与应用程序所依赖的连接数量成指数性增长,而不是成倍增加。

很容易理解的是,当部署周期从每几个月一次显著提升到每周甚至可能每天数十次时,挑战会层出不穷。

一些大型互联网公司不得不开发特殊的框架和库来帮助缓解不可靠的网络、易失性的云主机以及海量代码量所带来的挑战。例如,像Netflix这样的公司创建了Ribbon、Hystrix和Eureka等项目来解决这种问题。Twitter和Google等其他公司也做了类似的事情。他们创建的这些框架具有非常强的语言和平台依赖性,因此,当使用这些框架不支持的编程语言时,这些框架将很难用得上。每当这些框架更新后,还需要相应地更新应用程序。最后,即使他们为每种语言运行时在框架中都增加了支持,在使用过程中也会有大量开销。至少在Netflix中,这些库的创建是在虚拟机(VM)作为主要可部署单元的情景中,它们只能在单个云平台和单个应用程序运行时(Java虚拟机)上实现标准化。大多数公司不能也不会这样做。

Linux容器(例如Docker)和Kubernetes / OpenShift的出现,使得DevOps团队通过在高度自动化的流水线中使用快速流转的不可变镜像来获得更高的速度。现在,开发团队管理流水线的方式独立于容器内运行的语言或框架。OpenShift使我们能够为一组复杂的分布式多语种工作负载提供更好的弹性和整体管理。OpenShift确保开发人员可以轻松部署和管理数百个甚至数千个微服务。这些服务被打包为在Kubernetes Pod中运行的容器,并带有它们各自的语言运行时(例如Java Virtual Machine,CPython和V8)及其所有必要的依赖库,通常以特定语言的框架的形式出现(例如Spring或Express)和库(例如jar或npms)。但是,OpenShift并不介入在各个Pod中运行的应用程序组件之间的交互。这是架构师和开发人员所面临的挑战。快速部署和管理多语言服务的工具和基础架构已经成熟,但是当处理这些服务之间的交互时,我们却缺少类似功能。在这里,Istio这种服务网格将使你作为应用程序开发人员可构建更好的软件并比以往更快地交付它。

1.2 初始Istio

Istio是一种服务网格(service mesh)的实现。服务网格是服务之间的连接组织,带有一些附加功能,例如流量控制、服务发现、负载平衡、弹性、可观察性和安全性等。服务网格使得应用程序从代码中卸载这些功能,以让开发人员专注于业务逻辑。

Istio一开始就被设计为可跨部署平台工作的,同时它具有一流的对Kubernetes的集成性支持。

就像Kubernetes生态系统中的许多开源项目一样,Istio是希腊航海术语,意为“风帆”,就像Kubernetes本身是希腊语中的“舵手”或“船上驾驶员”一样。有了Istio后,人们对服务网格概念的兴趣与日俱增,而Kubernetes / OpenShift离开的地方就是Istio的起点。Istio为开发人员和架构师提供了丰富的声明式服务发现和路由功能。在Kubernetes / OpenShift的服务(service)组件为你提供默认的轮询(round-robin)负载均衡功能时,Istio允许你在网格内的所有服务之间引入唯一且细粒度的路由规则。Istio还为我们提供了强大的可观察性,以能更深入地研究分布式微服务间的网络拓扑,了解它们之间的流(跟踪)并能够即时查看关键指标。

既然网络实际上并不总是可靠的,那么,就需要对微服务间的关键链路进行更严格的监控和操作。Istio为我们提供了网络层的弹性功能,例如重试、超时以及各种断路器功能。

Istio还为开发人员和架构师提供了实践混沌工程学的能力。在第5章中,我们描述了Istio推动混沌注入的能力,以便你可以看到整个应用程序及其潜在的数十种相互依赖的微服务的弹性和健壮性。

在开始讨论之前,我们想确保你对Istio有基本的了解。以下部分将概述Istio的基本组件。

1.3 理解Istio组件

Istio服务网络主要包含两个平面:数据平面(data plane)和控制平面(control plane),如图1-1所示。

图1-1 Istio的数据平面和控制平面

1.3.1 数据平面

数据平面的实现方式是拦截所有入站(ingress,入口)和出站(egress,出口)网络流量。你的业务逻辑、应用程序和微服务都不会觉察到这种拦截。你的微服务可使用简单框架在整个网络上调用远程HTTP端点(例如Spring RestTemplate或JAX-RS客户端),并且大多数情况下对这种拦截带来的众多有趣能力全然不知。图1-2描述了Istio出现之前的典型微服务。

图1-2 Istio出现前的微服务架构

Istio服务网格的数据平面由以边车容器(sidecar container)形式运行的istio-proxy实例组成,如图1-3所示。

图1-3 Evoy边车(istio-proxy)

服务代理

服务代理(Service proxy)增强了应用程序服务。每当需要通过网络进行通信时,应用程序服务就会通过服务代理进行调用。服务代理充当中介或拦截器,可以添加诸如自动重试、断路器、服务发现和安全性等功能。Istio的默认服务代理基于Envoy代理。

Envoy代理是Lyft开发的第7层(L7)代理(请参阅Wiki上的OSI模型),目前Lyft在生产环境中使用该代理每秒处理数百万个请求。它使用C ++编写,经过了实战测试,性能高和轻量级。它提供诸如HTTP1.1,HTTP2和gRPC的负载平衡功能。它具有收集请求级别指标和跟踪范围(trace span)能力,提供服务发现和注入故障等功能。你可能会注意到Istio的某些功能与Envoy重叠。由于Istio使用Envoy来实现这些功能,因此这一点很好理解。

但是Istio如何将Envoy部署为服务代理呢?Istio使用一种称为边车(sidecar)的部署技术,使服务代理功能与应用程序代码尽可能靠近。

边车(Sidecar)

当Kubernetes / OpenShift诞生时,它们并没有像人们原本期望的那样将Linux容器用作可运行和可部署单元。相反,它创造了Pod概念,这是在Kubernetes / OpenShift世界中被管理的主要目标。为什么需要Pod呢?有人认为这借鉴了1956年的电影《Invasion of the Body Snatchers》,但实际上借鉴了家庭或鲸鱼概念。鲸鱼是与Docker开源项目相关联的早期映像,该项目是那个时代最流行的Linux容器解决方案。Pod可以是一组Linux容器。Sidecar是另一个Linux容器,直接与你的业务逻辑应用程序或微服务容器并存。在现实世界中,边车被固定在摩托车的一侧作为一简单附属品;与之不同的是,Istio中的边车可以接管车把和油门。

使用Istio,可以将第二个Linux容器“ istio-proxy”(也称为Envoy服务代理)手动或自动注入到容纳你的应用程序或微服务的pod中。该边车负责拦截来自业务逻辑容器的所有入站(入口)和出站(出口)网络流量,这意味着可以应用新策略来重新路由传入或传出的流量,还可以应用诸如访问控制列表之类的策略( ACL)或速率限制,还会抓取监视和跟踪数据(Mixer),甚至引入一些混乱,例如网络延迟或HTTP错误。

1.3.2 控制平面

控制平面负责成为配置和策略的中心,并使数据平面在群集中变得可操作,该群集可能由分散在多个节点上的数百个Pod组成。Istio的控制平面包括Istio的三项主要服务:Pilot,Mixer和Citadel。

Pilot

Pilot是一个Istio组件,它负责管理在Kubernetes / OpenShift集群中运行的所有微服务的边车。Istio Pilot将每个独立的istio-proxy微服务包装成Linux容器并在应用程序pod中运行,并具有整体拓扑的实时视图和保持更新的“路由表”。Pilot提供了服务发现等功能,以及对VirtualService的支持。VirtualService使你可以进行细粒度的请求分发、重试、超时等。我们将在第3章和第4章中对此进行详细介绍。

Mixer

顾名思义,Mixer是将事物整合在一起的Istio服务。每个分布式istio-proxy将遥测数据传递回Mixer。此外,Mixer维护整个微服务套件使用和访问策略的规范模型。使用Mixer,你可以创建策略,应用速率限制规则,甚至抓取自定义指标。Mixer具有可插拔的后端体系结构,并随着新插件和合作伙伴的发展而迅速发展,这些插件和合作伙伴以许多新颖有趣的方式扩展了Mixer的默认功能。Mixer的许多功能超出了本书的范围,但我们会在第6章中介绍可观察性,在第7章中介绍了安全性。

Citadel

Istio Citadel组件(以前称为Istio CA或Auth)负责证书签名、颁发、吊销及轮换。Istio向所有微服务颁发X.509证书,从而允许服务间进行双向传输层安全(mTLS)通信并透明地加密所有流量。它使用内置在基础平台中的身份,并将其构建到证书中。此身份使你可以执行策略。第7章讨论了设置mTLS的示例。

本中文译稿版权由本人所有。水平有限,错误肯定是有的,还请海涵。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 世民谈云计算 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
为微服务引入Istio服务网格(上)
版权说明:本文由高晓雪参照如下文档翻译。魏新宇根据高晓雪的翻译文档,做了适当的注解和文字矫正。 https://developers.redhat.com/download-manager/file/istio_mesh_for_microservices_r1.pdf 本文适合对istio的读者提供泛读参考,对istio理解较深的读者,建议直接阅读英文原文。本系列分上下两篇:上篇为1-3章内容,下篇为4-7章内容。 目录 为微服务引入Istio服务网格 1.介绍 1.1.更快的挑战 1.2.认识Ist
魏新宇
2018/06/25
4.2K0
以后别人再问你什么是 Istio,就把这篇文章甩给他
从上面的定义中可以了解到,Istio 为微服务应用提供了一个完整的解决方案,可以以统一的方式去检测和管理微服务。同时,它还提供了管理流量、实施访问策略、收集数据等功能,而所有这些功能都对业务代码透明,即不需要修改业务代码就能实现。
米开朗基杨
2019/09/11
8650
以后别人再问你什么是 Istio,就把这篇文章甩给他
一, 跨语言微服务框架 - Istio 简绍和概念
微服务的概念已经在各大公司实践开了,以Java为代表的spring boot成为了微服务的代表,K8S+Docker成为了微服务运行的最佳环境,微服务的概念已经离我们没有那么遥远了。
喵了个咪233
2022/03/16
1.1K0
【从小白到专家】Istio系列之二:核心组件介绍
Istio,被称作Kubernetes的最佳云原生拍档。我们推出“Istio技术实践”系列专题,在本专题中,将通过技术文章+视频授课的方式,为大家详细阐述Istio微服务治理,及在企业级云平台中的解决方案和实践。同时,您还可以申请试用灵雀云基于原生Istio和Kubernetes的微服务产品ASM!
灵雀云
2020/05/12
1.1K0
【从小白到专家】Istio系列之二:核心组件介绍
Istio与Kubernetes叠加后的快感从何而来?
本文选自《云原生服务网格Istio》一书,带你从原理、实践、架构与源码多角度全解Istio,直击Istio的每一个细节。
博文视点Broadview
2020/06/10
8500
Istio与Kubernetes叠加后的快感从何而来?
【译文连载】 理解Istio服务网格(第二章 安装)
本章中,我们会介绍如何在Kubernetes上安装Istio。Istio并没有和Kubernets绑定,实际上,它合适很多种基础架构平台。但是,Kubernetes因为原生支持边车部署(sidecar deployment)概念,因此它是运行Istio的最佳平台之一。你可以使用任何版本的Kubernetes。本章中,我们将使用Minishift,这是一个可以让你的OpenShift安装并运行在本地虚拟机上的工具,而OpenShift则是一个面向开发者的Kubernetes企业发行版。
SammyLiu
2020/02/25
7840
Istio+K8s,微服务的双剑合璧!
服务网格(Service Mesh)用来描述组成这些应用程序的微服务网络以及它们之间的交互。
小仙女闯运维
2020/09/23
3.2K0
《云原生服务网格Istio》第2章 Istio架构概述
第2章 Istio架构概述 2.1 Istio的工作机制 分为控制面和数据面两部分。可以看到,控制面主要包括Pilot、Mixer、Citadel等服务组件;数据面由伴随每个应用程序部署的代理程序Envoy组成,执行针对应用程序的治理逻辑 即观察frontend服务对 forecast 服务进行一次访问时,在 Istio 内部都发生了什么,以及 Istio 的各个组件是怎样参与其中的,分别做了哪些事情 虽然从时序上来讲,控制面的配置在前,数据面执行在后,但为了便于理解,在下面介绍这些动作时以数据面上的数据流
yeedomliu
2019/10/11
1.6K0
《云原生服务网格Istio》第2章 Istio架构概述
【云原生|技术基石】4:速通云原生基石-Istio服务网格
本期文章是介绍云原生技术的基石:Istio服务网格,上次的文章中我们已经学习过了Pod的详细介绍,感兴趣的同学可以去看一下,任意门:【云原生|实战研发】2:Pod的深入实践与理解
程序员洲洲
2024/06/07
1910
【云原生|技术基石】4:速通云原生基石-Istio服务网格
Istio 系列篇一 | 服务网格和 Istio
在之前的一篇文章 云原生思想 中,说过软件架构是从 单体 -> 微服务 -> 基于 k8s 上的微服务 -> 服务网格 逐步演进的。
gopher云原生
2021/12/24
1.2K0
Istio 系列篇一 | 服务网格和 Istio
使用 Istio 治理微服务
使用云平台可以为组织提供丰富的好处。然而,不可否认的是,采用云可能会给 DevOps 团队带来压力。开发人员必须使用微服务以满足应用的可移植性,同时运营商管理了极其庞大的混合和多云部署。Istio 允许您连接、保护、控制和观测服务。
搜云库技术团队
2019/10/17
1K0
打造企业级自动化运维平台系列(十六):服务网格 Istio 详解
官方解释:An open platform to connect, secure, control and observe services.
民工哥
2024/01/18
7990
打造企业级自动化运维平台系列(十六):服务网格 Istio 详解
Istio面试题及答案-2023&2024
Istio基于Envoy代理实现服务网格的功能,通过Pilot进行配置管理,Mixer进行遥测和策略执行,Citadel提供安全控制,Galley负责校验和转换配置资源,Ingress Gateway提供对Kubernetes集群内部服务的访问。这些组件共同构成了Istio的控制平面和数据平面。
jack.yang
2025/04/05
1410
Istio面试题及答案-2023&2024
《istio实战指南》第2章 Istio入门
第2章 Istio入门 ---- 什么是Istio 它是一个完全开源的服务网格,以透明层的方式构建在现有分布式应用中。它也是一个提供了各种API的平台,可以与任何日志平台、监控系统或策略系统集成。Istio的多样化特性可以让你高效地运行分布式微服务架构,并提供一种统一的方式来保护、连接和监控微服务 Istio为微服务应用提供了一个完整的解决方案,可以以统一的方式去检测和管理微服务。同时,它还提供了管理流量、实施访问策略、收集数据等功能,而所有这些功能都对业务代码透明,即不需要修改业务代码就能实现 有了Ist
yeedomliu
2020/07/14
1.7K0
《istio实战指南》第2章 Istio入门
Istio 服务网格:深入学习网络流量和架构
作者 | Kasun Talwatta 译者 | 张卫滨 策划 | marsxxl 本文首先介绍了 Istio 的基础知识,然后结合实际的样例阐释了 Istio 是如何将 sidecar 容器注入到 Kubernetes 集群中,并实现流量拦截的。 本文最初发表于 Solo 官方博客,经原作者 Kasun Talwatta 授权,由 InfoQ 中文站翻译分享。 像 Istio 这样的服务网格项目会为我们的架构引入很多的特性和收益,包括更安全地管理集群中微服务之间的流量、服务发现、请求路由以及
深度学习与Python
2023/03/29
6040
Istio 服务网格:深入学习网络流量和架构
服务网格Istio初探
这个术语通常用于描述构成这些应用程序的微服务网络以及应用之间的交互。随着规模和复杂性的增长,服务网格越来越难以理解和管理。它的需求包括服务发现、负载均衡、故障恢复、指标收集和监控以及通常更加复杂的运维需求,例如 A/B 测试、金丝雀发布、限流、访问控制和端到端认证等。
老梁
2019/08/21
1K0
服务网格Istio初探
Istio: 服务网格领域的新王者
Istio 是当前 Service Mesh 领域最完善的解决方案,同源自 kubernetes 项目团队。
钟华
2019/02/12
4.4K0
Istio 实践手册 |服务网格框架对比
当前,业界主要有以下主要几种 Service Mesh 框架,下面进行详细的说明及对比。
xcbeyond
2021/11/28
1.5K1
Istio 实践手册 |服务网格框架对比
服务网格和Istio初识-续
本文是服务网格和Istio初识的续篇内容,主要是漫谈(记录)一些关于服务网格、Istio的一些理论及个人认知
仙人技术
2022/01/20
3440
服务网格和Istio初识-续
入门向:Istio 与服务网格
近期,服务网格(Service Mesh)越加流行红火,各类社区讨论也层出不穷。面对如此火热的技术,我们不免有些疑问:服务网格究竟是什么,服务网格解决了什么?本文尝试简单讲解服务网格的架构设计,并介绍其流行解决方案 Istio。
CS实验室
2021/03/22
4520
入门向:Istio 与服务网格
推荐阅读
相关推荐
为微服务引入Istio服务网格(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档