云原生Istio基础

一.Service Mesh 架构

Service Mesh(服务网格)是一种用于处理服务到服务通信的专用基础设施层。它的主要目的是将微服务之间复杂的通信和治理逻辑从微服务代码中分离出来,放到一个独立的层中进行管理。传统的微服务架构中,服务之间的通信、安全、监控等功能往往是和业务逻辑代码混合在一起的。而 Service Mesh 架构则是在每个微服务实例旁边部署一个代理(通常称为 Sidecar 代理),这些代理组成了服务网格,负责处理服务之间的通信和相关治理功能。

Service Mesh最核心的设计逻辑——通过Sidecar的方式代理微服务进行服务治理逻辑(数据面),通过控制面感知外界环境的变化并通过xDS协议支持各种微服务治理策略规则的集中管理和下发

主要组件

Sidecar代理:

这是 Service Mesh 架构的核心组件之一。Sidecar 代理与微服务实例部署在同一主机或容器中,它和微服务实例是一对一的关系。例如,在一个 Kubernetes 集群中,每个微服务的 Pod 内除了有微服务本身,还会有一个 Sidecar 代理。

它主要负责拦截微服务的入站和出站通信流量。对于入站流量,它可以进行请求验证、限流等操作;对于出站流量,它可以处理服务发现、负载均衡、路由选择等功能。以一个简单的 Web 服务请求为例,当客户端请求到达微服务时,Sidecar 代理会先接收这个请求,进行安全检查等操作后,再将请求转发给微服务本身。

控制平面(Control Plane):

控制平面是 Service Mesh 架构中的管理中心。它主要负责管理和配置所有的 Sidecar 代理。它包含多个组件,如配置管理、服务发现、证书管理等功能组件。

配置管理组件负责向 Sidecar 代理推送各种配置规则,比如流量路由规则、安全策略等。服务发现组件则用于维护服务的注册信息,帮助 Sidecar 代理找到目标服务的位置。证书管理组件负责为服务间通信提供安全证书,用于身份验证和加密通信。

二.Istio是什么

Istio由Google、IBM和Lyft在2017年5月合作推出,它的初始设计目标是在Kubernetes的基础上,以非侵入的方式为运行在集群中的微服务提供流量管理、安全加固、服务监控和策略管理等功能。

Istio是 Service Mesh 架构的一种实现,服务之间的通信会通过代理(默认是 Envoy,面向Service Mesh的高性能网络代理服务)来进行。中间的网络协议支持 HTTP/1.1,HTTP/2,gRPC 或者 TCP,可以说覆盖了主流的通信协议。代理这一层,称之为数据平面。

控制平面做了进一步的细分,分成了 Pilot、Citadel 和 Galley,它们的各自功能如下:

Pilot:为 Envoy 提供了服务发现,流量管理和智能路由,以及错误处理功能。

Citadel:为服务之间提供认证和证书管理,可以让服务自动升级成 TLS 协议。

Galley:Galley 是 Istio 的配置验证、提取、处理和分发组件。它负责将其余的 Istio 组件与从底层平台(例如 Kubernetes)获取用户配置的细节隔离开来。数据平面会和控制平面通信,一方面可以获取需要的服务之间的信息,另一方面也可以汇报服务调用的 Metrics 数据。

istio 适用于容器或虚拟机环境(特别是 k8s),兼容异构架构。

istio 使用 sidecar(边车模式)代理服务的网络,不需要对业务代码本身做任何的改动。

HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。

istio 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制;支持访问控制、速率限制和配额。

istio 对出入集群入口和出口中所有流量的自动度量指标、日志记录和跟踪。

Istio功能:

连接(Connect):智能控制服务之间的调用流量,能够实现灰度升级、AB 测试和红黑部署等功能

安全加固(Secure):自动为服务之间的调用提供认证、授权和加密。

控制(Control):应用用户定义的 policy,保证资源在消费者中公平分配。

观察(Observe):查看服务运行期间的各种数据,了解服务的运行情况。

Istio 提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控等功能,而不需要对服务的代码做任何改动。

