源码深度学习 · 零基础友好 · higress-group 2/5

Istio 源码学习

20 天 · 每天 30 分钟 · 逐层读懂服务网格的控制面 Istio(Go)——它是指挥 Envoy 数据面的"大脑"。学完 Envoy(数据面)后,来看控制面怎么生成 xDS、注入 sidecar、做 mTLS。

00

开篇 · 这是个什么项目

Istio 是最主流的服务网格(Service Mesh),Go 编写。上一门课的 Envoy 是"数据面"(真正转发流量),Istio 是"控制面"(istiod)——它是指挥千百个 Envoy 的大脑:你写高层规则(把 10% 流量导到 v2、服务间自动 mTLS 加密),Istio 把它翻译成 Envoy 能懂的 xDS 配置,下发下去。它还负责给每个 Pod 注入 Envoy sidecar、签发证书、采集遥测。

🎯 一句话:Istio = 配置模型(VirtualService/DestinationRule 等 CRD) + 服务注册(发现 K8s 服务) + xDS 生成(翻译成 Envoy 配置) + Sidecar 注入 + mTLS/CA(安全)。你写高层意图 → Istio 翻译 → 通过 xDS 下发给每个 Envoy → Envoy 执行。

🧠

控制面 istiod

指挥数据面的大脑:生成配置、注入、签证书。

📤

xDS 生成

高层 CRD → Envoy 的 LDS/CDS/RDS/EDS,与 Envoy xDS 客户端对接。

💉

Sidecar 注入

自动给 Pod 塞进一个 Envoy sidecar。

🔐

mTLS / CA

服务间自动双向 TLS、身份证书签发。

和 Envoy 的关系(承上启下):你在 Envoy 课学的 xDS 是"接收端"(Envoy 怎么消费配置);Istio 课讲"发送端"(istiod 怎么生成并下发配置)。两者合起来才是完整服务网格。前 5 天不假设你懂 K8s/Go/服务网格。源码在 higress-group/istio/pilot/(控制面核心)。
01

架构全景(动起来看)

下图那颗发光小球是"配置从用户意图流到 Envoy"的旅程。从上到下:用户写 CRD → istiod 处理 → 生成 xDS → 下发数据面。

L1 · 用户输入(CRD)
VirtualService路由规则
DestinationRule目标策略
Gateway/Sidecar
L2 · istiod 控制面核心
ConfigStore配置
ServiceRegistry服务发现
PushContext快照
DiscoveryServer
L3 · xDS 生成与下发
Generators生成器
Listener/Route/Cluster
ADS gRPC推送
debounce合并
L4 · 数据面(Envoy sidecar)
pilot-agent代理
Envoy执行配置
mTLS/SDS证书

Istio 的心智模型是"CRD 意图 → istiod 翻译 → xDS 下发 → Envoy 执行":

用户写 CRD高层意图 istiod建 PushContext 生成 xDSListener/Cluster… 推给 Envoy执行
为什么需要控制面? 想象一个集群里几百个服务、几千个 Envoy。手动给每个 Envoy 写 xDS 配置不可能。控制面(istiod)让你写少量高层规则("A 服务金丝雀发布"),它自动算出每个受影响 Envoy 该收到的具体配置并下发。数据面(Envoy)负责"执行",控制面负责"决策 + 分发"——这就是数据面/控制面分离的意义。
02

怎么用这份教程

⏱️

每天 30 分钟

一天一个独立页面,跟着"今日小结 + 动手"收尾。

👶

零基础友好

不假设你懂 K8s/Go/服务网格,术语首次出现都有大白话解释。

📍

精确到行号

关键代码标 文件:行号,可在真源码里跳转对照。

一条主线:从"控制面是什么、istiod 怎么启动",到"配置和服务怎么被建模、PushContext 怎么建",到"xDS 怎么生成并推送",再到"sidecar 注入、mTLS、遥测、EnvoyFilter"。建议先学完 Envoy 再学本课。
W1

第 1 周 · 控制面全景

全景、istiod 启动、配置模型、服务注册、PushContext
01

项目全景(服务网格控制面)

Istio 是什么、控制面 vs 数据面、和 Envoy 的关系。

≈30 min开始学 →
02

istiod 启动

pilot-discovery → bootstrap server,控制面怎么 boot。

≈30 min开始学 →
03

配置模型与 CRD

VirtualService/DestinationRule、Config/ConfigStore。

≈30 min开始学 →
04

服务注册

serviceregistry、K8s registry、Service/Endpoint 模型。

≈30 min开始学 →
05

PushContext 配置快照

生成代理配置用的全量快照怎么建。

≈30 min开始学 →
W2

第 2 周 · xDS 生成

DiscoveryServer、生成器、Builder、Push 模型、连接
06

xDS DiscoveryServer

ADS gRPC 服务端,与 Envoy xDS 客户端对接。

≈30 min开始学 →
07

配置生成总览

生成器 generators 怎么把 CRD 翻译成 xDS。

≈30 min开始学 →
08

Listener/Route/Cluster Builder

三大 Builder 怎么构建 Envoy 资源。

≈30 min开始学 →
09

Push 与事件模型

ConfigUpdate + debounce 合并,配置变更怎么触发推送。

≈30 min开始学 →
10

代理连接生命周期

Envoy 连上、拿初始配置、收更新 + Sidecar scope。

≈30 min开始学 →
W3

第 3 周 · sidecar 与安全

注入、pilot-agent、bootstrap、mTLS/CA、SDS
11

Sidecar 注入

mutating webhook + 注入模板,怎么给 Pod 塞 Envoy。

≈30 min开始学 →
12

pilot-agent

sidecar 里跑什么:引导 Envoy、SDS、代理生命周期。

≈30 min开始学 →
13

Envoy bootstrap 生成

agent 怎么生成 Envoy 初始配置(连回 Envoy 课)。

≈30 min开始学 →
14

mTLS 与 CA

服务间双向 TLS、证书签发、身份 SPIFFE。

≈30 min开始学 →
15

SDS + 认证授权

SDS 证书分发、PeerAuthentication/AuthorizationPolicy。

≈30 min开始学 →
W4

第 4 周 · 遥测/扩展/安装

遥测、EnvoyFilter、istioctl、Operator、收官
16

遥测

metrics/trace 采集、Telemetry API、Prometheus 集成。

≈30 min开始学 →
17

EnvoyFilter(Higress 重用)

直接 patch Envoy 配置的逃生舱,Higress 重度依赖。

≈30 min开始学 →
18

istioctl CLI

install/analyze/proxy-config/proxy-status 内省网格。

≈30 min开始学 →
19

Operator 与安装

IstioOperator CRD、profiles、manifests。

≈30 min开始学 →
20

收官串讲

Istio 全景、在 Higress 中的角色、承上启下。

≈30 min开始学 →

Istio 全部 20 天已就绪!(higress-group 系列 2/5)建议先学 Envoy 再学本课。