土法炼钢 · 系统与基础设施

【Envoy Gateway】对照替代路径:Cilium Gateway、Istio、Ingress 与其他实现

文章导航

分类入口
kubernetesnetwork
标签入口
#envoy-gateway#cilium#istio#ingress#contour#nginx-gateway-fabric#gateway-api#comparison#v1.9.0

目录

前 13 篇把南北向失败落格到 status、IR、xDS、Envoy 数据面与入口之后的东西向。接下来的问题不是「Envoy Gateway 功能全不全」,而是:相对 Cilium 嵌入式网关、istiod 翻译、Ingress 注解模型,差在哪一层翻译内核、值班要讲哪套坐标——不是谁的 RPS 海报更大。

本文不做延迟排行榜。跨方案延迟比较需要固定网卡、内核、路由规则规模、TLS 与策略是否同开;单个数字比较是口径欺骗。产品勾选见 k8s-network/17 Ingressk8s-network/18 Gateway API(角色教程钉 Gateway API v1.2 / EG v1.2,不得当成 v1.9.0 字段全集);数据面排除树见 Envoy 16。对照结论钉各实现官方文档的机制陈述,不写未核过的「生产就绪」口号。

本文是「Envoy Gateway / Gateway API」系列第 14 篇(共 16 篇)。→ 系列目录

篇目 核心内容
第 13 篇 · 排障坐标系 五轴归因
第 14 篇 · 对照替代路径 翻译内核 × 排障坐标
第 15 篇 · 东西向接缝 北段 / 南段证据包

版本锚定:Envoy Gateway v1.9.0;Gateway API v1.6.1;Envoy v1.39.0。Cilium v1.20.0docs.cilium.io/en/v1.20/)。Istio 系列钉 1.30.3(外链 istio-xds)。Contour 对照读 1.28 Gateway API 文档;NGINX Gateway Fabric 对照读官方 Gateway architecture(查阅时站点标 2.6.7)。第三方升版须显式标注。


一、Cilium Gateway:嵌入 Envoy,接缝在东西向

Cilium v1.20.0 文档 Gateway API Support 写明:支持 Gateway API v1.6.1 资源面(含 HTTPRoute / GRPCRoute / TLSRoute / BackendTLSPolicy / ReferenceGrant,以及可选 TCPRoute / UDPRoute / ListenerSet),并提供 CiliumGatewayClassConfigGatewayClass.parametersRef。前置条件不是「再装一个独立网关控制器」那么轻:官方要求 kube-proxy replacementkubeProxyReplacement=true)以及 L7 proxy(l7Proxy=true,默认开)。

机制差,而不是菜谱差:

  1. L7 数据面仍是用户态 Envoy(Cilium 发行的裁剪发行版),不是「另一个 BPF map 里的 HTTP 路由器」。流量到 Service 端口后,eBPF 拦截并经内核 TPROXY 转到节点上的 Envoy。
  2. 控制面不是 EG 那条 CR→XdsIR→xDS Translator 管线。Cilium agent / operator 把 Gateway API 编进自己的 Envoy 配置路径(含 CiliumEnvoyConfig 一类内部对象);排障坐标先碰到 Hubble identity 与 BPF 路径,再碰到嵌入 Envoy。
  3. 入口之后立刻接东西向四元组。Cilium 15 已经警告:品牌统一不等于坐标统一。启用 Cilium Gateway 等于强制值班同时会南北向 L7 与东西向 eBPF。

站内完整边界在 Cilium 15 · Gateway 边界。本篇只收一句选型判据:若南北向必须与 identity / Hubble / KPR 同一条观测链,Cilium Gateway 是「嵌入」而不是「再买一个独立控制面」;若南北向团队与 CNI 团队要隔离爆炸半径,独立 Envoy Gateway 才对得上第 13 篇五轴。

Cilium 文档还写:Ingress 与 Gateway API 都可以暴露为 LoadBalancer / NodePort,或 host 网络。hostNetwork 与 NodePort 健康检查的责任面仍是 Cilium 15 的开放问题,不在本系列用想象中的端口表关闭。

