Istio学习笔记-部署模型
参考:Istioldie 1.18 / 部署模型
当您将 Istio 用于生产环境部署时,需要确定一系列的问题。 网格将被限制在单个集群中还是分布在多个集群中? 是将所有服务都放置在单个完全连接的网络中,还是需要网关来跨多个网络连接服务? 是否存在单个控制平面(可能在集群之间共享), 或者是否部署了多个控制平面以确保高可用(HA)? 如果要部署多个集群(更具体地说是在隔离的网络中), 是否要将它们连接到单个多集群服务网格中, 还是将它们联合到一个多网格 部署中?
所有这些问题,都代表了 Istio 部署的独立配置维度。
- 单一或多个集群
- 单一或多个网络
- 单一或多控制平面
- 单一或多个网格
高可用部署:
基于 3 个集群实现多控制平面的高可用部署,您可以通过使用单一控制平面部署 2 个集群, 然后再添加第 3 个集群和第 2 个控制平面来实现这一点,最后, 再将所有 3 个集群配置为共享 2 个控制平面,以确保所有集群都有 2 个控制源来确保 HA。
集群模型
生产系统可以跨多个集群(基于多可用区、多地域)运行, 借助云负载均衡器来处理诸如本地、区域或地域性故障转移之类的问题。
在 Istio 中,您可以配置单一服务网格以跨越任意数量的集群。
单一集群
在最简单的情况下,您可以将 Istio 网格限制为单一集群。 集群通常在单一网络上运行,但是在不同的基础架构之间会有所不同。 单一集群和单一网络模型包括一个控制平面,这是最简单的 Istio 部署。
单一集群部署提供了简单性,但缺少更多的功能,例如,故障隔离和故障转移。 如果您需要高可用性,则应使用多个集群。
多集群
您可以将单个网格配置为包括多集群。 在单一网格中使用多集群部署, 与单一集群部署相比其具备以下更多能力:
- 故障隔离和故障转移:当
cluster-1
下线,业务将转移至cluster-2
。 - 位置感知路由和故障转移:将请求发送到最近的服务。
- 多种控制平面模型:支持不同级别的可用性。
- 团队或项目隔离:每个团队仅运行自己的集群。
对于应用变更或新的版本,您可以在一个集群中配置金丝雀发布,这有助于把对用户的影响降到最低。 此外,如果某个集群有问题,您可以暂时将流量路由到附近的集群,直到解决该问题为止。
若两个集群位于同一基础网络,则可以通过简单地配置防火墙规则来启用跨集群通信。
在多集群网格中,所有的服务都是默认共享的,根据命名空间一致性的概念。 流量管理规则对多集群的流量提供了细粒度的控制。
多集群的 DNS
当客户端应用程序向某个主机发出请求时,它必须首先对主机名执行 DNS 查找以获得 IP 地址,然后才能继续请求。 在 Kubernetes 中,集群内的 DNS 服务器通常会根据配置的 Service
定义来处理此 DNS 查找。
Istio 使用 DNS 查找返回的虚拟 IP 在所请求 Service 的活动 Endpoint 列表之间进行负载平衡, 同时考虑任何 Istio 配置的路由规则。 Istio 使用 Kubernetes 的 Service
/Endpoint
或 Istio 的 ServiceEntry
来配置主机名到工作负载 IP 地址的内部映射。
当您有多个集群时,这种两层命名系统会变得更加复杂。 Istio 本质上是多集群感知的,但 Kubernetes 不是(至少现在不是)。 因此,客户端集群必须具有该 Service 的 DNS 条目, 以便 DNS 查找成功,并成功发送请求。 即使在客户端集群中没有运行该服务的 Pod 实例也是如此。
为确保 DNS 查找成功,您必须将 Kubernetes Service
部署到使用该 Service
的每个集群。 这确保无论请求来自何处,它都会通过 DNS 查找并交给 Istio 以进行正确的路由。 这也可以通过 Istio ServiceEntry
而不是 Kubernetes Service
来实现。 但是,ServiceEntry
不会配置 Kubernetes DNS 服务器。 这意味着需要手动或使用自动化工具配置 DNS, 例如 DNS 代理 的自动分配地址功能。
网络模型
Istio 使用网络的简化定义来指代具有直接可达性的工作负载实例。 例如,默认情况下,单个集群中的所有工作负载实例都在同一网络上。
许多生产系统需要多个网络或子网来实现隔离和高可用性。 Istio 支持跨多种网络拓扑扩展服务网格。 这使您可以选择适合您现有网络拓扑的网络模型。
单一网络
在单一网络模型中, 工作负载实例都可以直接相互访问, 而无需 Istio 网关。
单一网络模型允许 Istio 以统一的方式在网格上配置服务使用者, 从而能够直接处理工作负载实例。
多网络
您可以配置单个服务网格跨多个网络,这样的配置称为多网络。
多网络模型提供了单一网络之外的以下功能:
- 服务端点范围的 IP 或 VIP 重叠
- 跨越管理边界
- 容错能力
- 网络地址扩展
- 符合网络分段要求的标准
在此模型中,不同网络中的工作负载实例只能通过一个或多个 Istio 网关相互访问。 Istio 使用分区服务发现为消费者提供服务端点的不同视图。 该视图取决于消费者的网络。
此解决方案需要通过网关公开所有服务(或子集)。 云供应商可能会提供不需要在公共互联网上公开服务的选项。 这样的选项,如果存在并且满足您的要求,可能是最佳选择。
控制平面模型
Istio 网格使用控制平面来配置网格内工作负载实例之间的所有通信。 您可以复制控制平面,工作负载实例可以连接到任何一个控制平面实例以获取其配置。
在最简单的情况下,可以在单一集群上使用控制平面运行网格。
像这样的集群,具有自己的本地控制平面,被称为主集群。
多集群部署还可以共享控制平面实例。在这种情况下,控制平面实例可以驻留在一个或多个集群中。 没有自己的控制平面的集群被称为从集群。
跨两个集群共享控制平面的服务网格
在具有多个主集群的多集群部署中,每个主集群都从驻留在同一集群中的 Kubernetes API 服务器接收其配置(即 Service
和 ServiceEntry
、 DestinationRule
等)。因此,每个主集群都有一个独立的配置源。 这种跨主集群的配置重复在推出更改时确实需要额外的步骤。 大型生产系统可以使用工具(例如 CI/CD 系统)自动执行此过程,以便管理配置推出。
完全由从集群组成的服务网格由外部控制平面控制, 而不是在网格内的主要集群中运行控制平面。 这提供了隔离管理,并将控制平面部署与构成网格的数据平面服务完全分离。
具有外部控制平面的单个集群
云供应商的托管控制平面是外部控制平面的典型示例。
为了获得高可用性,您应该在多个集群、区或地域之间部署控制平面。
每个地域都有控制平面实例的服务网格
该模型具有以下优点:
- 更强的可用性:如果控制平面不可用,则不可用范围仅限于该控制平面。
- 配置隔离:您可以在一个集群、区域或地域中进行配置更改,而不会影响其他集群、区或或地域。
- 受控推出:您可以更细粒度地控制配置推出(例如,一次一个集群)。
- 选择性服务可见:您可以将服务可见性限制在网格的一部分, 帮助建立服务级别隔离。例如,管理员可以选择将 “HelloWorld” 服务部署到集群 A, 而不是集群 B。任何从集群 B 调用 “HelloWorld” 的尝试都将导致 DNS 查找失败。
以下列表按可用性对控制平面部署进行了排名:
- 每个地域一个集群(最低可用性)
- 每个地域多个集群
- 每个区域一个集群
- 每个区域多个集群
- 每个集群(最高可用性)
多控制平面的端点发现
Istio 控制平面通过为每个代理提供服务端点列表来管理网格内的流量。 为了使其在多集群场景中工作,每个控制平面都必须观察来自每个集群中 API 服务器的端点。
为了启用集群的端点发现,管理员生成一个 remote secret
并将其部署到网格中的每个主集群。 remote secret
包含凭据,授予对集群中 API 服务器的访问权限。
然后,控制平面将连接并发现集群的服务端点,从而为这些服务启用跨集群负载平衡。
Primary clusters with endpoint discovery (具有端点发现功能的主群集)
默认情况下,Istio 将在每个集群的端点之间均匀地负载均衡请求。 在跨越地理区域的大型系统中, 可能需要使用地域负载均衡让流量保持在同一区域或地区。
身份和信任模型
在服务网格中创建工作负载实例时,Istio 会为工作负载分配一个身份标识。
证书颁发机构(CA)创建并签名身份标识的证书,以用于验证网格中的使用者身份, 您可以使用其公钥来验证消息发送者的身份。 trust bundle 是一组在 Istio 网格使用的所有 CA 公钥的集合。 使用 trust bundle 任何人都可以验证来自该网格的任何消息发送者。
网格内的信任
在单一 Istio 网格中,Istio 确保每个工作负载实例都有一个表示自己身份的适当证书, 以及用于识别网格及网格联邦中所有身份信息的 trust bundle。 CA 只为这些身份标识创建和签名证书。该模型允许网格中的工作负载实例通信时相互认证。
具有证书颁发机构的服务网格
网格之间的信任
如果网格中的服务需要另一个网格中的服务,则必须在两个网格之间联合身份和信任。 要在不同网格之间联合身份和信任,必须交换网格的 trust bundle。 您可以使用像 SPIFFE 信任域联邦 之类的协议手动或自动交换 trust bundle,将 trust bundle 导入网格后,即可为这些身份配置本地策略。
具有证书颁发机构的多服务网格
网格模型
Istio 支持将您的所有服务都放在一个服务网格中, 或者将多个网格联合在一起,这也称为多网格。
单一网格
最简单的 Istio 部署是单一网格。网格内,服务名称是唯一的。例如, 在命名空间 foo
中只能存在一个名为 mysvc
的服务。 此外,工作负载实例具有相同的标识,因为服务帐户名称在命名空间中也是唯一的, 就像服务名称一样。
单一网格可以跨越一个或多个集群和一个或多个网络。 网格内部,命名空间用于多租户。
多网格
通过网格联邦可以实现多网格部署。
与单一网格相比,多网格具备以下更多功能:
- 组织边界:业务范围
- 服务名称或命名空间复用:比如
default
的使用 - 加强隔离:将测试工作负载与生产工作负载隔离
您可以使用网格联邦启用网格间通信。 联合时,每个网格可以公开一组服务和身份,它们可以被所有参与的网格都可以识别。
多服务网格
为避免服务命名冲突,可以为每个网格赋予全局唯一的 mesh ID,以确保每个服务的完全限定域名(FQDN)是不同的。
联合两个不共享同一信任域的网格时,必须联合身份标识和它们之间的 trust bundles。
租户模型
在 Istio 中,租户是一组用户,它们共享对一组已部署工作负载的公共访问权限。 通常,您可以通过网络配置和策略将工作负载实例与多个租户彼此隔离。
您可以配置租户模型以满足以下组织隔离要求:
- 安全
- 策略
- 容量(Capacity)
- 成本(Cost)
- 性能
Istio 支持两种类型的租赁模型:
- 命名空间租赁
- 集群租赁
- 网格租赁
命名空间租赁
Istio 使用 命名空间 作为网格内的租赁单位。 Istio 还可以在未实现命名空间租用的环境中使用。在这样的环境中,您可以授予团队权限,以仅允许其将工作负载部署到给定的或一组命名空间。 默认情况下,来自多个租赁命名空间的服务可以相互通信。
为提高隔离性,您可以有选择地将部分服务公开给其他命名空间。 您可以为公开服务配置授权策略,以将访问权限仅交给适当的调用者。
命名空间租赁可以扩展到单个集群之外。 在多集群场景中,不同集群中名字相同的命名空间,被认为是相同的命名空间。 例如,集群 cluster-1
中命名空间 foo
下的服务 Service B
与集群 cluster-2
中命名空间 foo
下的服务 Service B
, 指向的是相同的服务,Istio 会合并这些服务端点,用于服务发现和负载均衡。
具有相同命名空间的多集群服务网格
集群租户模型
Istio 还支持使用集群作为租赁单位。在这种情况下,您可以为每个团队提供一个专用集群或一组集群来部署其工作负载。
网格租赁
在具有网格联邦的多网格部署中,每个网格都可以用作隔离单元。
具有两个集群和两个命名空间的隔离的服务网格
由于每个网格都由不同的团队或组织来管理,因此服务命名不需要担心冲突。 例如,集群 cluster-1
中命名空间 foo
下的服务 mysvc
与集群 cluster-2
中命名空间 foo
下的服务 mysvc
, 不是指相同的服务。最常见的示例是在 Kubernetes 中的场景,其中许多团队将其工作负载部署到 default
命名空间。
相关文章:

