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

【Envoy Gateway】东西向接缝:把失败交回 Cilium 五轴而不污染南北向坐标

文章导航

分类入口
kubernetesnetwork
标签入口
#envoy-gateway#cilium#east-west#north-south#gateway-api#kube-proxy#encryption#v1.9.0

目录

第 13 篇把南北向失败停在 status、IR、xDS 与 Envoy 数据面。真实工单很少在 Envoy 访问日志的 200 处结束:包出了网关 hop,成为 Pod 身份之间的东西向流,失败可能落在 identity 策略、Service BPF、或加密路径。若继续用 HTTPRouteAccepted 解释 Hubble Policy denied,或反过来用 Cilium map 压力解释 Gateway 证书未就绪,两套坐标系都会被污染。

本文是第 15 篇:钉接缝——请求离开 Envoy Gateway 之后,如何把失败交回 Cilium 15 的东西向五轴,而不把南北向口令写进 CNI 工单。不写 Cilium Gateway 配置菜谱,不伪造 Hubble flow。

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

篇目 核心内容
第 14 篇 · 对照替代路径 翻译内核对照
第 15 篇 · 东西向接缝 北段 / 南段、两套口令、四元组
第 16 篇 · 选型收束 排除树与开放问题

版本锚定:Envoy Gateway v1.9.0;东西向机制对齐 Cilium v1.20.0 第 15 篇(嵌入 Envoy / Gateway API 叙述量级随该发行说明)。本篇不升版 Cilium 的 identity/map 结论。


一、回收 Cilium 15 的北段 / 南段证据包

Cilium 15 把一次「外部客户超时」拆成两段,避免混写。本系列把北段换成 Envoy Gateway 方言,南段原样交回 Cilium:

必须有的字段 归属 本系列入口
北段 Gateway/Route status(Accepted / Programmed / ResolvedRefs / RouteRulesOverlap)、Envoy 访问日志状态码与 response_code_details、监听器是否在 IR/xDS 里 南北向 / EG 五轴 第 13 篇
南段(入集群后) 后端 Pod identity、Hubble verdict/reason、是否经 ClusterIP、该路径是否应加密 Cilium 东西向五轴 Cilium 13Cilium 15

只有北段没有南段,会把后端 CNP deny 误判成「网关坏了」。只有南段没有北段,会把证书/路由/direct_response 500 误判成「Cilium 丢包」。跨平面时,「一次否证一轴」升级为「一次否证一段」。

Cilium 15 原表里北段写的是「嵌入 Envoy 失败旗标」。独立 Envoy Gateway 没有 Cilium 那份嵌入控制面,北段证据改走 EG:status →(需要时)IR/xDS → Envoy access log。南段字段不要改名——identity 数字、Hubble reason、加密路径表仍是 Cilium 的词。

flowchart LR
  client["External client"]
  gw["Envoy Gateway north"]
  envoy["Envoy v1.39 listener"]
  svc["Service / ClusterIP"]
  cni["Cilium east-west CNI"]
  pod["Backend Pod"]
  client -->|"north-south L7/L4"| gw
  gw --> envoy
  envoy --> svc
  svc -->|"east-west datapath"| cni
  cni --> pod

图「北段经 Envoy 进入南段 CNI」只回答责任面切换点:包还在 Gateway 监听器上时用第 13 篇;包已成为 ClusterIP/Pod 之间的流时用 Cilium 五轴。中间那条箭头不是「再配一次 HTTPRoute」。


二、两套排障口令

口令要短,且禁止交叉解释

你看到的 先用的口令 禁止的口令
外部 404 / 500 / 无监听器 「先点名 EG 轴」:status → IR → xDS → Envoy 「先看 Hubble deny」
Gateway 访问日志已 200,客户端仍超时或后端错误 「北段已关闭,改南段」:identity → Hubble verdict → Service/KPR → 加密 「再改 HTTPRoute 重试」
同节点后端通、跨节点挂 Cilium 轴五(加密/路由)与第 6 篇路径矩阵 「EG Programmed 抖动」
Hubble 明确 Policy denied Cilium 轴二;记录 src/dst identity 「Route 没 Accepted」
Envoy direct_response 500 EG 轴一(官方 Configuration Issues:未接受配置) 「policy map 压力」
xDS NACK / 旧快照 EG 轴三 「identity 窗口」

给值班的一句分工:

两套仪表盘也要分家。第 11 篇的 xds_nack_total、Gateway 条件、Envoy 访问日志是北段;Cilium 第 12 篇的 Hubble / map pressure / encrypt status 是南段。升级窗口里先重跑哪一类门禁,写进变更单,不要「先重启两边」。

工单改派(语义模板)

北段关闭、改派南段时,工单里应留下可核对字段,而不是「看起来像 CNI」:

  1. 北段关闭句:写明 Gateway/Route 的条件类型与 reason、Envoy 访问日志的 response_code / response_code_details(或「本 hop 无 5xx / 非 direct_response」)。未填这一句,南段值班有权把单打回。
  2. 切换点:写明流量离开 Envoy 后的下一跳是 ClusterIP、Headless、还是直连 Pod IP。这决定南段先走 Cilium 轴四(Service)还是轴二/三(identity)。
  3. 四元组快照:CNI 模式、KPR、加密、南北向实现——从变更单抄,不现场猜。
  4. 禁止粘贴:不要把 HTTPRoute YAML 整段贴进 Hubble 工单当「根因」;不要把 cilium_bpf_map_pressure 截图贴进 EG 工单当「网关慢」。

