Istio_05_Istio架构
Istio_05_Istio架构
- Architecture
- Control Plane
- Pilot
- Citadel
- Galley
 
- Data Plane
- Sidecar
- Istio-proxy
- Pilot-agent
- Metadta Exchange
 
 
- Ambient
 
 
Architecture
如: Istio的架构(控制面、数据面)

- Gateway: Istio数据面的出/入口网关 - Gateway分为: Ingress-gateway、Egress-gateway
- 外部访问服务网格内的服务时均需通过Ingress-gateway(Egress-gateway同理)
- Gateway的Envoy与服务网格内的数据面代理相同, 都需从Pilot接受流量规则并执行
 
Control Plane
控制面(Control Plane): 统一服务发现和集中配置管理
- Istiod以单体应用方式实现, 但功能/维护以组件化方式进行
如: Istio控制面组件架构

Pilot
Pilot: Istio控制面的控制中枢
- 主要功能: 服务发现、配置管理、xDS Server
- Pilot也是Istiod的基础框架, 负责启动/协同其他功能组件
- Envoy均通过gRPC获取Pilot的配置资源, 并建立长连接获取
如: Pilot架构

- 平台适配器从运行平台提取数据并将其构造和转换成Istio服务模型 - Pilot同时支持以MCP从除Kubernetes以外平台服务端获取配置
- Pilot实现MCP客户端, 由第三方注册中心实现MCP服务器
 
- 聚合器将不同平台适配器提供的服务模型聚合, 以提供统一的索引接口 - Pilot通过聚合器可无需关注底层平台的差异(解耦)
- 也可通过ServiceEntry/WorkloadEntry扩展服务
 
- xDS生成器将各种规则转换成Envoy标准格式
- xDS Server通过xDS协议将配置发送给各Envoy- 通过订阅-发布模型实时、动态地推送xDS配置
- 服务网格的数据面代理收到相同的流量规则, 并执行相同的治理行为
- 本质: 通过EDS、CDS和LDS等接口向Enovy分发负载均衡和路由等配置信息
 
xDS Server: 基于xDS协议生成和分发配置
- 构成: xDS生成器、ADS服务器
- xDS(X Discovery Service): 数据源服务发现协议 - 本质: LDS、RDS、CDS、EDS和SDS等发现服务的总称
 
- 本质: 
- ADS(Aggregated Discovery Service): 聚合发现服务 - 本质: 将xDS协议的更新指向相同的xDS Server(gRPC服务器)
- 功能: 避免配置更新过程中的流量丢失(xDS属于最终一致性协议)
 
xDS Server的配置分发模式: 主动、被动
- 主动分发: 根据订阅请求将配置下发到Sidecar(事件触发) - 触发事件: 底层注册中心的服务或配置更新
- 主动分发需Sidecar提前与xDS Server建立连接
 
- 被动分发: 根据Sidecar请求响应配置 - 仅能响应指定请求资源类型的配置
 
如: xDS Server工作流程(省略平台模型的抽象中间组件)

- xDS Server以串行方式分发各xDS协议(CDS -> EDS -> LDS -> RDS)
- Pilot通过各类事件通知xDS Server进行xDS推送(同时缓存xDS配置源)
ADS服务器原理: StoW全量的ADS接口
- ADS服务器对数据的接收/发送使用独立的线程(生命周期同gRPC流)
- ADS服务器中由主线程处理器异步从队列中获取事件处理
如: ADS服务器工作流程

- 首次请求时会包含元数据信息以用于初始化 - 后续的xDS生成/分发都依赖于初始化的元数据
 
Pilot的核心优化设计:
- 三级缓存 - 构成: 平台资源缓存(资源)、Istio聚合层缓存(Istio API)、xDS配置缓存(分发)
- 功能: 以适量的内存换取Pilot的CPU利用率降低
 
- 去抖动分发 - 本质: 以最小静默时间和最大延迟时间参数控制分发频率
- 当时间超过最大延迟时间参数时, 会忽略最小静默时间参数
 
