第 10 篇 落在 linkerd2-proxy 入站/出站链。本篇回答:2.20 把 Gateway API 钉到哪一扇门、mesh 内路由与南北向 ingress 谁负责、多集群需要共享什么信任根——以及哪些能力不能因为 live 文档已出现就写进 2.20 正文。
常见误区:把集群里装的 GAPI CRD 版本当成「Linkerd 已理解全部字段」;把 Envoy Gateway 的 GatewayClass 故事照抄到 mesh 内 HTTPRoute;multicluster 只装 gateway 却不轮转 trust bundle。排障时 GAPI 未生效多落在轴 4(策略与 L7),multicluster 握手失败常回到轴 2(共享 trust anchor)。
本篇在系列中的位置
篇目 核心内容 第 10 篇 · linkerd2-proxy 数据面入站/出站与 LB 第 11 篇 · Gateway API 与多集群 GAPI 1.5.1 门、mesh vs EG、multicluster 边界 第 12 篇 · 运维与升级 证书轮转与 destination 内存门 系列目录 全部篇目
版本锚定:Linkerd 2.20;Gateway API 1.2.1–1.5.1(公告上限 1.5.1;推荐安装 1.2.1)。multicluster 机制以 tag
version-2.20配套文档为准。无多集群环境则不写「镜像成功」叙事。
一、GAPI 1.5.1 门
2.20 把最高支持的 Gateway API 版本抬到 1.5.1(随 2026-06-23 公告;K8s 支持至 1.35)。兼容区间与路由 API 版本见官方 Gateway API support:
| Linkerd 版本 | Gateway API 兼容 | HTTPRoute | GRPCRoute |
|---|---|---|---|
| 2.18–2.19 | 1.1.1–1.2.1 | v1 | v1 |
| 2.20 | 1.2.1–1.5.1 | v1 | v1 |
推荐安装 1.2.1 的原因(文档原文口径):更高版本 CRD 可以共存,但 Linkerd 只保证理解 ≤1.2.1 规范中的字段与取值。遇到未知字段或取值时,Linkerd 忽略该资源——表象是「YAML 在集群里存在,mesh 行为不变」。
与第 9 篇的双轨:
| 配置面 | API 组 | 2.20 地位 |
|---|---|---|
| ServiceProfile | linkerd.io / 历史 CRD |
仍支持;与 GAPI 路由分工 |
policy.linkerd.io HTTPRoute |
Linkerd 自有 | 逐步由标准 GAPI 承接 |
gateway.networking.k8s.io HTTPRoute /
GRPCRoute |
Kubernetes GAPI | 2.20 核心配置路径之一 |
从 GAPI 1.1.1 升到 ≥1.2.0 时,GRPCRoute 有破坏性注意点——升级窗口须读 GAPI 1.2.0 release notes,本篇不替代该清单。
二、mesh 路由 vs 南北向 EG 分工
Gateway API 同时描述集群内(mesh)与集群边(ingress/egress)流量类型,但实现者不同。本系列只钉 Linkerd mesh 侧;南北向数据面与控制面见 envoy-gateway/ 系列。
| 流量类 | 典型资源 | Linkerd 2.20 | Envoy Gateway / 其他 ingress |
|---|---|---|---|
| 东西向 mTLS | HTTPRoute 附着 Service、AuthorizationPolicy | destination + policy 求值后进入 linkerd2-proxy | 非 Linkerd 核心路径 |
| 南北向入口 | Gateway、GatewayClass、Listener | 可共存;边车 mesh 与入口解耦 | EG 主战场 |
| L7 超时/重试/分权 | HTTPRoute rules、ServiceProfile | 经 destination 下发(轴 4) | EG xDS 翻译链 |
争论(有文档依据):GAPI 旨在实现无关,但 policy attachment 在 mesh 与 gateway 控制器之间仍可能双轨——Linkerd 同时保留 ServiceProfile 与 GAPI HTTPRoute 时,「哪条资源生效」必须以 destination 实际加载为准(第 9 篇),不能假设「只改 GAPI 就一定覆盖 SP」。
排障口令:南北向 404/证书问题先查
Gateway/Listener 与 EG;mesh 内
403/路由不命中查 轴 4 与 HTTPRoute
parentRef,不要混查 istio VirtualService。
三、multicluster(以 tag 文档为准,不超前)
Linkerd multicluster 在 2.20 仍遵循官方 Installing
Multi-cluster 任务文档机制(开写时对照 tag
version-2.20 path):
flowchart LR
src["Source cluster"]
tgt["Target cluster"]
gw["multicluster gateway"]
mirror["Service mirror / exported Service"]
src -->|"mTLS over gateway"| gw
gw --> tgt
mirror --> src
| 机制 | 文档锚点 | 运维要点 |
|---|---|---|
| 共享 trust anchor | multicluster 安装前提;可与第 12 篇 bundle 轮转衔接 | 无共享根 → 轴 2 握手失败 |
| gateway 组件 | linkerd multicluster install |
跨集群 TLS 终止与身份校验 |
| 服务导出 | 默认仅 mirror.linkerd.io/exported 标签
Service 被镜像 |
未打标 ≠ 「multicluster 坏了」 |
| 源集群 SA | linkerd multicluster allow 可为每源集群单独
SA |
撤销镜像权限 |
不写超前:live 文档若出现新镜像模式、新
CRD 或 edge-only 字段,在未钉入
version-2.20
前不得写入本篇结论。实验台账未跑:无伪造
linkerd multicluster check 输出。
与单集群发现的关系:镜像 Service 在源集群表现为 K8s
Service,后端解析仍走 destination Get()
流(第 7
篇)——multicluster 不是第二条 xDS。
四、不写未钉能力
下列内容禁止当成 2.20 事实写入正文或 runbook:
| 类别 | 处理 |
|---|---|
linkerd.io/docs/ live 上晚于
2.20 公告的能力 |
仅作线索;机制以 tag 为准 |
| 未在 1.2.1 字段集内的 GAPI 实验字段 | 可能被 Linkerd 静默忽略 |
| edge-only 特性 | 不得写成 2.20 stable 默认 |
| OSS stable 制品(2024-02 起项目本身不再发) | 安装来源见 releases/vendor;机制仍钉 tag |
| 跨方案 CPU%/延迟榜 | 全系列禁止 |
值班门禁:变更单写 Linkerd tag + 集群内 GAPI CRD 版本 + 资源字段是否 ⊆ 1.2.1,不写「docs 今天新出现的注解」。
五、开放问题指针 16
下列问题在本篇只立边界,收束见第 16 篇:
- GAPI
双轨:ServiceProfile、
policy.linkerd.ioHTTPRoute、标准 GAPI HTTPRoute 并存时,冲突判定与迁移路径——社区仍在从 SP 向 GAPI 统一(见 Gateway API support 迁移段)。 - multicluster 与 trust anchor bundle:bundle 轮转窗口内多集群是否全部完成滚动重启——与第 12 篇同一运维门。
- native sidecar 默认(2.20)下 Job/CronJob 与 multicluster gateway 的启动顺序——第 2 篇与选型篇回收。
参考资料
规范 / 官方文档(A)
- Linkerd Gateway API support(2.20 兼容表;推荐 1.2.1;未知字段忽略)
- Installing Multi-cluster;multicluster 组件文档
@
version-2.20 - Announcing Linkerd 2.20(GAPI 1.5.1 上限)
对照(B)
- Envoy Gateway 系列(南北向分工,不重写)
本系列
- 第 9 篇 · ServiceProfile;PLAN.md §七·11、§九·11
下一篇:运维与升级
读完这篇,下一步读什么
优先读同系列或同问题的下一篇,把单篇消费变成主题集群。
【Linkerd】选型收束与开放问题:排除树与系列边界关闭
用机制排除树收束何时不该跑 Linkerd;回收 istio-xds/16 的 Linkerd 叶;列出 native sidecar 与 Job、GAPI 双轨、与 Falco/Tetragon 联合 runbook 等开放问题;以 ADR 友好语言关闭续作边界。
【Envoy Gateway】HTTPRoute / GRPCRoute:匹配进入 RDS,阴影要靠 RouteRulesOverlap
钉 HTTPRoute/GRPCRoute 的附着、hostname、matches/filters/backendRefs 如何进入 RDS;对照 Gateway API v1.6.1 匹配优先级,以及 v1.9 RouteRulesOverlap 对同 listener 相同匹配的警告。
【Linkerd】控制面全景:缺口、五轴坐标系与 16 篇路线
相对 istio-xds/14 对照篇与 architecture/76 税文,钉清 Linkerd 2.20 非 xDS 控制面缺口;定义注入、identity、destination、策略与数据面五条轴,并强调 native sidecar 与 legacy 路径分列证据包。
【Linkerd】网格成员与注入:proxy-injector 与 native sidecar 门
以 Linkerd 2.20 为锚,拆解 proxy-injector 如何把 Pod 变成 mesh 成员;native sidecar 默认与 legacy init+sidecar 分列证据包,以及 opaque ports 与 membership 失败落格。