【Linkerd】Gateway API 与多集群:GAPI 1.5.1 门与边界
内容提要
本文介绍Linkerd 2.20中Gateway API与多集群机制。2.20支持GAPI 1.2.1至1.5.1,推荐安装1.2.1,因Linkerd仅理解该版本字段,未知字段会被忽略。mesh内路由由Linkerd处理,南北向入口归Envoy Gateway。多集群需共享信任根,否则握手失败。未钉入2.20版本的能力不写入正文,排障需检查GAPI版本与资源字段。
延伸解读
版本兼容的陷阱
Linkerd 2.20 虽然支持 Gateway API 至 1.5.1,但推荐安装 1.2.1,因为 Linkerd 只理解该版本规范中的字段。若安装更高版本,未知字段会被静默忽略,导致 YAML 存在但 mesh 行为不变。排障时需检查集群内 GAPI CRD 版本及资源字段是否在 1.2.1 范围内。
mesh 与南北向分工
东西向 mesh 内路由由 Linkerd 处理,南北向入口归 Envoy Gateway。排障时需区分:南北向 404 或证书问题查 Gateway/Listener 与 EG;mesh 内 403 或路由不命中查 HTTPRoute parentRef 与策略。同时注意 ServiceProfile 与 GAPI HTTPRoute 并存时,以 destination 实际加载为准。
多集群信任根
多集群部署必须共享信任根,否则 mTLS 握手失败。服务导出依赖 mirror.linkerd.io/exported 标签,未打标不代表故障。镜像 Service 在源集群表现为普通 Service,后端解析仍走 destination Get() 流,并非第二条 xDS。
Q&A
Linkerd 2.20 支持哪些版本的 Gateway API?推荐安装哪个版本?
Linkerd 2.20 支持 Gateway API 1.2.1 至 1.5.1,但推荐安装 1.2.1,因为 Linkerd 只保证理解 1.2.1 规范中的字段和取值,更高版本的未知字段会被忽略。
在 Linkerd 2.20 中,mesh 内路由和南北向入口流量分别由谁处理?
mesh 内(东西向)路由由 Linkerd 自身处理,通过 destination 和策略下发到 linkerd2-proxy;南北向入口流量由 Envoy Gateway 等 ingress 控制器处理,Linkerd 边车与入口解耦。
Linkerd 多集群部署的前提条件是什么?如果未满足会怎样?
多集群部署需要共享信任根(trust anchor),否则集群间 mTLS 握手会失败。
在 Linkerd 2.20 中,如果集群中安装了更高版本的 Gateway API CRD,但 Linkerd 不识别某些字段,会发生什么?
Linkerd 会忽略包含未知字段或取值的资源,导致 YAML 在集群中存在但 mesh 行为不变。
Linkerd 2.20 中,ServiceProfile 和 Gateway API HTTPRoute 同时存在时,如何判断哪条资源生效?
应以 destination 实际加载为准,不能假设只改 GAPI 就一定覆盖 ServiceProfile。
在 Linkerd 多集群中,服务如何被导出和镜像?
默认情况下,只有带有 mirror.linkerd.io/exported 标签的 Service 会被镜像到源集群,未打标不代表多集群故障。
Linkerd 2.20 中,哪些能力不能写入正文或 runbook?
不能写入 2.20 正文的能力包括:live 文档中晚于 2.20 公告的能力、未在 1.2.1 字段集内的 GAPI 实验字段、edge-only 特性,以及跨方案 CPU%/延迟榜。