- 防过度分发 - 本质: Pilot等待ACK确定期间的所有xDS分发会合并发送
- 合并发送的数量取决于最近次分发和ACK响应的时间差值
 
Citadel
Citadel: Istio控制面的安全组件
- 主要功能: 自动生成、分发、轮换和撤销证书/密钥
- 证书种类: 双向TLS证书(CA: Citadel自签)、用户指定证书(RA: 机构签发)
- 会为每个负载都赋予个独立的身份, 基于该身份实现零信任安全的网络基础模型
如: Citadel原理

- Envoy启动时根据TLS配置, 向上游发起SDS请求以获取证书- 通过SDS接口以订阅方式获取证书, 且直接于内存中加载(便于重载)
 
- 通过
- Pilot-agent作为- SDS服务器处理请求(调用其他组件处理)- 向Citadel发送证书签发请求CSR
- Pilot-agent同时负责证书的缓存和轮换(仅在Citadel自签时可用)
 
- 向Citadel发送证书签发请求
- Citadel认证请求, 并签发证书 - Citadel以gRPC方式接受CSR请求, 并进行同步处理
- 处理前以3种方式进行身份认证: X509证书、Kubernetes JWT、OIDC
 
- Citadel以gRPC方式接受
Galley
Galley: Istio控制面的配置管理组件
- 主要功能: 验证配置、监控配置、接受/提供配置
- 本质: 以Webhook Server作为Kubernetes准入控制器
- Galley监控配置对象发生变更时, 会通知Pilot解析并分发最新配置
如: Galley工作流程

- Galley启动时首先初始化MCP Sink - 是否初始化取决于是否包含MCP源, 以监听MCP源获取配置并缓存
- MCP Sink: API配置获取和监听方式更新管理的MCP客户端
 
- 初始化校验服务器, 并将其注册到HTTPS多路服用其中- 校验服务器初始化时失败策略为Ignore(忽略配置错误)
- 校验服务器最后与HTTPS同时启动以验证配置
 
- 校验服务器初始化时失败策略为
- 初始化并运行Webhook控制器(Istiod启动阶段) - 通过监控CA文件的更新事件, 动态更新Webhook配置
 
Data Plane
数据面(Data Plane): 流量管理和数据上报
- 数据面代理统一的注入到管理服务的访问链路上
- 数据面代理通过控制面的EDS服务发现接口动态地更新负载均衡池
- 数据面代理通过Iptables规则实现流量拦截和管理, 且只能拦截TCP流量
Sidecar
Sidecar: Istio数据面的服务代理组件模式
- 构成: Pilot-agent守护进程、Envoy代理进程
- 本质: 与应用容器共享网络命名空间, 并通过Iptables拦截流量交由Envoy处理
如: Envoy管理流量的链路

- 流量拦截本质: Envoy在请求方和响应方分别建立Socket连接形成链路转发
- 可通过注解sidecar.istio.io/interceptionMode指定拦截模式- 流量拦截模式: Redirect(默认)、Tproxy
 
Redirect: Iptables的REDIRECT目标拦截(路由转发)
- 缺陷: 丢失源客户端信息(未绑定源地址, 使用随机端口作为连接地址)
- Pod访问自身时需经历完整的Outbound+Inbound管理流程(Inbound流程与外部访问相同)
- Pod内部访问环回地址或本地网络设备lo和外部访问Envoy管理端口时, 将忽略Iptables规则
如: Redirect模式的Inbound流量拦截流程

- Evnoy在Pod内部建立的Socket连接地址使用固定的127.0.0.1
- 可在HTTP请求头中添加特定KV以保留源客户端信息
Tproxy: Iptables的TPROXY目标拦截(报文转发)
- 缺陷: 复杂度较高, 仅实现L4源客户端信息保留
- Envoy需开启IP_TRANSPARENT(绑定连接不检查地址)
- 拦截Outbound流量时需采用DNAT方式, 无法保留源地址
如: Tproxy模式的Inbound流量拦截流程

