前 15 篇把 Linkerd 非 xDS 控制面拆到可归因精度:三组件拆分、native sidecar 默认门、identity CSR、destination 按目标流、策略与 ServiceProfile、排障五轴,并对照了 istiod/xDS、Ambient、Cilium L4,划清了制品与观测/安全系列边界。选型若再写成「Linkerd 轻、Istio 全、eBPF 快」,等于把机制丢掉。
本文是终章:用机制排除树收束判断,回收 istio-xds/16 指向的 Linkerd 叶,写明何时不该跑 Linkerd,列出仍开放的问题,并以 ADR 可粘贴的语言关闭「Linkerd 非 xDS 控制面内核」续作边界。不做跨方案延迟或 CPU 排行榜。
本篇在系列中的位置
篇目 核心内容 第 15 篇 · 生态与制品边界 stable / edge / Buoyant 第 16 篇 · 选型收束(终章) 排除树、开放问题、边界关闭 系列目录 全部篇目
版本锚定:Linkerd 2.20(源码 tag
version-2.20,2026-06-23;edge edge-26.6.3)。Istio 对照钉 1.30.3;Cilium 对照钉 v1.20.0;Falco 对照钉 0.44.1;Tetragon 对照钉 v1.7.0。OSS stable 安装制品自 2024-02 起不由项目直发(第 15 篇)。
一、机制排除树
排除树每一叶必须回答一个可证伪的机制问题,而不是「看场景」。
flowchart TD
l7{"Need L7 policy that changes\nindependent of app deploy?"}
l7 -->|"No"| l4{"Need only L3/L4\nidentity plus policy?"}
l4 -->|"Yes"| cil["Cilium L4 path\nsee cilium/16"]
l4 -->|"No"| plain["Plain CNI\nno mesh tax"]
l7 -->|"Yes"| xds{"Need generic xDS\nmulti-consumer or Envoy filters?"}
xds -->|"Yes"| istio["istiod / xDS path\nsee istio-xds/16"]
xds -->|"No"| amb{"Need sidecar-free\nin Istio ecosystem?"}
amb -->|"Yes"| ambient["Ambient ztunnel plus waypoint\nsee istio-xds/13"]
amb -->|"No"| staff{"Can staff operate\nLinkerd five axes?"}
staff -->|"No"| defer["Do not run Linkerd yet"]
staff -->|"Yes"| tag{"Accept vendor or edge\ntag alignment for install?"}
tag -->|"No"| defer2["Fix release ADR first"]
tag -->|"Yes"| linkerd["Linkerd 2.20 path\nthis series"]
| 机制判据(问句) | 若「否」 | 倾向 |
|---|---|---|
| 需要独立于应用发布变更的 L7 策略? | 不必上完整 mesh 翻译层 | 应用内处理或南北向网关 |
| 只需要 L3/L4 身份与网络策略? | 不要为 mesh 品牌装 proxy | Cilium 16 |
| 需要通用 xDS、Envoy Filter 或 Ambient 多客户端? | 专用 API 不够 | istio-xds/16 |
| 已在 Istio 生态且要砍 sidecar 但仍走 xDS? | Linkerd 换栈税可能更大 | Ambient(istio-xds/13) |
| 编制撑得住 Linkerd 五轴(注入 / identity / destination / 策略 / 数据面)? | 机制再强也运维不起 | 先缓装或托管 |
| 安装制品 tag 与机制验收 tag 可核对(2024-02 制品边界)? | 排障文章与集群不对齐 | 先写发行 ADR(第 15 篇) |
| 南北向 L7 网关是否已归 EG? | 与 mesh 叶正交 | envoy-gateway/ |
排除树与 istio-xds/16 互补:Istio 终章先问「要不要 L7 翻译层、要不要 xDS」;本篇在「需要 mesh 且不必通用 xDS」分支上继续问「能否运维 Linkerd 五轴与制品 tag」。两棵树应先后走,不应把任一叶当成全局默认答案。
甜区:自管 Kubernetes,要把默认 meshed
mTLS + destination 流当作一等能力;接受
linkerd2-proxy-api 一对一设计;值班能用第 13
篇五轴说话;机制钉
version-2.20(或 vendor
声明对齐的 stable);L7 以 ServiceProfile / policy
为主,不依赖自定义 Envoy Filter。
苦区:把 Linkerd 当「轻量 istiod」查
CDS/EDS;无端点先改 ServiceProfile 却不查 Get()
流;trust anchor 轮转无检查单;native sidecar 与 Job
混谈却不分列证据包;用未标定 CPU 海报在 Istio 与 Linkerd
间站队;把 Buoyant
Enterprise 宣传语当成开源 tag 能力表。
何时不该跑 Linkerd(否证条件)
下列任一成立,排除树上 Linkerd 叶判负(可写进 ADR):
- 编制撑不住五轴——不能用第 13
篇口令区分未 mesh、CSR/anchor 失败、空端点、策略拒、proxy
502。
- 需求停在 Cilium L4 + Hubble——要回答的是
identity 与包路径,不是 meshed mTLS 流(cilium/16)。
- 必须通用 xDS 或多 Envoy
消费者——waypoint/第三方 xDS 代理是硬需求;走 istiod
路径。
- 已在 Istio 存量且 Ambient 满足
sidecar-free——换 Linkerd 的迁移税需单独
ADR,不能靠「更轻」口号。
- 安装 tag
与机制文章不一致且无验收门——2024-02 后 stable
包来自 vendor,未钉 tag 则禁止声称「按 2.20
机制已验收」。
- 把「装了 Linkerd」当成南北向 Gateway 已解决——EG / Gateway API 南北向仍归 envoy-gateway/。
否证触发后应重跑排除树。沉没成本不是机制判据:POC 转正、安全套餐捆绑,都要把现状当假设再走一遍上表。
Cilium CNP 与本系列 AuthorizationPolicy 正交:排除树判负 Linkerd,并不等于东西向已具备 meshed mTLS;若威胁模型仍要每连接证书,需在 Cilium 叶之外单独写加密路径表(cilium/09)。反之,选了 Linkerd 也不替代 CNP——「TLS 绿了」不能证明 identity NetworkPolicy 已审。
对平台团队的务实建议:先用第 13 篇在试验命名空间跑通一次演练故障(至少覆盖「Pod 未 mesh」与「destination 空流但 Service 有 Endpoint」),再决定是否把 Linkerd 定为默认 mesh。若演练里卡在「读不懂五轴」,优先补第 1、2、4、7 篇门禁与编制,而不是先扩 namespace 注解覆盖面。
二、回收 istio-xds/16 Linkerd 叶
istio-xds/16 在排除树与阅读路径里把 Linkerd 标为「非 xDS 对照续作」,并曾写「规划已锁定」指向 linkerd/index。该指针在 Istio 终章交付时是悬空的机制叶:读者知道「xDS 不是唯一解」,但不知道 injector→identity→destination→proxy 如何分列、per-target 流与 type-subscription 排障口令差在哪、何时应离开 Linkerd 叶。
本系列交付后,该叶的机制内容如下——两边终章不再悬空:
| istio-xds/16 原指针 | 本系列回收位置 | 关闭状态 |
|---|---|---|
| Linkerd「非 xDS 对照续作」 | 01 五轴;02–13 机制与排障;14 对照;本篇排除树 | 已展开 |
| 「xDS 不是唯一解」(第 14 篇) | 第 6–7 篇 API 与发现流;14 机制表 | 已划界 |
| destination / identity 路径不重写 | 本系列 04–05、07 | Istio 系列不重写 |
| Ambient / eBPF L4 叶 | istio-xds/13、16;cilium/16 | 互不覆盖 |
| 推送 SLO / GAMMA 双轨(Istio 输入侧) | istio-xds/16 §六 | 本系列不重写;3.2 仅 ServiceProfile×GAPI |
给读完两边的人一句分工口令:
- 「NACK / warming /
proxy-status」→ istio-xds/15
- 「该不该上 istiod / Ambient / eBPF L4」→ istio-xds/16
- 「未 mesh / CSR / 无端点 / policy 拒」→ 本系列
13
- 「该不该上 Linkerd」→ 本篇排除树
- 「Hubble / CNP」→ cilium/
istio-xds 终章承诺的 Linkerd 续作指针,到此关闭悬空状态。不是「永远不再写网格」,而是:同一句「去看 Linkerd 机制」不应再没有可核对篇章。
姊妹终章侧读者若仍只看到 istio-xds/14 一篇对照,应再进 第 1 篇 建立五轴,再回本篇做选型。Istio 侧「专用 gRPC vs xDS」机制对照保留在 istio-xds/14;本系列补的是 Linkerd 侧失败模式全书,两边不应互相改写版本钉。
三、开放问题
关闭条件必须是测量或正式文档/源码变更,不是路线图幻灯片。
3.1 native sidecar 默认与 Job / CronJob
问题:2.20 native sidecar
为默认注入路径时,Job/CronJob
等短生命周期工作负载的成员资格、流量重定向与「Pod
完成」语义是否与 legacy init+sidecar
路径同一套证据包?
为何重要:轴 1 须分列证据包(第 2、3、13
篇);排障口令不能混用「缺 proxy」与「Job 未退出」。
检验:同一 Job 在 native 与 legacy
路径各跑一次,核对 spec、完成条件与 mesh
指标是否可对比。
现状:机制分叉已钉(2.20
门);默认策略与平台门禁仍因集群而异,保持开放。Kubernetes
native sidecar KEP 与 mesh 注入的交互仍在社区演进——ADR
应写「本集群 Job
默认走哪条注入路径」,而不是假设全局默认。
3.2 Gateway API 与 ServiceProfile 双轨
问题:同一服务同时存在 GAPI
HTTPRoute(2.20 支持至 1.5.1)与
ServiceProfile 时,权威路由/超时/重试源是哪一条?冲突时
destination 响应以谁为准?
为何重要:第 9、11 篇分工指针;混用会把 L7
失败误判成「proxy 坏」。
检验:固定一对冲突配置,核对 destination
行为与官方 tag 文档是否给出显式优先级。
现状:GAPI
门已钉;双轨权威源判定仍开放(呼应 istio-xds/16
GAMMA 双轨项,但输入 CRD 不同)。南北向 HTTPRoute 若已归 envoy-gateway/,东西向
mesh 路由仍可能走 ServiceProfile——「同集群两套 L7
作者」必须在 ADR 里分行,不能假设运维凭直觉知道哪条 CRD
生效。
3.3 与 Falco / Tetragon 的联合 runbook
问题:故障时先查 Linkerd
五轴(TLS/无端点)还是 Falco 五轴(规则/输出)或 Tetragon
五轴(TracingPolicy/Override)?ServiceAccount、Pod 身份与
exec_id 如何在同一工单引用?
为何重要:Falco
16 与 Tetragon
16 均把联合 runbook
标为开放;网格与安全事件「看起来像连接失败」。
检验:合成「mTLS 握手失败 + 容器内
suspicious connect」「CNP deny + meshed 正常
TLS」——值班是否落到正确系列。
约束:本系列不裁决安装顺序;两边终章项保持开放,不要互相冒充关闭。同一
incident 里「TLS alert」与「Falco 命中
connect」可能同时出现——工单应拆成两条轴,先判定 transport
是否 meshed,再判定 syscall
是否可疑,而不是合并成一次「重装控制面」。
3.4 destination 内存与 EndpointSlice churn
问题:2.20 destination
内存优化后,大规模 EndpointSlice churn 下控制面内存 SLO
应如何写进 ADR?
为何重要:第 5、12 篇运维门;与「Linkerd
一定更省内存」口号无关。
检验:声明集群规模与 churn 口径后采样
destination Pod 内存;与 tag 公告对照。
现状:机制重构已公告;本系列不编造百分比;SLO
数字保持开放。
写给后续维护者:升 Linkerd 小版本时,先核 3.1–3.4 是否被 tag 或 vendor 包改变默认语义,再更新本篇「开放/已关闭」表,而不是重写排除树的问题顺序。 live 文档出现、tag 未包含的能力,保持开放项,不悄悄写进甜区。
四、边界关闭
| 题目 | 归属 | 关闭状态 |
|---|---|---|
| istiod / xDS 推送 / NACK / warming | istio-xds/ | 外链;本系列不重写 |
| Ambient ztunnel / waypoint | istio-xds/13 | 外链;14 篇只对照 |
| eBPF L4 / Hubble / CNP | cilium/ | 外链;14 篇只对照 |
| Envoy Filter / HCM 全书 | envoy/ | 外链 |
| 南北向 Gateway / XdsIR | envoy-gateway/ | 外链;11 篇 mesh 边界 |
| 进程 / syscall / Override | tetragon/ | 外链;联合 runbook 未关闭 |
| Falco 规则 / 双引擎 | falco/ | 外链;联合 runbook 未关闭 |
| injector→identity→destination→proxy→五轴→选型 | 本系列 | 01–16 覆盖 |
| 未实测跨方案 CPU/延迟榜 | — | 禁止 |
| Buoyant 定价 / 托管点击菜谱 | 采购栈 | 第 15 篇已划出 |
| native sidecar+Job、GAPI 双轨、联合 runbook、destination SLO | 开放项 3.1–3.4 | 未关闭 |
给读完本系列的人三条收束(ADR 友好)
- 排除树进
ADR:写清卡在哪一叶机制判据;附否证条件(编制减员、需求退回
Cilium L4、必须 xDS、tag 不对齐、误把南北向当
mesh)。示例句:
「若平台不再维护 Linkerd 五轴值班,或必须通用 xDS 多消费者,则 Linkerd 叶必须重跑排除树,禁止以『服务网格已安装』续跑。」 - 若选了 Linkerd:第 13
篇五轴进发布门禁;第 2/3 篇 native vs legacy
证据包进变更单;第 4/12 篇 trust anchor 轮转进检查单;第 15
篇制品 tag 进验收门——缺一项降级为试验集群。
- 若没选:用第 14 篇机制表做代际复盘;禁止无口径 CPU 截图重开争论。需要 xDS 时回 istio-xds 终章;需要纯 L4 时回 cilium 终章;需要安全事件归因时回 Falco/Tetragon 终章。
选型复盘会议应带机制表而不是带海报:每一行前提崩了,记录「崩在哪一列」(协议、数据面还是排障坐标),而不是重新收集「听说 Istio 更重」一类无来源句。若组织已装 Linkerd 但排除树重跑判负,迁出税可以写进 ADR,但不能把「历史 POC 已上线」写成机制判据。
终章立场:Linkerd 值得写成非 xDS
控制面系列,是因为失败可命名——未 mesh、issuer/anchor
混谈、Get() 空流、SP 与 GAPI 混配、destination
OOM。选型若离开这些名字,讨论退回安装量与「轻量」口号。记住一个动作:先排除,再钉
tag,再开 mesh 扩面——排除自带否证,tag 自带 2024-02
制品边界,扩面自带 native sidecar 与 Job 分列。
回到系列开头的缺口:istio-xds/16 留下的 Linkerd 叶现已有可核对篇章。若读完仍只能复述「不用 xDS」,说明阅读停在对照表;若能在故障里说出「这是 identity anchor 轮转」或「这是 destination 空流而非 CNP」,机制文才算交货。
若读者时间只够两篇:读 01 全景 建立缺口意识,再读本篇排除树;然后按主轴跳进 02/06/13 之一。完整通读的收益是「症状能落格」;跳读的风险是把 legacy init 路径当成 2.20 默认,或把 vendor edge 包当成机制验收 tag。
给维护者:补丁级更新应改版本钉与开放问题进展,而不是重写「先排除再选」的顺序。若 3.2 随 GAPI 标准化关闭,在本篇追加「已关闭项」并链到复盘,避免后人把 HTTPRoute 与 ServiceProfile 优先级写回「从未争论」。
至此,系列在机制层闭合:从注入与重定向,到 identity、destination 流、策略与数据面、对照与制品边界,再到排除树。后续补丁级更新应改版本钉与开放问题进展,而不是重写五轴口令。
参考资料
规范 / 官方文档 / 源码(A)
- Linkerd 2.20 / tag
version-2.20;Releases 页 - 本系列 PLAN.md §六、§八;第 1 篇 五轴
- Istio 1.30.3 终章:istio-xds/16
站内对照
- 系列目录
- istio-xds/16 · Linkerd 原指针
- 第 14 篇 · 对照
- 第 15 篇 · 生态
- Falco 16;Tetragon 16
- architecture/76 · Service Mesh
实验台账
- 本篇无跨方案 benchmark;选型依据为机制排除。开放问题关闭依赖测量或上游文档,不在此伪造时间线。
上一篇:生态与制品边界
下一篇:系列目录
读完这篇,下一步读什么
优先读同系列或同问题的下一篇,把单篇消费变成主题集群。
【Linkerd】对照替代路径:istio-xds、Ambient 与 Cilium L4
从控制面协议、数据面引擎与排障坐标对照 istiod/xDS、Istio Ambient 与 Cilium eBPF L4;外链 istio-xds 全书不重写,不做跨方案 CPU 排行榜。
【Envoy Gateway】选型收束与开放问题:排除树、南北向叶关闭与系列边界
用机制排除树收束何时不该跑 Envoy Gateway;回收 Cilium 16 与 Tetragon 16 的南北向悬空指针;列出 status 当 SLO、IR 对账、remote infra、与 Cilium 四元组联合 runbook 等开放问题;关闭本系列续作边界。
【Cilium / eBPF】选型收束:排除树、开放问题与系列边界关闭
用机制排除树收束 Cilium eBPF 相对 Calico、kube-proxy、Envoy sidecar、Ambient 的选型;回收 Envoy/HAProxy 终章的 eBPF 叶;列出系列级开放问题;以 ADR 友好语言关闭数据面续作边界。
【Istio 控制面】选型收束与开放问题:CRD、Gateway API 与 eBPF L4 的排除树
用机制排除树收束 Istio CRD 翻译、Gateway API/GAMMA 与 eBPF L4 的选型边界,回收系列阅读路径,并列出推送 SLO、Ambient 成熟度、GAMMA 双轨等开放问题;不做延迟排行榜。