Istio学习笔记-部署模型
参考:Istioldie 1.18 / 部署模型 当您将 Istio 用于生产环境部署时,需要确定一系列的问题。 网格将被限制在单个集群中还是分布在多个集群中? 是将所有服务都放置在单个完全连接的网络中,还是需要网关来跨多个网络连接服务&#…...
磁盘调度算法
磁盘调度算法是计算机操作系统中用于管理磁盘上的数据访问的重要组成部分。这些算法有助于优化数据的读写操作,以减少磁盘访问时间,提高系统性能。以下是一些常见的磁盘调度算法: 先来先服务(FCFS,First-Come-First-Se…...
力扣题库2. 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开…...

【Linux】第十六站:进程地址空间
文章目录 一、程序地址空间1.内存的分布2.static修饰后为什么不会被释放3.一个奇怪的现象 二、进程地址空间1.前面现象的原因2.地址空间究竟是什么?3.为什么要有进程地址空间4.页表5.什么叫进程?6.进程具有独立性。为什么?怎么做到呢…...

基于Springboot的影城管理系统(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的影城管理系统(有报告)。Javaee项目,springboot项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项目介绍…...

如何在面试中胜出?接口自动化面试题安排上
📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…...

联邦学习研究综述笔记
联邦学习 联邦学习的定义:联邦学习是一种分布式机器学习架构,包含多个客户端(参与者)和一个聚合服务器。客服端(参与方):在本地使用自己的私有数据训练模型,训练完成之后将模型的参…...

RedisTemplate乱码问题
其实这是在解决一个项目问题是发现的,因为原开发者的大意,造成了系统出现严重的逻辑问题。 因为系统系统采用分模块开发,某模块使用Spring提供的RedisTemplate进行值的读写,另一位使用了框架基于Jedis的一套公用方法进行值的读写…...

Java用户和内核交互图
...

2023.11.14使用bootstrap制作一个简洁的前端注册登录页
2023.11.14使用bootstrap制作一个简洁的前端注册登录页 比较简洁的登录页,主要是为自己开发的一些平台页面做测试用,前端具备功能如下: (1)输入用户名、密码,需补充后端验证代码。 (2ÿ…...

Avatar虚拟形象解决方案,趣味化的视频拍摄与直播新体验
企业们正在寻找新的方式来吸引和保持观众的注意力,一种新兴的解决方案就是使用Avatar虚拟形象技术,这种技术可以让用户在视频拍摄或直播场景中,以自定义的数字人形象出现,同时保持所有的表情和脸部驱动。美摄科技正是这个领域的领军者&#x…...
MongoDB备份与恢复以及导入导出
MongoDB备份与恢复 1、mongodump数据备份 在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据 (数据和数据结构) 或指定数据(集合、部分集合内容)到指定目录中。 语法: mongodump -h dbhost -d dbname -o dbdirec…...

如何挑选猫主食罐头?宠物店自用的5款猫主食罐头推荐!
临近双十二大促,是时候给家里的猫主子屯猫主食罐头了。许多铲屎官看大促的各种品牌宣传,看到眼花缭乱,不知道选哪些猫主食罐头好,胡乱选又怕踩坑。 猫罐头侠闪亮登场!如何挑选猫主食罐头?作为经营宠物店7年…...
立哥先进研发-API安全方案
项目背景:随着技术进步,很多优秀技术也被用在黑灰产之中,例如爬虫系统在票务系统中的滥用,尤其机票系统。机票爬虫们威力之大,让人叹为观止:多数订票网站,真实用户产生的不到10%,其浏…...
小函数:Lambda表达式(Java篇)
Lambda表达式的使用场景:用以简化接口实现。 关于接口实现,可以有很多种方式来实现。例如:设计接口的实现类、使用匿名内部类。 但是lambda表达式,比这两种方式都简单! lambda表达式毕竟只是⼀个匿名方法。当实现的接…...

RSS订阅快速连接Notion
数环通让您可以通过不到几分钟的时间即可实现RSS订阅与Notion的对接与集成,从而高效实现工作流程自动化,降本增效! 1.产品介绍 RSS订阅是数环通的内置应用,很多用户通过RSS订阅来收集自己在各大平台上看的内容,当RSS…...

VMware ubuntu 新虚拟机的创建
根据自己指定的路径安装好vm后。 创建新的虚拟机。 记录一下,下次用到别再忘记了。 如需转载,注明出处! 点赞收藏关注我 以资鼓励 打开vm 软件,点击创建新的虚拟机 选择典型,点击下一步 选择你的ubuntu镜像iso文件 …...

第一篇 《随机点名答题系统》简介及设计流程图(类抽奖系统、在线答题系统、线上答题系统、在线点名系统、线上点名系统、在线考试系统、线上考试系统)
专栏目录 第一篇 《随机点名答题系统》简介及设计流程图(类抽奖系统、在线答题系统、线上答题系统、在线点名系统、线上点名系统、在线考试系统、线上考试系统)-CSDN博客 第二篇 《随机点名答题系统》——题库管理详解(类抽奖系统、在线答题…...
C# .NET6 Log4net输出日志
C# Log4Net用法-CSDN博客: .NET6.0的日志组件Log4net_.net log4net-CSDN博客 在 C# .NET6 开发中,log4net 是一个常用的日志记录框架,它可以帮助我们方便地输出日志信息。本教程将向你展示如何在 C# .NET6 中实现 log4net 的日志输出功能。 整体流程 下…...
python数据结构与算法-03_链表
链式结构 上一节讲到了支持随机访问的线性结构,这次我们开始讲链式结构, 视频里我会说下这两种结构的区别,然后讲解最常见的单链表和双链表。 之前在专栏文章那些年,我们一起跪过的算法题[视频]里实现过一个 lru_cache, 使用到的…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...

uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...