- 所有不可达的远程地址都有默认路由
Injector: Istio自动注入的Webhook组件
- 本质: kube-apiserver拦截Pod创建, 调用Webhook插入istio-init和istio-proxy容器
- 注入时会自动解析端口并配置就绪探针(服务需有对应的SVC, 否则检查始终失败)
- 也可通过istioctl命令行工具实现手动注入, 实现效果相同
如: Injector注入Sidecar容器流程

- Injector配置由ConfigMap保存, 并通过MutatingWebhookConfiguration动态生效- 配置中包含注入模板和默认值, 每次注入时动态渲染
- ConfigMap名称: istio-sidecar-injector
 
- istio-init容器负责配置Pod的- Iptables规则, 以实现流量拦截
- istio-proxy容器负责启动Pilot-agent进程, 以管理Envoy代理
Istio-proxy
Istio-proxy: 数据面代理容器
如: Istio-proxy的组成

Pilot-agent
Pilot-agent: 守护进程的方式维护Envoy
- 其他功能: 扩展功能、SDS证书管理、连接控制面
- pilot-agent和envoy进程之间使用UDS协议通信, 不受Iptables规则管理
- 代理应用的健康检查(重写检查直接发送给Pilot-agent, 以绕过Envoy拦截)
如: Pilot-agent架构

- 根据启动参数和环境变量渲染Envoy的Bootstrap配置文件- 以/var/lib/istio/envoy/envoy_bootstrap_tmpl.json文件为启动模板
- 构建容器时复制模板并生成静态配置文件/etc/istio/proxyenvoy-rev0.json
- xDS API调用需依赖于Bootstrap配置文件(获取相关配置信息)
 
- 以
- 监控Envoy运行情况 - 通过监控envoy进程的Stdout和Stderr描述符获取状态
- 当envoy进程结束时, pilot-agent进程清理资源后也随之结束(实现Pod重启)
- 当envoy进程以优雅退出时, 将拒绝外部所有请求并等待内部所有请求处理结束
 
- 通过监控envoy进程的
xDS Proxy: Pilot-agent的xDS请求代理
- 下游ADS服务器(gRPC服务器) - 接受Envoy的xDS请求并透明转发给上游处理模块
- 首次接受LDS请求时, 会主动发送NDS和PCDS请求
 
- 上游请求处理模块 - 从请求队列中依次取出xDS请求发送给Istiod
 
- 上游响应处理模块 - 接受Istiod返回的xDS响应, 并透明转发给下游ADS服务器
- NDS、PCDS和ECDS请求将单独拦截处理
 
如: xDS Proxy原理

- PCDS: 拦截Proxy Config并更新本地Trust Bundle以触发SDS代理更新证书- Envoy加载TLS Context时, 会主动向Pilo-agent的SDS Server发送SDS请求
- 当提供自定义证书时, Envoy会直接向xDS Proxy发送SDS请求(透明转发)
- SDS Server请求并转发证书时, 会同时缓存和负责证书的轮转
 
- Envoy加载
- ECDS(Extension Config Discovery Service): Envoy原生支持的扩展配置发现服务 - xDS Proxy会拦截ECDS配置, 并交由ECDS处理器处理以重写ECDS配置
- Istio通过ECDS生成器和xDS Proxy协作, 实现对Wasm的远程获取
 
Metadta Exchange
Metadata Exchange(元数据交换): 补充元数据信息, 完善上报数据
- 本质: 数据面代理Envoy通过metadata_exchangeFilter彼此交换元数据
- 数据面代理创建时自动创建个EnvoyFilter, 以插入L4和L7Filter实现元数据交换
- 交换信息存储与Envoy内存观测数据集合Stats中, 可被其他系统拉取并汇总(如: Prometheus)
如: L4的元数据交换

- 数据面代理创建时会自动获取自身元数据信息, 并将其写入Envoy的bootstrap配置中
- 元数据交换可实现L4/L7的请求数据完善, 两者的实现方式不同 - L4的TCP元数据交换基于istio-peer-exchange协议, 需双方启用mTLS
- L7的HTTP元数据交换基于请求头和响应头
 