南段关闭、打回北段时对称:需要 Hubble verdict 或「无 drop 但跨节点失败」的明确陈述,外加 identity 是否可读。两边都空的超时,才回到第 13 篇轴一重新分诊——那是「还没选轴」,不是「两套轴同时坏了」。

Cilium 15 写过 Ingress 与 Gateway 并存时的同名陷阱:Hubble 里的 ingress identity 不等于 实现上一定是 Gateway API。独立 Envoy Gateway 的入口身份在 Hubble 里仍可能显示为 world / 保留 identity / 网关 Pod 身份——以当前集群的 Hubble 标签为准,不要把 Cilium Gateway 文档示例直接贴到 EG 工单上。本篇不编造本集群的 identity 数字。


三、CNI / KPR / 加密 / Gateway 四元组

Cilium 15 把危险交叉区写成:特定组合(Gateway API + 云 CNI chaining + native routing + WireGuard node encryption 等)上,社区报告过跨节点南北向黑洞且 Hubble 不见 drop。教训不是「不要用网关」,而是:

本系列启用的是独立 Envoy Gateway,四元组里的「Gateway」维要改写成两问,避免与 Cilium Gateway 开关混名:

要写进变更单的值 接缝含义
CNI 模式 chaining 与否、native / tunnel 回程与跨节点是否走预期路径
KPR 开 / 关;Service 所有权是否唯一 网关 upstream 经 ClusterIP 时,轴四黑洞归 Cilium 或 kube-proxy
加密 WireGuard / IPsec / 关;是否 node-to-node 网关节点 → 后端节点是否应进隧道
南北向实现 Envoy Gateway v1.9.0 Cilium Gateway 其他;禁止双默认 北段证据包用哪套口令

Cilium 官方 Gateway 文档要求 KPR=true 才能开 Cilium Gateway。独立 EG 继承这条前置——EG 可以跑在非 Cilium CNI 上。但只要南段是 Cilium,KPR 半开仍会让「网关 200、ClusterIP 不通」变成玄学;那是 Cilium 16 的 Service 所有权叶,不是 EG 的 IR 叶。

上线检查单(语义级,不提供「复制即通过」的命令输出):

  1. 北段基线已绿:第 13 篇轴一至四在试验命名空间有 runbook(至少覆盖 ResolvedRefs 失败导致的 direct_response 与一次 NACK 口径)。
  2. 四元组写死:上表四维有值;南北向实现只标明一个默认。
  3. 南段基线已绿:无网关时 Cilium 轴一至四已有 Hubble/map 口令(Cilium 15 检查单第 1 项)。
  4. 回程与健康检查:外部 LB → EG 监听端口与 hostNetwork/NodePort 无冲突;健康检查路径不依赖尚未附着的 HTTPRoute。
  5. 回滚面:摘掉 HTTPRoute 或缩掉 EG 舰队后,东西向五轴仍可独立值班——禁止「南北向与 CNI 绑死无法回滚」。

缺第 1 项时开接缝,等于在未知 EG 方言上再叠 BPF 方言。缺第 3 项时开接缝,北段再绿也解释不了跨节点黑洞。


四、本系列不重写 identity / map

不写 原因 指针
identity 分配、policy map、CT、Hubble 字段语义 东西向内核已由 Cilium 系列交付 cilium/ 02、07、12、13
Cilium Gateway YAML / CiliumGatewayClassConfig 菜谱 那是嵌入实现,第 14 篇只对照翻译内核 Cilium 官方 Gateway API 文档;Cilium 15
伪造 Hubble observe 输出 无本环境流量 实验台账
WireGuard/IPsec 路径表重写 加密轴在 Cilium 09/13 Cilium 09
「EG + Cilium 比单开哪个快」 无统一口径实测 禁止

:责任面切换、证据包字段、口令禁区、四元组如何把「EG 工单」改派成「Cilium 工单」。

与选型终章的关系

第 16 篇排除树问「要不要独立 Envoy Gateway」。本篇的接缝是正交事实:选了 EG,只要后端跑在 Cilium 上,就必须接受双坐标编制。选了 Cilium Gateway,接缝仍存在,只是北段方言换成嵌入 Envoy + Hubble 入口身份(Cilium 15)。两种选法都不能用品牌统一取消南段。

Cilium 15 的争论——CNI 是否应内置 Gateway——本篇不站队。要求写进 ADR 的只有:南北向实现是独立 EG 还是嵌入式;值班是否同时具备第 13 篇与 Cilium 13 的口令。编制上只有「会点 HTTPRoute」的人、没有人会读 identity,接缝会把东西向事故伪装成路由配置问题。


参考资料

官方 / 站内(A)

实验台账

上一篇:对照替代路径 · 系列目录 · 下一篇:选型收束

读完这篇,下一步读什么

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


By .