Istio有助于降低部署的复杂性,并减轻开发团队的压力。它是一个完全开放源代码的服务网格,透明地分层到现有的分布式应用程序上。它也是一个平台,包括允许它集成到任何日志平台、遥测或策略系统中的api。Istio的多种功能集使我们能够成功、高效地运行分布式微服务体系结构,并提供一种统一的方式来保护、连接和监视微服务。

Istio 确保云原生和分布式系统具有弹性,帮助现代企业跨不同平台维护其工作负载,同时保持连接和保护。它支持安全和监管控制,包括 mTLS 加密、策略管理和访问控制,为 Canary 部署、A/B 测试、负载均衡、故障恢复等网络功能提供支持,并增加对整个资产中流量的可观察性。Istio 并不局限于单个集群、网络或运行时的边界,即在 Kubernetes 或 VM、多云、混合或本地上运行的服务

三.Istio的应用场景

在传统的服务部署中,通常为单个节点搭建一整套服务的架构,例如单节点搭建web服务,数据库服务,但这样就出现了单节点潜在的问题,随着应用的访问量增加,单台服务器的资源(如 CPU 处理能力、内存容量、网络带宽等)会成为限制应用性能的因素。原来的单个应用拆分成了许多分散的微服务,它们之间相互调用才能完成一个任务,而一旦某个过程出错(组件越多,出错的概率也就越大),就非常难以排查。

用户请求出现问题无外乎两个问题:错误和响应慢。如果请求错误,那么我们需要知道那个步骤出错了,这么多的微服务之间的调用怎么确定哪个有调用成功?哪个没有调用成功呢?

如果是请求响应太慢,我们就需要知道到底哪些地方比较慢?整个链路的调用各阶段耗时是多少?这些问题需要我们能非常清楚整个集群的调用以及流量情况。并且微服务拆分成这么多组件,如果单个组件出错的概率不变,那么整体有地方出错的概率就会增大。服务调用的时候如果没有错误处理机制,那么会导致非常多的问题。如果某些节点异常(比如网络中断,或者负载很高),也会导致应用整体的响应时间变长,集群服务应该能自动避开这些节点上的应用。

为了保证整个系统的安全性每个应用都需要实现一套相似的认证、授权、HTTPS、限流等功能。

四.Istio的功能

1.连接

对网格内部的服务之间的调用所产生的流量进行智能管理,并以此为基础,为微服务的部署、测试和升级等操作提供有力保障。微服务错综复杂,要完成其业务目标,连接问题是首要问题。连接存在于所有服务的整个生命周期中,用于维持服务的运行,算得上重中之重。

  1. 相对于传统的单体应用,微服务的端点数量会急剧增加,现代的应用系统在部分或者全部生命周期中,都存在同一服务的不同版本,为不同的客户、场景或者业务提供不同的服务。同时,同一服务的不同版本也可能有不同的访问要求,甚至产生了在生产环境中进行测试的新方法论。错综复杂的服务关系对开发者来说都是很严峻的考验。

从不同的外部用户的角度来看,他们访问的都是同一服务端口,但实际上会因为不同的用户识别,分别访问服务A的不同版本;在网格内部,服务A的版本1可能会访问服务B的两个版本,服务A的版本2则只会访问服务B的版本2;服务B的版本2需要访问外部的云服务,版本1则无此需求。

在这个简化的模型中,包含了以下诉求:

◎ 网格内部的调用(服务A→服务B);

◎ 出站连接(服务B→外部云服务);

◎ 入站连接(用户→服务A);

◎ 流量分割(A服务跟B服务只负责与自己相关流量请求);

◎ 按调用方的服务版本进行路由(服务A的版本1分别调用了服务B的版本1和版本2);

◎ 按用户身份进行路由。

这里除了这些问题,还存在一些潜在需求,如下所述。

(1)在网格内部的服务之间如何根据实际需要对服务间调用进行路由,条件可能包括:

    ◎ 调用的源和目的服务;

    ◎ 调用内容;

    ◎ 认证身份。

(2)如何应对网络故障或者服务故障。

(3)如何处理不同服务不同版本之间的关系。

(4)怎样对出站连接进行控制。

(5)怎样接收入站连接来启动后续的整个服务链条。

连接是服务网格应用过程中从无到有的最重要的一个环节。

2.安全