- L4的TCP元数据交换基于
Ambient
Ambient: Istio数据面的节点代理模式
- 构成: ztunnel、waypoint
- 本质: 节点上多个服务共享ztunnel组件代理
如: Ambient代理模型

- ztunnel组件以Daemonset形式部署- 提供mTLS、可观测性、身份验证和L4授权等功能
 
- 提供
- waypoint组件以Deployment形式部署- 提供HTTP路由、负载均衡、熔断和重试等L7流量管理功能
 
如: Ambient拦截流量原理

相关文章:
 
Istio_05_Istio架构
Istio_05_Istio架构 ArchitectureControl PlanePilotCitadelGalley Data PlaneSidecarIstio-proxyPilot-agentMetadta Exchange Ambient Architecture 如: Istio的架构(控制面、数据面) Gateway: Istio数据面的出/入口网关 Gateway分为: Ingress-gateway、Egress-gateway外部访…...
 
MongoDB集群分片安装部署手册
文章目录 一、集群规划1.1 集群安装规划1.2 端口规划1.3 目录创建 二、mongodb安装(三台均需要操作)2.1 下载、解压2.2 配置环境变量 三、mongodb组件配置3.1 配置config server的副本集3.1.1 config配置文件3.1.2 config server启动3.1.3 初始化config …...
摄像头测距原理
以下是测距摄像头分类的 Markdown 格式输出,方便直接复制使用: 测距摄像头分类 1. 立体视觉(Stereo Vision)摄像头 原理:模仿人眼成像,利用两台摄像头获取不同视角的图像,通过视差计算场景深…...
基于centos7.9使用shell脚本部署k8s1.25平台
k8s 环境初始化安装Harbor安装k8s安装istio和kubevirt 使用脚本部署k8s1.25版本平台,网络插件使用flannel ,容器运行时ctr,部署包括harbor仓库,服务网格、kubevirt服务等 使用的centos7.9资源配置如下: 主机IP资源ma…...
11.29周五F34-Day10打卡
文章目录 1. 问问他能不能来。解析答案:【解析答案分析】【对比分析】【拓展内容】2. 问题是他能不能做。解析答案:【解析答案分析】3. 问题是我们能否联系得上她。(什么关系?动作 or 描述?)解析答案:【解析答案分析】【对比分析】4. 我们在讨论是否要开一个会。解析答案:…...
 
龙迅#LT8612UX适用于HDMI 转 HDMIVGA应用领域,分辨率高达4K60HZ,内置程序,方便调试!
1. 描述 LT8612UX 是一款 HDMI 转 HDMI&VGA 转换器,可将 HDMI2.0 数据流转换为 HDMI2.0 信号和模拟 RGB 信号。它还输出 8 通道 I2S 和 SPDIF 信号,可实现高质量的 7.1 通道音频。 LT8612UX 使用最新的 ClearEdge 技术,除了原始的 HDMI…...
 
