当前位置: 首页 > news >正文

Istio_05_Istio架构

Istio_05_Istio架构

  • Architecture
    • Control Plane
      • Pilot
      • Citadel
      • Galley
    • Data Plane
      • Sidecar
        • Istio-proxy
          • Pilot-agent
          • Metadta Exchange
      • Ambient

Architecture

如: Istio的架构(控制面、数据面)

image

  1. Gateway: Istio数据面的出/入口网关
    • Gateway分为: Ingress-gateway、Egress-gateway
    • 外部访问服务网格内的服务时均需通过Ingress-gateway(Egress-gateway同理)
    • Gateway的Envoy与服务网格内的数据面代理相同, 都需从Pilot接受流量规则并执行

Control Plane

控制面(Control Plane): 统一服务发现和集中配置管理

  1. Istiod以单体应用方式实现, 但功能/维护以组件化方式进行

如: Istio控制面组件架构

image


Pilot

Pilot: Istio控制面的控制中枢

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

如: Pilot架构

image

  1. 平台适配器从运行平台提取数据并将其构造和转换成Istio服务模型
    • Pilot同时支持以MCP从除Kubernetes以外平台服务端获取配置
    • Pilot实现MCP客户端, 由第三方注册中心实现MCP服务器
  2. 聚合器将不同平台适配器提供的服务模型聚合, 以提供统一的索引接口
    • Pilot通过聚合器可无需关注底层平台的差异(解耦)
    • 也可通过ServiceEntry/WorkloadEntry扩展服务
  3. xDS生成器将各种规则转换成Envoy标准格式
  4. xDS Server通过xDS协议将配置发送给各Envoy
    • 通过订阅-发布模型实时、动态地推送xDS配置
    • 服务网格的数据面代理收到相同的流量规则, 并执行相同的治理行为
    • 本质: 通过EDSCDSLDS等接口向Enovy分发负载均衡和路由等配置信息

xDS Server: 基于xDS协议生成和分发配置

  1. 构成: xDS生成器、ADS服务器
  2. xDS(X Discovery Service): 数据源服务发现协议
    • 本质: LDSRDSCDSEDSSDS等发现服务的总称
  3. ADS(Aggregated Discovery Service): 聚合发现服务
    • 本质: 将xDS协议的更新指向相同的xDS Server(gRPC服务器)
    • 功能: 避免配置更新过程中的流量丢失(xDS属于最终一致性协议)

xDS Server的配置分发模式: 主动、被动

  1. 主动分发: 根据订阅请求将配置下发到Sidecar(事件触发)
    • 触发事件: 底层注册中心的服务或配置更新
    • 主动分发需Sidecar提前与xDS Server建立连接
  2. 被动分发: 根据Sidecar请求响应配置
    • 仅能响应指定请求资源类型的配置

如: xDS Server工作流程(省略平台模型的抽象中间组件)

image

  1. xDS Server以串行方式分发各xDS协议(CDS -> EDS -> LDS -> RDS)
  2. Pilot通过各类事件通知xDS Server进行xDS推送(同时缓存xDS配置源)

ADS服务器原理: StoW全量的ADS接口

  1. ADS服务器对数据的接收/发送使用独立的线程(生命周期同gRPC流)
  2. ADS服务器中由主线程处理器异步从队列中获取事件处理

如: ADS服务器工作流程

image

  1. 首次请求时会包含元数据信息以用于初始化
    • 后续的xDS生成/分发都依赖于初始化的元数据

Pilot的核心优化设计:

  1. 三级缓存
    • 构成: 平台资源缓存(资源)、Istio聚合层缓存(Istio API)、xDS配置缓存(分发)
    • 功能: 以适量的内存换取Pilot的CPU利用率降低
  2. 去抖动分发
    • 本质: 以最小静默时间最大延迟时间参数控制分发频率
    • 当时间超过最大延迟时间参数时, 会忽略最小静默时间参数
  3. 防过度分发
    • 本质: Pilot等待ACK确定期间的所有xDS分发会合并发送
    • 合并发送的数量取决于最近次分发和ACK响应的时间差值

Citadel

Citadel: Istio控制面的安全组件

  1. 主要功能: 自动生成、分发、轮换和撤销证书/密钥
  2. 证书种类: 双向TLS证书(CA: Citadel自签)、用户指定证书(RA: 机构签发)
  3. 会为每个负载都赋予个独立的身份, 基于该身份实现零信任安全的网络基础模型

如: Citadel原理