不做的事:不写 Cilium Gateway 的 HTTPRoute 金丝雀菜谱;不伪造 Hubble flow;不把「eBPF 更快」写成对照结论。


二、Istio:istiod 翻译与 GAMMA

Istio 官方 Kubernetes Gateway API(钉 1.30 文档树)把差异写成机制,而不是「谁更新潮」:

翻译内核是 istiod:无论输入是 VirtualService/DestinationRule,还是 Gateway API HTTPRoute,最终仍编进同一套 RDS/CDS/EDS,走 xDS 推送/ACK/warming。站内 istio-xds 写的是这条生产侧推送图;istio-xds 16 排除树问的是「mesh CRD 还是可移植 Gateway API」以及何时该跳出 xDS 去做 eBPF L4。

GAMMA(Gateway API for Mesh Management and Administration)把同一套 Route 接到东西向parentRef 指向 Service 而不是 Gateway。Gateway API 项目文档写明该模型自 v1.1.0 起在 Standard Channel。Istio 1.30 文档在 Mesh Traffic 节给出 Service parentRef 示例。这对 Envoy Gateway 是另一条输入:EG v1.9 Concepts 把 Route 的 References 写成 Gateway——南北向入口;GAMMA 是 mesh 翻译,本系列不抢。混用时的冲突判定,istio-xds 16 标为双轨开放问题。

查阅 Istio 1.30 该页的 CRD 安装示例仍写 gateway-api/config/crd?ref=v1.5.1。这只说明该教程片段的安装钉,不能据此断言 Istio 1.30.3 运行时只支持到 v1.5.1,也不能把它写成与本系列 Gateway API v1.6.1 同一捆。升版对照要读 Istio 自己的兼容说明,不在本篇合并版本矩阵。

选型判据:

不做的事:不重写 istiod watch→model→ADS;不把 Ambient ztunnel 与 EG 数据面舰队写成同构(ztunnel 仍是 xDS 客户端,见 istio-xds)。


三、Ingress 注解模型

Ingress 的核心 spec 是 host + path → Service。表达力不够的部分,历史路径是控制器私有 annotation:rewrite、金丝雀、超时、TLS 细节、连接池。站内 k8s-network/17 已把「最小公约数 + 注解动物园」写成 Ingress 注定被替代的机制原因。

对照 Envoy Gateway,差在三处不变量:

