Day 01 / 共 20 天 · 第 1 周 全景与控制器
项目全景:AI 云原生网关
欢迎来到 Higress——higress-group 系列第 3 站。学完 Envoy(数据面)和 Istio(控制面),现在看它们怎么组装成一个产品级 AI 网关。第一天的"题眼":Higress 怎么"寄生"在 Istio 之上。今天先建立全景地图,为 Day 02 拆启动流程、Day 03-05 拆"配置怎么翻译并喂给 istiod"打地基。
📍 你在 Higress 源码课的位置(第1周 全景与控制器 · 第2周 服务发现与配置)
D01 全景→
D02 启动→
D03 Ingress控制器→
D04 配置翻译→
D05 xDS-over-MCP→
D06 多注册中心→
D07 McpBridge→
D08 Nacos→
D09 ServiceEntry→
D10 配置+证书
💡 先用一个类比兜住整门课(贯穿 20 天的世界观)
把 Higress 想成一栋写字楼的大堂前台 + 门卫系统。网关(Envoy)=真正站在大门口验证件、指路、拦人的门卫;Higress Core=前台的翻译官,把租户递上来的大白话申请单(K8s Ingress + 注解)翻译成物业总部认的正式公文(Istio 配置对象);istiod=物业总部,收到公文后排班、下发给门卫。今天你只需记住这条"翻译 → 下发 → 执行"的链,后面每天都在放大其中一环。
L01
Higress 是什么
Higress 是阿里开源的AI 原生 API 网关(Go 编写,README.md:35)。它基于 Istio + Envoy,可用 Go/Rust/JS 写 Wasm 插件扩展。定位:面向"API 网关/Ingress"(南北向流量),比 Istio 的服务网格(东西向)更适合做网关入口。
"站在巨人肩膀上做产品"
Higress 没有从零造网关——它复用了 Envoy(成熟的数据面)+ Istio istiod(成熟的 xDS 生成),自己加了三样:①一个更友好的用户接口(用 K8s Ingress + 注解就能配,不用写复杂的 Istio CRD);②多注册中心服务发现(Nacos/ZK/Consul,不止 K8s);③丰富的 Wasm 插件生态 + AI 网关能力。好比在成熟的发动机(Envoy)和变速箱(Istio)上,造一辆好开的整车(Higress)。你前两站学了发动机和变速箱,现在看整车怎么组装。
L02
三大组件
docs/architecture.md:19-71 定义三大组件:
- Higress Controller(控制器):内含 ① Discovery(就是 Istio 的 istiod)+ ② Higress Core(Higress 自己写的,核心是 Ingress Config + Cert Server)。
- Higress Gateway(网关/数据面):就是 Envoy。
- Higress Console(控制台):Web 管理界面(本系列下一站单独讲)。
读法:关键:Higress Controller 内嵌了 istiod(Discovery),再加自己的 Core。Core 才是 Higress 独有的代码(本课主角),istiod 就是你 Istio 课学的那个。数据面 Gateway 就是 Envoy 课学的 Envoy。
L03
寄生在 Istio 上
核心协作模型(整门课的"题眼",architecture.md:47-71):
istiod 支持 4 种配置来源:Kubernetes / MCP / Memory / File。
MCP(Mesh Configuration Protocol)是基于 xDS 协议的配置管理协议。istiod 作为 MCP 客户端(ADS client),任何实现 MCP Server 的都能给它下发 Istio 配置。
Higress Core 实现了 MCP-over-xDS 的 Server——于是它成为 istiod 的配置来源。
istiod 支持 4 种配置来源:Kubernetes / MCP / Memory / File。
MCP(Mesh Configuration Protocol)是基于 xDS 协议的配置管理协议。istiod 作为 MCP 客户端(ADS client),任何实现 MCP Server 的都能给它下发 Istio 配置。
Higress Core 实现了 MCP-over-xDS 的 Server——于是它成为 istiod 的配置来源。
回想 Istio 课 Day 20 的"反转"
Istio 课结尾讲过:正常 istiod 是"xDS 服务端"(给 Envoy 发配置),但在 Higress 里有个反转——istiod 变成"MCP 客户端",Higress Core 是服务端,给 istiod 发配置!今天正式坐实这个反转。为什么这么设计?因为这样 Higress 不用重写 istiod 复杂的 xDS 生成逻辑——它只需把自己的配置(从 Ingress/CRD/注册中心来)翻译成 Istio 配置对象,通过标准 MCP 协议"喂"给 istiod,剩下的 xDS 生成交给成熟的 istiod。复用 + 扩展,事半功倍。
👶 小白:为什么要搞得这么绕?Higress 自己直接给 Envoy 发配置不行吗?
👨🏫 老师:给 Envoy 发运行配置(xDS 生成)非常复杂——监听器、路由、集群、TLS 一大堆细节,istiod 花了多年才做扎实。Higress 若自己重写,等于把物业总部的活儿全干一遍,费力又易出 bug。更聪明的做法:只当"翻译官",把用户的申请单翻成 istiod 认得的公文,剩下排班下发全交给成熟的 istiod。这正是"寄生在 Istio 上"的价值——省掉最难那部分。
L04
MCP over xDS
MCP = "用 xDS 协议传配置"
你在 Istio/Envoy 课学的 xDS 是"控制面给数据面发配置"。MCP 复用了同一套 xDS 协议机制,但用途不同——它是"配置源给 istiod 发 Istio 配置对象"(VirtualService/Gateway 等)。好比同一条快递网络,既能送外卖(xDS 给 Envoy 发运行配置),也能送公文(MCP 给 istiod 发配置定义)。因为 MCP 和 xDS 底层都是 gRPC 流式协议,Higress 能直接复用 istiod 的 DiscoveryServer(Istio 课 Day 06)来当 MCP Server——只需替换"某类资源怎么生成"的 Generator。(Day 05 详讲。)
L05
configSources
Higress Core 和 istiod 通过 higress-config ConfigMap 的 mesh.configSources 关联(architecture.md:56-71):
configSources:
- address: xds://127.0.0.1:15051 # 指向 Higress Core 的 MCP Server
- address: k8s://
读法:端口 15051 就是 Higress Core 起的 MCP/xDS 服务,istiod 连它拉取 Gateway/VirtualService/DestinationRule/EnvoyFilter/ServiceEntry/WasmPlugin 六类配置。
k8s:// 表示 istiod 也直接从 K8s 读一部分。记住 15051——这是 Higress Core 和 istiod 的接口(就像 15012 是 istiod 和 Envoy 的接口)。📝 举个例子:这两行配置在说什么
翻译成大白话——物业总部(istiod)的排班依据有两处:① 直接查 K8s(
xds://127.0.0.1:15051 就是告诉 istiod:"你的一路配置来源是本机 15051 端口的那个 MCP Server(Higress Core)"。翻译成大白话——物业总部(istiod)的排班依据有两处:① 直接查 K8s(
k8s://);② 听前台翻译官(15051)报上来的正式公文。两处合并后一起下发给门卫。L06
完整数据流
K8s Ingress + Higress CRD + 外部注册中心(Nacos…)
→ Higress Core 翻译成 Istio 配置对象(VirtualService/Gateway/…)
→ 经 MCP-over-xDS(:15051) 下发给 istiod(istiod 是客户端!)
→ istiod 合并后经标准 xDS(:15012) 下发给 Envoy(Istio 课)
→ Envoy 执行 + Wasm 插件处理(Envoy 课)
读法:这条链把三站串起来了:Higress Core(本课)生成配置 → istiod(Istio 课)转 xDS → Envoy(Envoy 课)执行。你三站都学,就能看到从"用户写 Ingress"到"Envoy 转发流量"的完整链路。本课聚焦第一段:Higress Core 怎么翻译并喂配置。
图注:本课主角是最左边两格(申请单 → 翻译官);后两格是你 Istio/Envoy 课已学的部分。
L07
为什么要 Higress
Istio 已经很强,为什么还要 Higress?
Istio 面向"服务网格"——管集群内服务间(东西向)流量,配置用 VirtualService/DestinationRule 等,功能强但对"做个 API 网关"来说偏复杂。Higress 面向"API 网关/Ingress"——管从外部进集群(南北向)的流量:①让你用简单的 K8s Ingress + 注解就能配路由/限流/鉴权,不用写 Istio CRD;②支持从 Nacos 等注册中心发现服务(微服务迁移友好);③Wasm 插件生态开箱即用;④专门的 AI 能力(LLM 代理、Token 限流)。它把 Istio 的能力"产品化"成一个易用的网关。这就是"平台 vs 产品"的区别——Istio 是平台,Higress 是基于平台做的产品。
L08
今日小结 + 动手
🧠 今天你应该能回答
- Higress 是什么?它基于什么?
- 三大组件?Controller 内部的 Discovery vs Core?
- Higress 怎么"寄生"在 Istio 上?istiod 在这里是什么角色?
- MCP 是什么?15051 端口的意义?
- 完整数据流的四段?为什么在 Istio 上再套 Higress?
✋ 动手
cd /Users/bitmart/work/codes/github/higress-group/higress
sed -n '1,114p' docs/architecture.md
head -40 README.md
ls pkg/ingress/ pkg/bootstrap/
明天预告 · Day 02:启动流程——Higress Controller 怎么 boot:
cmd/higress/main.go → NewServer → initFuncList(一串初始化函数)。看它怎么把 istiod 和自己的 Core 装配起来。