image

  1. Envoy启动时根据TLS配置, 向上游发起SDS请求以获取证书
    • 通过SDS接口以订阅方式获取证书, 且直接于内存中加载(便于重载)
  2. Pilot-agent作为SDS服务器处理请求(调用其他组件处理)
    • 向Citadel发送证书签发请求CSR
    • Pilot-agent同时负责证书的缓存和轮换(仅在Citadel自签时可用)
  3. Citadel认证请求, 并签发证书
    • Citadel以gRPC方式接受CSR请求, 并进行同步处理
    • 处理前以3种方式进行身份认证: X509证书、Kubernetes JWT、OIDC

Galley

Galley: Istio控制面的配置管理组件

  1. 主要功能: 验证配置、监控配置、接受/提供配置
  2. 本质: 以Webhook Server作为Kubernetes准入控制器
  3. Galley监控配置对象发生变更时, 会通知Pilot解析并分发最新配置

如: Galley工作流程

image

  1. Galley启动时首先初始化MCP Sink
    • 是否初始化取决于是否包含MCP源, 以监听MCP源获取配置并缓存
    • MCP Sink: API配置获取和监听方式更新管理的MCP客户端
  2. 初始化校验服务器, 并将其注册到HTTPS多路服用其中
    • 校验服务器初始化时失败策略为Ignore(忽略配置错误)
    • 校验服务器最后与HTTPS同时启动以验证配置
  3. 初始化并运行Webhook控制器(Istiod启动阶段)
    • 通过监控CA文件的更新事件, 动态更新Webhook配置

Data Plane

数据面(Data Plane): 流量管理和数据上报

  1. 数据面代理统一的注入到管理服务的访问链路上
  2. 数据面代理通过控制面的EDS服务发现接口动态地更新负载均衡池
  3. 数据面代理通过Iptables规则实现流量拦截和管理, 且只能拦截TCP流量

Sidecar

Sidecar: Istio数据面的服务代理组件模式

  1. 构成: Pilot-agent守护进程、Envoy代理进程
  2. 本质: 与应用容器共享网络命名空间, 并通过Iptables拦截流量交由Envoy处理

如: Envoy管理流量的链路

image

  1. 流量拦截本质: Envoy在请求方和响应方分别建立Socket连接形成链路转发
  2. 可通过注解sidecar.istio.io/interceptionMode指定拦截模式
    • 流量拦截模式: Redirect(默认)、Tproxy

Redirect: Iptables的REDIRECT目标拦截(路由转发)

  1. 缺陷: 丢失源客户端信息(未绑定源地址, 使用随机端口作为连接地址)
  2. Pod访问自身时需经历完整的Outbound+Inbound管理流程(Inbound流程与外部访问相同)
  3. Pod内部访问环回地址或本地网络设备lo和外部访问Envoy管理端口时, 将忽略Iptables规则

如: Redirect模式的Inbound流量拦截流程

image

  1. Evnoy在Pod内部建立的Socket连接地址使用固定的127.0.0.1
  2. 可在HTTP请求头中添加特定KV以保留源客户端信息

Tproxy: Iptables的TPROXY目标拦截(报文转发)

  1. 缺陷: 复杂度较高, 仅实现L4源客户端信息保留
  2. Envoy需开启IP_TRANSPARENT(绑定连接不检查地址)
  3. 拦截Outbound流量时需采用DNAT方式, 无法保留源地址

如: Tproxy模式的Inbound流量拦截流程

image

  1. 所有不可达的远程地址都有默认路由

Injector: Istio自动注入的Webhook组件

  1. 本质: kube-apiserver拦截Pod创建, 调用Webhook插入istio-initistio-proxy容器
  2. 注入时会自动解析端口并配置就绪探针(服务需有对应的SVC, 否则检查始终失败)
  3. 也可通过istioctl命令行工具实现手动注入, 实现效果相同

如: Injector注入Sidecar容器流程

image

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

Istio-proxy

Istio-proxy: 数据面代理容器


如: Istio-proxy的组成

image


Pilot-agent

Pilot-agent: 守护进程的方式维护Envoy

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

如: Pilot-agent架构

image

  1. 根据启动参数和环境变量渲染Envoy的Bootstrap配置文件
    • /var/lib/istio/envoy/envoy_bootstrap_tmpl.json文件为启动模板
    • 构建容器时复制模板并生成静态配置文件/etc/istio/proxyenvoy-rev0.json
    • xDS API调用需依赖于Bootstrap配置文件(获取相关配置信息)
  2. 监控Envoy运行情况
    • 通过监控envoy进程的StdoutStderr描述符获取状态
    • 当envoy进程结束时, pilot-agent进程清理资源后也随之结束(实现Pod重启)
    • 当envoy进程以优雅退出时, 将拒绝外部所有请求并等待内部所有请求处理结束