为网格内部的服务之间的调用提供认证、加密和鉴权支持,在不侵入代码的情况下,加固现有服务,提高其安全性。Istio 提供了底层的安全通信通道,并为大规模的服务通信管理认证、授权和加密。有了 Istio,服务通信在默认情况下就是受保护的,可以让您在跨不同协议和运行时的情况下实施一致的策略——而所有这些都只需要很少甚至不需要修改应用程序。Istio 是独立于平台的,可以与 Kubernetes的网络策略一起使用。但它更强大,能够在网络和应用层面保护pod到 pod 或者服务到服务之间的通信。

安全问题在以前并不被经常提及,但容器云时代之后,以下问题出现了。

(1)有大量容器漂浮在容器云中,采用传统的网络策略应对这种浮动的应用是比较吃力的。

(2)在由不同的语言、平台所实现的微服务之间,实施一致的访问控制也经常会因为实现的不一致而困难重重。

(3)如果是共享集群,则服务的认证和加密变得尤为重要,比如:

  1.  服务之间的通信要防止被其他服务监听;
  2.  只有提供有效身份的客户端才可以访问指定的服务;
  3.  服务之间的相互访问应该提供更细粒度的控制功能。

要提供网格内部的安全保障,就应具备服务通信加密、服务身份认证和服务访问控制(授权和鉴权)功能。上述功能通常需要数字证书的支持,这就隐藏了对CA的需求,即需要完成证书的签发、传播和更新业务。除了上述核心要求,还存在对认证失败的处理、外部证书(统一 CA)的接入等相关支撑内容。

3.策略

在控制平面定制策略,并在服务中实施。

Mixer: Mixer 在整个服务网格中执行访问控制和策略执行,并从 Envoy 代理和其他服务收集遥测数据。

Envoy: 在istio框架中使用Envoy作为代理,面向Service Mesh的高性能网络代理服务,用于为服务网格中的所有服务提供所有的入站和出站流量,唯一一个与数据平面打交道的

  1. Istio 通过可动态插拔、可扩展的策略实现访问控制、速率限制、配额管理等功能使得资源在消费者之间公平分配在Istio中使用Mixer作为策略的执行者,Envoy的每次调用,在逻辑上都会通过Mixer进行事先预检和事后报告,这样Mixer就拥有了对流量的部分控制能力;在Istio中还有为数众多的内部适配器及进程外适配器,可以和外部软件设施一起完成策略的制定和执行。

4.观察

对服务之间的调用进行跟踪和测量,获取服务的状态信息。

随着廉价服务器(相对于传统小型机)的数量越来越多,服务器发生故障的频率也越来越高,人们开始产生争论:我们应该将服务器视为家畜还是宠物?家畜的特点:是有功能、无个性、可替换;而宠物的特点:是有功能、有个性、难替换。

随着时代发展,越来越倾向于将服务器视为无个性、可替换的基础设施,如果主机发生故障,那么直接将其替换即可;并且,我们更加关注的是服务的总体质量。因此,微服务系统监控,除了有传统的主机监控,还更加重视高层次的服务健康监控。

服务的健康情况往往不是非黑即白的离散值,而是一系列连续状态,例如我们经常需要关注服务的调用成功率、响应时间、调用量、传输量等表现。

而且,面对数量众多的服务,能对各种级别和层次的指标进行采样、采集及汇总,获取较为精密、翔实的运行数据,最终通过一定的方法进行归纳总结和展示。服务网格还应提供分布式跟踪功能,对服务的调用链路进行跟踪。

观察性:动态获取服务运行数据和输出,提供强大的调用链、监控和调用日志收集输出的能力。配合可视化工具,可方便运维人员了解服务的运行状况,发现并解决问题。

五.Istio与kubernetes

