MCP / 证书 / hgctl / 收官
补齐周边能力——MCP Server 托管、自动证书、命令行工具、可观测、测试与性能调优,最后给出后续学习与贡献的路线建议。
MCP 协议概念
Model Context Protocol(MCP)由 Anthropic 提出,定义"工具 / 资源"对 LLM 的统一暴露方式。Higress 把网关变成 MCP 中枢:客户端连接到 Higress,背后任意 MCP Server。
注意:代码中还有另一个 mcp 指 Mesh Configuration Protocol(Istio 老协议),别混淆。
McpServer CRD
apiVersion: networking.higress.io/v1
kind: McpServer
metadata: { name: amap, namespace: higress-system }
spec:
type: external # 或 internal
domain: mcp.example.com
port: 443
toolsDescription: "..." # LLM 可读的工具说明
Higress 据此把这个 MCP Server 暴露到上游 Cluster,并由 mcp-router 插件路由请求。
mcp-router 插件
extensions/mcp-router/ 解析 JSON-RPC 请求里的 method(如 tools/call),根据 params 与配置选择目标 MCP Server upstream。它扮演的角色类似"反向代理路由器",让多个 MCP Server 共享一个入口。
mcp-server 内建
plugins/wasm-go/mcp-servers/ 内置了若干官方 MCP Server 实现:高德地图、GitHub、Notion 等。它们以 Wasm 形态跑在 Envoy 内,不需要独立部署。
pkg/ingress/mcp 协议
这里的 mcp 是 Istio 的 Mesh Configuration Protocol。Higress 用它把配置推给"外部 Pilot"(如已存在的 Istiod),适合多 Pilot 共存的复杂场景。大多数自部署 Higress 不会用到。
证书 pkg/cert 概览
pkg/cert/
certmgr.go # 对外 CertManager
config.go # ACME 配置
controller.go # Ingress / Secret 监听
server.go # ACME HTTP-01 挑战 server
storage.go # 证书持久化
ingress.go # 与 Ingress 绑定
secret.go # 写 Secret
util.go # 工具CertManager
certmgr.go 维护 ACME account / 已签发证书列表,调度续签 goroutine。被 bootstrap.initAutomaticHttps 拉起。
ACME HTTP-01 server
server.go 启动一个 HTTP server 监听 80 端口的 /.well-known/acme-challenge/,把 token 返回给 CA。完成验证后 CA 返回证书。
证书存储 Secret
签发完证书写入名为 {domain}-tls 的 Secret,Higress Gateway 通过 SDS 加载。私钥仅在 Secret + Envoy 内存中,不落盘到任何业务容器。
续签调度
过期前 30 天触发续签;失败按指数退避重试;续签后写新 Secret 触发 SDS。证书更替 Envoy 不丢连接,热加载。
hgctl 命令树
hgctl
├── install # 装 Higress (基于 Helm)
├── uninstall
├── upgrade
├── plugin # 插件管理:list/install/test
├── profile # 安装 profile
├── version
├── docs # 启动本地文档站
└── debug # 调试工具
位于 hgctl/,~20k 行 Go。是运维与开发的瑞士军刀。
hgctl install
命令实现走的是 helm SDK:渲染 helm/ 下的 chart → 调 K8s API 创建。支持 --set 与 profile(default / ai / local 等)。源代码可看 hgctl/cmd/install.go。
hgctl plugin
插件开发链:
hgctl plugin build:调 TinyGo 编译。hgctl plugin test:本地起 Envoy 跑 .wasm。hgctl plugin install:构造 WasmPlugin YAML 一键 apply。
可观测:metrics
控制面用 Istio 默认的 Prometheus 指标 + grpc_prometheus。数据面 Envoy 的 stats 走 envoy admin / Prometheus。Higress 在 ConfigMap 里可控制是否打开 detailed metrics(按 host / route 维度)。
可观测:tracing
支持 OTLP / Zipkin / SkyWalking。配置在 ConfigMap higress-config 的 tracing 字段。控制面只下发配置,trace 数据从 Envoy 直接打到 collector,控制面不在数据路径。
可观测:access log
Higress 默认 JSON access log,关键字段含 cluster / route_name / response_code / upstream_host / x-request-id。AI 流量额外有 model / tokens 字段(来自 ai-statistics 插件)。
e2e 测试体系
test/e2e/ # Higress 自研端到端
test/gateway/ # Gateway API conformance
e2e 起 kind 集群,安装 Higress,部署样例服务,发请求断言。新功能 PR 通常要求附带 e2e。
性能调优建议
- 控制面:调大 DebounceAfter(10ms→100ms),减少 push 风暴。
- 数据面:合理设置 worker 数 = CPU 核数;开 H2/H3。
- Wasm:避免大对象 allocation;HttpCall 并发数控制。
- 多注册中心:尽量减少 watcher 数;用增量协议(Nacos2)。
贡献者路线
- 从修一个
annotations/*_test.go失败用例或文档错别字开始。 - 给 ai-proxy 加一个新模型 provider(参考 deepseek.go)。
- 给 IngressConfig 新增一个 annotation 支持。
- 写一个 Wasm 插件解决团队真实问题,提交到 extensions/ 收纳。
- 关注 release-notes 与 issue 走向,参与设计讨论。
200 讲学完之后
你现在应该能回答
- 一条 Ingress YAML 怎么变成 Envoy 配置(控制面)。
- 一个 AI 请求怎么经过 Higress 到达 LLM 并返回(数据面)。
- 怎么扩展注解 / 注册中心 / Wasm 插件 / LLM Provider(开发)。
- 怎么定位线上配置不生效(运维)。
下一步
- 动手:开一个 PR。
- 阅读:把
release-notes/按时间倒序读一遍,看项目方向。 - 分享:把这 10 期内容内化成自己的文档,输出比输入更检验掌握。