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_exchange
Filter彼此交换元数据 - 数据面代理创建时自动创建个EnvoyFilter, 以插入L4和L7
Filter
实现元数据交换 - 交换信息存储与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…...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...