从场景来看,Kubernetes已经提供了非常强大的应用负载的部署、升级、扩容等运行管理能力。Kubernetes 中的 Service 机制也已经可以做服务注册、服务发现和负载均衡,支持通过服务名访问到服务实例。从微服务的工具集观点来看,Kubernetes本身是支持微服务的架构,在Pod中部署微服务很合适,也已经解决了微服务的互访互通问题,但对服务间访问的管理如服务的熔断、限流、动态路由、调用链追踪等都不在Kubernetes的能力范围内。Istio最大化地利用了Kubernetes这个基础设施,与之叠加在一起形成了一个更强大的用于进行服务运行和治理的基础设施,充分利用了Kubernetes的优点实现Istio的功能

  1. 数据面Sidecar运行在Kubernetes的Pod里,作为一个Proxy和业务容器部署在一起。在服务网格的定义中要求应用程序在运行的时感知不到Sidecar的存在。而基于Kubernetes的一个 Pod 多个容器的优秀设计使得部署运维对用户透明,用户甚至感知不到部署 Sidecar的过程。用户还是用原有的方式创建负载,通过 Istio 的自动注入服务,可以自动给指定的负载注入Proxy。如果在另一种环境下部署和使用Proxy,则不会有这样的便利。
  1. Istio的服务发现机制非常完美地基于Kubernetes的域名访问机制构建而成,避免了在 Kubernetes 上运行时服务发现数据不一致的问题。
  1. Istio的所有路由规则和控制策略都是通过 Kubernetes CRD实现的,因此各种规则策略对应的数据也被存储在 Kube-apiserver 中,不需要另外一个单独的 APIServer 和后端的配置管理。所以,可以说Istio的APIServer就是Kubernetes的APIServer,数据也自然地被存在了对应Kubernetes的etcd中。Kubernetes里已经有的,绝不再自己搞一套,避免了数据不一致和用户使用体验的问题。

Istio和Kubernetes架构的关系,Istio不仅数据面Envoy跑在Kubernetes的Pod里,其控制面也运行在Kubernetes集群中,其控制面组件本身存在的形式也是以Kubernetes Deployment和Service,基于Kubernetes扩展和构建。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/458736.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅析Android View绘制过程中的Surface

前言 在《浅析Android中View的测量布局流程》中我们对VSYNC信号到达App进程之后开启的View布局过程进行了分析,经过对整个App界面的View树进行遍历完成了测量和布局,确定了View的大小以及在屏幕中所处的位置。但是,如果想让用户在屏幕上看到…

【十六进制数转十进制数 】

【十六进制数转十进制数 】 C语言版本C 版本Java版本Python版本 💐The Begin💐点点关注,收藏不迷路💐 从键盘接收一个十六进制数,编程实现将其转换成十进制数。 输入 输入一个十六进制数 输出 输出一个十进制数 样…

GitHub 上的优质 Linux 开源项目,真滴硬核!

作为一名互联网人,提起 Linux 大家都不陌生,尤其是日常跟 Linux 操作系统打交道最多的,最熟悉不过了。互联网上关于 Linux 相关的教程和资料也非常的多,但是当你从中筛选出真正对自己有帮助的资料是需要花费很大精力与时间的。 G…

JVM基础(内存结构)

文章目录 内存结构JAVA堆方法区 (Method Area)运行时常量池(Runtime Constant Pool) 虚拟机栈 (Java Virtual Machine Stack)本地方法摘栈(Native Method Stacks)程序计数器&#xf…

交易的人生就是对未来不断的挑战!

在这个充满不确定性的市场中,我们每个人都渴望找到一条通往成功的路径。在Eagle Trader交易员中,有一位资深交易者,他不仅对交易有着不同寻常的执着和热爱,而且他的真诚见解和独到的交易哲学,可能会触动你的心弦。他的…

尚硅谷-react教程-求和案例-@redux-devtools/extension 开发者工具使用-笔记

## 7.求和案例_react-redux开发者工具的使用(1).npm install redux-devtools/extension(2).store中进行配置import { composeWithDevTools } from redux-devtools/extension;export default createStore(allReducer,composeWithDevTools(applyMiddleware(thunk))) src/redux/s…

OpenCV系列教程六:信用卡数字识别、人脸检测、车牌/答题卡识别、OCR

文章目录 一、信用卡数字识别1.1 模板匹配1.2 匹配多个对象1.3 处理数字模板1.4 预处理卡片信息,得到4组数字块。1.5 遍历数字块,将卡片中每个数字与模板数字进行匹配 二、人脸检测2.1人脸检测算法原理2.2 OpenCV中的人脸检测流程 三、车牌识别3.1 安装t…

一行代码,实现请假审批流程(Java版)

