第 13 篇把南北向失败停在 status、IR、xDS 与 Envoy
数据面。真实工单很少在 Envoy 访问日志的 200
处结束:包出了网关 hop,成为 Pod
身份之间的东西向流,失败可能落在 identity 策略、Service
BPF、或加密路径。若继续用 HTTPRoute 的
Accepted 解释 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 13、Cilium 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 窗口」 |
给值班的一句分工:
- 「ACK/warming/Filter/
direct_response」→ 本系列 13 + envoy/15
- 「identity / policy map / Hubble deny / KPR 黑洞」→ Cilium
13
- 「该不该让 Cilium 兼任 Gateway」→ Cilium 15–16 与本系列第 14、16 篇
两套仪表盘也要分家。第 11 篇的
xds_nack_total、Gateway 条件、Envoy
访问日志是北段;Cilium 第 12 篇的 Hubble / map pressure /
encrypt status
是南段。升级窗口里先重跑哪一类门禁,写进变更单,不要「先重启两边」。
工单改派(语义模板)
北段关闭、改派南段时,工单里应留下可核对字段,而不是「看起来像 CNI」:
- 北段关闭句:写明 Gateway/Route
的条件类型与 reason、Envoy 访问日志的
response_code/response_code_details(或「本 hop 无 5xx / 非direct_response」)。未填这一句,南段值班有权把单打回。
- 切换点:写明流量离开 Envoy 后的下一跳是
ClusterIP、Headless、还是直连 Pod IP。这决定南段先走 Cilium
轴四(Service)还是轴二/三(identity)。
- 四元组快照:CNI
模式、KPR、加密、南北向实现——从变更单抄,不现场猜。
- 禁止粘贴:不要把 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。教训不是「不要用网关」,而是:
- 南北向问题不能假设总有
Policy denied文案。
- 复现与否证要固定 CNI
模式、KPR、加密、Gateway
四元组,禁止只改一维却宣称「网关坏了」或「CNI 坏了」。
- 完整矩阵测试留给平台验收;两边系列都不伪造结果。
本系列启用的是独立 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 叶。
上线检查单(语义级,不提供「复制即通过」的命令输出):
- 北段基线已绿:第 13
篇轴一至四在试验命名空间有 runbook(至少覆盖
ResolvedRefs失败导致的direct_response与一次 NACK 口径)。
- 四元组写死:上表四维有值;南北向实现只标明一个默认。
- 南段基线已绿:无网关时 Cilium
轴一至四已有 Hubble/map 口令(Cilium 15 检查单第 1
项)。
- 回程与健康检查:外部 LB → EG 监听端口与
hostNetwork/NodePort 无冲突;健康检查路径不依赖尚未附着的
HTTPRoute。
- 回滚面:摘掉 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)
- Cilium v1.20.0 第 15 篇:Gateway 边界(北段/南段证据包、四元组、组合黑洞边界)
- Cilium v1.20.0 Gateway API Support:KPR 前置(嵌入实现);本篇独立 EG 不继承为硬前置
- Envoy Gateway v1.9.0 Configuration
Issues:
direct_response500 - 本系列 01、13
实验台账
- 无 Hubble / EG 联合复现;组合黑洞仅作风险边界引用,不冒充实测。
- 启用接缝的验收应至少覆盖:同节点后端、跨节点后端、加密开/关各一组连通性,并保留北段与南段证据包各一份(可删减,须来自本环境)。
→ 上一篇:对照替代路径 · 系列目录 · 下一篇:选型收束
读完这篇,下一步读什么
优先读同系列或同问题的下一篇,把单篇消费变成主题集群。
【Cilium / eBPF】Gateway API / 南北向边界:与本系列东西向焦点的分工
厘清 Cilium Gateway API 南北向入口与本系列东西向 eBPF 数据面的分工:能力边界、排障坐标分叉、加密与 KPR 组合风险;标明本系列刻意不写的 Gateway 全书内容。
【Envoy Gateway】南北向全景:缺口、五轴坐标系与 16 篇路线
相对 Gateway API 产品教程、Cilium 南北向边界、Envoy 消费侧与 istiod 翻译,钉清 Envoy Gateway v1.9.0 控制面内核缺口;定义附着/status、IR、xDS、Envoy 数据面、入口之后东西向五条轴,给出 16 篇阅读路线。
【Envoy Gateway】对照替代路径:Cilium Gateway、Istio、Ingress 与其他实现
从翻译内核与排障坐标对照 Envoy Gateway v1.9.0 与 Cilium Gateway、Istio/GAMMA、Ingress 注解模型,以及 Contour / NGINX Gateway Fabric 实现叶;机制差表,不做延迟排行榜。
【Envoy Gateway】选型收束与开放问题:排除树、南北向叶关闭与系列边界
用机制排除树收束何时不该跑 Envoy Gateway;回收 Cilium 16 与 Tetragon 16 的南北向悬空指针;列出 status 当 SLO、IR 对账、remote infra、与 Cilium 四元组联合 runbook 等开放问题;关闭本系列续作边界。