xDS Proxy: Pilot-agent的xDS请求代理

  1. 下游ADS服务器(gRPC服务器)
    • 接受Envoy的xDS请求并透明转发给上游处理模块
    • 首次接受LDS请求时, 会主动发送NDS和PCDS请求
  2. 上游请求处理模块
    • 从请求队列中依次取出xDS请求发送给Istiod
  3. 上游响应处理模块
    • 接受Istiod返回的xDS响应, 并透明转发给下游ADS服务器
    • NDS、PCDS和ECDS请求将单独拦截处理

如: xDS Proxy原理

image

  1. PCDS: 拦截Proxy Config并更新本地Trust Bundle以触发SDS代理更新证书
    • Envoy加载TLS Context时, 会主动向Pilo-agent的SDS Server发送SDS请求
    • 当提供自定义证书时, Envoy会直接向xDS Proxy发送SDS请求(透明转发)
    • SDS Server请求并转发证书时, 会同时缓存和负责证书的轮转
  2. ECDS(Extension Config Discovery Service): Envoy原生支持的扩展配置发现服务
    • xDS Proxy会拦截ECDS配置, 并交由ECDS处理器处理以重写ECDS配置
    • Istio通过ECDS生成器和xDS Proxy协作, 实现对Wasm的远程获取

Metadta Exchange

Metadata Exchange(元数据交换): 补充元数据信息, 完善上报数据

  1. 本质: 数据面代理Envoy通过metadata_exchangeFilter彼此交换元数据
  2. 数据面代理创建时自动创建个EnvoyFilter, 以插入L4和L7Filter实现元数据交换
  3. 交换信息存储与Envoy内存观测数据集合Stats中, 可被其他系统拉取并汇总(如: Prometheus)

如: L4的元数据交换

image

  1. 数据面代理创建时会自动获取自身元数据信息, 并将其写入Envoy的bootstrap配置中
  2. 元数据交换可实现L4/L7的请求数据完善, 两者的实现方式不同
    • L4的TCP元数据交换基于istio-peer-exchange协议, 需双方启用mTLS
    • L7的HTTP元数据交换基于请求头和响应头

Ambient

Ambient: Istio数据面的节点代理模式

  1. 构成: ztunnelwaypoint
  2. 本质: 节点上多个服务共享ztunnel组件代理

如: Ambient代理模型

image

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

如: Ambient拦截流量原理

image


相关文章:

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资源。例如&#xff…...

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攻击机&#xff1a;Get Kali | Kali Linux vulnhub靶场&#xff1a;https://download.vulnhub.com/sickos/sick0s1.1.7z 靶场描述&#xff1a; 这次夺旗赛清晰地模拟了在安全环境下如何对网络实施黑客策略从而入侵网络的过程。这个虚拟机与我在进攻性安全认证专…...

【ArcGIS Pro实操第10期】统计某个shp文件中不同区域内的站点数

统计某个shp文件中不同区域内的站点数 方法 1&#xff1a;使用“空间连接 (Spatial Join)”工具方法 2&#xff1a;使用“点计数 (Point Count)”工具方法 3&#xff1a;通过“选择 (Select by Location)”统计方法 4&#xff1a;通过“Python 脚本 (ArcPy)”实现参考 在 ArcGI…...

JavaScript中类数组对象及其与数组的关系

JavaScript中类数组对象及其与数组的关系 1. 什么是类数组对象&#xff1f; 类数组对象是指那些具有 length 属性且可以通过非负整数索引访问元素的对象。虽然这些对象看起来像数组&#xff0c;但它们并不具备真正数组的所有特性&#xff0c;例如没有继承 Array.prototype 上…...

基础入门-Web应用架构搭建域名源码站库分离MVC模型解析受限对应路径

知识点&#xff1a; 1、基础入门-Web应用-域名上的技术要点 2、基础入门-Web应用-源码上的技术要点 3、基础入门-Web应用-数据上的技术要点 4、基础入门-Web应用-解析上的技术要点 5、基础入门-Web应用-平台上的技术要点 一、演示案例-域名差异-主站&分站&端口站&…...

C#:时间与时间戳的转换

1、将 DateTime 转换为 Unix 时间戳&#xff08;秒&#xff09; public static long DateTimeToUnixTimestamp(DateTime dateTime) {// 定义UTC纪元时间DateTime epochStart new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);// 计算从UTC纪元时间到指定时间的总秒数Tim…...

从WWDC看苹果产品发展的规律

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

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; 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模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。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 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

git: early EOF

macOS报错&#xff1a; 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 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...