首先画一个流程图 测试流程图 activiti 项目基础配置 activiti 工作流引擎数据库设计 工作流引擎API 介绍 什么是BPMN流程图 工作流引擎同类对比 继续学习方向 总结 工作流审批功能是办公OA系统核心能力,如果让你设计一个工作流审批系统,你会吗…

SDK5(note中)

在原有SDK5(note上)里的代码上添加了 timer的消息 LRESULT OnCreate(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {OutputDebugString(_T("[11syy]WM_CREATE\n"));//创建一个计时器SetTimer(hwnd, 1, 1000, nullptr);return TRUE; }LRESULT OnClese(HWND …

全星魅 北斗三号船载终端的优势和领域利用

QM43BS型北斗三号船载终端:开启航海通信与定位新时代 在当今这个信息化高速发展的时代,航海领域对于通信与定位技术的需求愈发迫切。深圳市全民北斗科技有限公司,作为北斗技术应用领域的佼佼者,针对数传通信和位置服务应用&#x…

Python 实现深度学习模型预测控制--预测模型构建

链接:深度学习模型预测控制 链接:WangXiaoMingo/TensorDL-MPC: DL-MPC(deep learning model predictive control) is a software toolkit developed based on the Python and TensorFlow frameworks, designed to enhance the performance of tradition…

你了解kafka消息队列么?

消息队列概述 一. 消息队列组件二. 消息队列通信模式2.1 点对点模式2.2 发布/订阅模式 三. 消息队列的优缺点3.1 消息队列的优点3.2 消息队列的缺点 四. 总结 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者&…

Android Junit 单元测试 | 依赖配置和编译报错解决

问题 为什么在依赖中添加了testImplement在build APK的时候还是会报错?是因为没有识别到test文件夹是test源代码路径吗? 最常见的配置有: implementation - 所有源代码集(包括test源代码集)中都有该依赖库.testImplementation - 依赖关系仅在test源代码…

理解磁盘结构---CHS---LAB---文件系统

1,初步了解磁盘 机械磁盘是计算机中唯的一个机械设备, 特点是慢,容量大,价格便宜。 磁盘上面的光面,由数不清的小磁铁构成,我们知道磁铁是有n/s极的,这刚好与二进制的&…

selenium脚本编写及八大元素定位方法

selenium脚本编写 上篇文章介绍了selenium环境搭建,搭建好之后就可以开始写代码了 基础脚本,打开一个网址 from selenium import webdriver driver webdriver.Chrome()#打开chrome浏览器 driver.get(https://www.baidu.com) #打开百度 打开本地HTML文件 上篇…

利用Kubernetes原生特性实现简单的灰度发布和蓝绿发布

部分借鉴地址: https://support.huaweicloud.com/intl/zh-cn/bestpractice-cce/cce_bestpractice_10002.html 1.原理介绍 用户通常使用无状态负载 Deployment、有状态负载 StatefulSet等Kubernetes对象来部署业务,每个工作负载管理一组Pod。以Deployment为例&#x…

Macos m系列芯片环境下安装python3以及mysqlclient流程以及遇到的一系列问题

最近升级了生产力,换了m3的mbp,迁移项目的时候遇到的一系列python mysqlclient的环境问题,这里总结记录一下。 设备:Macbook Pro m3系统:macos Sonoma 14.6最终成功的python版本:Python3.9.1最终系统环境下…

STL-常用容器-list

1list基本概念 **功能:**将数据进行链式存储 链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成:链表由一系列结点组成 结点的组成:一个是存储…

基于django的志愿者社团管理系统

大家是不是常常遇到校园社团活动组织混乱、统计繁琐的困扰?其实我以前在做毕业设计的时候也头疼这些问题。后来,我们开发了一个基于Django的志愿者社团管理系统,可以帮你轻松解决这些麻烦!📌 🚀 核心功能模…

Opensearch集群部署【docker、服务器、Helm多种部署方式】

操作系统兼容性 我们建议在 Red Hat Enterprise Linux (RHEL) 或使用systemd的基于 Debian 的 Linux 发行版上安装 OpenSearch ,例如 CentOS、Amazon Linux 2 和 Ubuntu Long-Term Support (LTS)。OpenSearch 应该适用于大多数 Linux 发行版,但我们只测…