维度 Ingress + 注解 Gateway API + Envoy Gateway
可移植核心 换控制器,注解失效 核心 Route/Gateway 意图跨实现可复述;扩展走 Policy Attachment
角色分离 单层资源,基础设施与应用抢同一对象 GatewayClass / Gateway / Route 分层(k8s-network/18
失败可见性 常见于 Ingress status 与控制器日志;注解错误往往无标准条件 Accepted / Programmed / ResolvedRefs;EG 另有 IR/xDS 轴

Ingress 仍可能是正确叶:现有注解 runbook 已覆盖、没有跨实现移植需求、编制上不想付 Gateway API + Policy CRD 的学习税。那不是「落后」,是排除树上的否证。假迁移是把 nginx ingress 注解逐条翻译成看起来像 HTTPRoute 的 YAML,却在 EnvoyPatchPolicy 里重建同一座动物园——可移植核心被放弃,只换了资源 Kind。

Gateway API 自己的 Policy Attachment(GEP-713)承认:用独立 Policy 对象改行为,会带来可发现性fanout status 问题。Envoy Gateway 的 SecurityPolicy / BackendTrafficPolicy 等正是这条分叉。对照 Ingress 注解时不要假装 EG Policy「完全标准化」——标准化的是附着模式,字段仍是实现扩展。v1.9.0 把 mergeType 限制在 xRoute,是在用 admission 收窄分叉,不是消灭分叉。


四、Contour 与 NGINX Gateway Fabric:实现对照叶

这两条路径只用来钉「同一张 Gateway API,翻译内核可以完全不同」。不写成第二套内核,不做第三名评选。

Contour(文档 1.28)

Contour 官方 Gateway API 写明:在 HTTPProxy / Ingress 之外实现 Gateway API,目标是 core 与 extended 特性。关键机制:

排障坐标因此是 Contour 日志 + Envoy admin,而不是 egctl 与 EG 的 xds_nack_total。同跑 Envoy 不等于同跑第 13 篇口令。

NGINX Gateway Fabric(官方架构文)

NGINX Gateway Fabric 官方 Gateway architecture 把控制面写成 controller-runtime 控制器:watch Gateway API,翻译成 NGINX 配置,经 gRPC 送给数据面 Pod 内的 NGINX Agent;Agent 写文件并信号 master reload。每个 Gateway 对应一份独立 NGINX 数据面 Deployment/Service。

这与 Envoy Gateway 的分歧不在「是否 Gateway API」,而在:

不做的事:不比较 Contour 与 NGF 的性能;不把 NGF 的 F5 telemetry 写成选型加分。


五、机制差表

对照只回答一个问题:输入 API、翻译内核、数据面各是什么;值班失败时先喊哪套坐标。

flowchart LR
  subgraph input["Input API"]
    gapi["Gateway API"]
    ing["Ingress plus annotations"]
    mesh["Istio CRD plus GAMMA"]
  end
  subgraph kernel["Translation kernel"]
    eg["EG Translator XdsIR InfraIR"]
    cil["Cilium agent plus CEC"]
    istiod["istiod model"]
    contour["Contour translator"]
    ngf["NGF to nginx conf"]
  end
  subgraph dp["Dataplane"]
    envoy["Envoy xDS"]
    nginx["NGINX plus agent"]
    ebpf["eBPF intercept plus Envoy"]
  end
  gapi --> eg
  gapi --> cil
  gapi --> istiod
  gapi --> contour
  gapi --> ngf
  ing --> contour
  mesh --> istiod
  eg --> envoy
  contour --> envoy
  istiod --> envoy
  cil --> ebpf
  ngf --> nginx
路径 输入 API 翻译内核 数据面 排障坐标(先喊)
Envoy Gateway v1.9.0 Gateway API + EG Policy CRD Provider → Translator → XdsIR / InfraIR → xDS Translator / Infra Manager 托管 Envoy v1.39.0 舰队 本系列五轴:status / IR / xDS / Envoy / 东西向
Cilium Gateway v1.20.0 Gateway API(v1.6.1 能力面) Cilium agent/operator;嵌入 Envoy 配置 eBPF 拦截 + 节点 Envoy Cilium 15 北段/南段;KPR 为前置
Istio 1.30.x Gateway / GAMMA Gateway API 与/或 VS/DR;GAMMA 的 Service parentRef istiod 编同一套 xDS Envoy sidecar / 网关 / Ambient 组件 istio-xds 推送/NACK;不是 EG IR
Ingress 注解 Ingress + 控制器私有 annotation 各 Ingress Controller 自有渲染 Nginx / Envoy / Traefik / HAProxy… 该控制器日志与注解语义;k8s-network/17
Contour 1.28(叶) Gateway API;可选 HTTPProxy/Ingress Contour;Gateway 1:1 控制面 Envoy + xDS Contour + Envoy admin;非 egctl
NGINX Gateway Fabric(叶) Gateway API 控制面 → NGINX conf NGINX + Agent gRPC reload / Agent / 文件;非 xDS 资源树

表后必须读的一句:前三行里「都说自己实现了 Gateway API」只对齐了输入面的一个子集;IR 是否存在、xDS 是否经过 go-control-plane、eBPF 是否先把包拽进节点代理,决定了第 13 篇口令能不能复用。不能复用就换系列,不要硬套 Accepted 故事。

经典假对立


参考资料

规范 / 官方文档(A)

站内对照

实验台账

上一篇:排障坐标系 · 系列目录 · 下一篇:东西向接缝

读完这篇,下一步读什么

优先读同系列或同问题的下一篇,把单篇消费变成主题集群。


By .