C#学写了一个程序记录日志的方法(Log类)
1.错误和警告信息单独生产文本进行记录; 2.日志到一定内存阈值可以打包压缩,单独存储起来,修改字段MaxLogFileSizeForCompress的值即可; 3.Log类调用举例:Log.Txt(JB.信息,“日志记录内容”,"通道1"); usi…...
时间相关转换
Timestamp(date,type) { const zeroDate = new Date(date); if(type === startTime){ zeroDate.setHours(0, 0, 0, 0); } if(type === endTime){ zeroDate.setHours(23, 59, 59, 999); } return zeroDate.getTime(); }, //**时间戳转…...
服务器挖矿
文章目录 一、确定挖矿进程并停止二、查找并清除挖矿相关文件三、检查并修复系统漏洞四、加强安全防护 一、确定挖矿进程并停止 查找挖矿进程 在Linux系统中,可以使用命令如top或htop来查看系统资源占用情况。挖矿程序通常会占用大量的CPU或GPU资源。例如ÿ…...
mac maven编译出现问题
背景 进行maven install 命令,报错: [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a J…...
 
电磁兼容(EMC):磁性材料(永磁、软磁、功能磁)详解
目录 一、磁性材料概述 二、常用磁性材料分类 1. 永磁材料 2. 软磁材料 3. 功能性磁材 三、软磁材料特点 一、磁性材料概述 磁性材料是指由过渡元素铁(Fe)、钴(Co)、镍(Ni)及其合金等组成的能够直接…...
macOS 版本对应的 Xcode 版本,以及 Xcode 历史版本下载
注:当前页面的所有Xcode下载链接均为苹果官方下载链接 ,点击将直接转至苹果官网下载。 Xcode版本Xcode发布时间对应macOS版本macOS SDKsiOS SDKswatchOS SDKstvOS SDKs下载Xcode发布日志Xcode 15.413 May 2024macOS 14.014.5 (23F73)17.5 (21F77)10.5 (…...
 
从语法、功能、社区和使用场景来比较 Sass 和 LESS
一:可以从语法、功能、社区和使用场景来比较 Sass 和 LESS: 1:语法 原始的 Sass 采用的是缩进而不是大括号,后续的 Sass 版本与 LESS 一样使用与 CSS 类似的语法: address {.fa.fa-mobile-phone {margin: 0 3px 0 2…...
 
springboot-vue excel上传导出
数据库 device_manage表 字段,id,workshop,device_number,device_name,device_model,warn_time,expired_time device_warn表 字段,id,warn_time,expired_time 后端 实体类格式 device_manage Data TableName("device_manage"…...
CTF-PWN: ret2libc
plt表与got表是什么? PLT PLT (Procedure Linkage Table) 表在 ELF 文件中的代码段(.text)中,它看起来是这样的: .plt:0x00400530 <__libc_start_mainplt>:jmp QWORD PTR [rip 0x200602] # 0x601608 <__libc_start_maingot.plt>push 0x0jmp 0x4005100…...
 
SickOs: 1.1靶场学习小记
学习环境 kali攻击机:Get Kali | Kali Linux vulnhub靶场:https://download.vulnhub.com/sickos/sick0s1.1.7z 靶场描述: 这次夺旗赛清晰地模拟了在安全环境下如何对网络实施黑客策略从而入侵网络的过程。这个虚拟机与我在进攻性安全认证专…...
 
【ArcGIS Pro实操第10期】统计某个shp文件中不同区域内的站点数
统计某个shp文件中不同区域内的站点数 方法 1:使用“空间连接 (Spatial Join)”工具方法 2:使用“点计数 (Point Count)”工具方法 3:通过“选择 (Select by Location)”统计方法 4:通过“Python 脚本 (ArcPy)”实现参考 在 ArcGI…...
JavaScript中类数组对象及其与数组的关系
JavaScript中类数组对象及其与数组的关系 1. 什么是类数组对象? 类数组对象是指那些具有 length 属性且可以通过非负整数索引访问元素的对象。虽然这些对象看起来像数组,但它们并不具备真正数组的所有特性,例如没有继承 Array.prototype 上…...
 
基础入门-Web应用架构搭建域名源码站库分离MVC模型解析受限对应路径
知识点: 1、基础入门-Web应用-域名上的技术要点 2、基础入门-Web应用-源码上的技术要点 3、基础入门-Web应用-数据上的技术要点 4、基础入门-Web应用-解析上的技术要点 5、基础入门-Web应用-平台上的技术要点 一、演示案例-域名差异-主站&分站&端口站&…...
C#:时间与时间戳的转换
1、将 DateTime 转换为 Unix 时间戳(秒) public static long DateTimeToUnixTimestamp(DateTime dateTime) {// 定义UTC纪元时间DateTime epochStart new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);// 计算从UTC纪元时间到指定时间的总秒数Tim…...
 
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
 
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
 
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
 
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
 
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
