本系列主线是东西向:Pod→Pod 经 identity、策略 map、Service BPF LB、可选加密的路径与失败模式。Cilium v1.20.0 发行说明把 Gateway API 推到 v1.6.1 量级,并带上 BackendTLSPolicy、更多 HTTPRoute 能力——那是南北向产品面。若把两者写成同一套排障口令,值班会在「Hubble Policy denied」与「Gateway 监听器/Envoy 路由」之间来回空转。
本文是第 15 篇:钉边界与分工,不是 Gateway API 教程,也不重写 Envoy Filter/xDS 内核。读完应能回答:何时问题仍在本系列五轴内,何时必须离开东西向坐标系。
本文是「Cilium / eBPF 数据面内核」系列第 15 篇(共 16 篇)。→ 系列目录
篇目 核心内容 第 14 篇 · 对照替代路径 Calico / kube-proxy / sidecar / Ambient 第 15 篇 · Gateway 边界 南北向 vs 东西向 第 16 篇 · 选型收束 排除树与开放问题
版本锚定:Cilium v1.20.0;嵌入 Envoy 与 Gateway API 随该发行说明(叙述量级:Envoy v1.37.x、Gateway API v1.6.1)。第三方升版须显式标注。
一、先画南北与东西,再谈开关
北 → 南:集群外客户端 → Gateway/Ingress/LB →(可选)L7 代理 → Service/Pod
东 ↔ 西:Pod →(identity/policy/service/encrypt)→ Pod
| 平面 | 典型对象 | 本系列覆盖 | 本篇边界 |
|---|---|---|---|
| 东西向 L3/L4 | Endpoint、Identity、CNP、KPR、WireGuard | 01–13 主线 | 继续用五轴 |
| 东西向可选 L7 | 节点/Pod Envoy、mesh 边界 | 第 10 篇点到为止 | 不重写 Filter |
| 南北向 L7 入口 | Gateway、HTTPRoute、GRPCRoute、TLSRoute… | 不展开配置菜谱 | 只划与东西向的接缝 |
| 南北向 L4 入口 | LB Service、NodePort、host 网络 | 第 6 篇路径矩阵 | 与 Gateway 监听器区分 |
flowchart LR
client["External client"]
gw["Gateway / Ingress"]
svc["Service / BPF LB"]
pod["Pod endpoint"]
client -->|"north-south L7/L4"| gw
gw --> svc
svc -->|"east-west datapath"| pod
pod2["Pod A"] -->|"east-west"| pod3["Pod B"]
口令:包还在集群外进入监听器时,先问 Gateway/Envoy;包已成为 Pod 身份之间的东西向流时,先问本系列五轴。
二、Cilium Gateway API 在 v1.20 里是什么(机制级)
发行说明(v1.20.0)将 Cilium 的 Gateway API 支持推进到上游 v1.6.1 能力面,并包括例如:
- BackendTLSPolicy:网关到后端的 TLS
与证书校验。
- HTTPRoute 侧更多流量控制(如
CORS、额外重定向码等——以发行说明为准)。
- 与嵌入 Envoy 版本绑定的监听器/路由实现细节。
机制含义,而不是菜谱含义:
- 南北向 L7 的数据面内核是用户态
Envoy(嵌入),不是「另一个 BPF map 里的 HTTP
路由器」。
- 经 Gateway
进入集群后,后端方向仍可能再走 Cilium 的
Service/identity/加密路径——排障常要两跳坐标系。
- Gateway 的身份在 Hubble 里常以保留
identity(文档示例中的
ingress/world等)出现;观测时不要把入口代理身份与业务 Pod 身份混为一谈(第 8、12 篇)。
站内 Envoy 数据面系列 回答「Filter/xDS/上游池如何失败」;本系列回答「身份与 BPF 路径如何失败」。Gateway 开启时,一次用户请求可能串联两者。
三、与东西向焦点的接缝
3.1 仍然落在本系列五轴内的症状
| 症状 | 为何仍是东西向题 |
|---|---|
| Gateway 已 200,服务网格内 A→B 偶发 deny | 轴二/三;与监听器无关 |
| 经 ClusterIP 访问后端失败,绕过 Gateway 直连也失败 | 轴四/五或轴一 |
| 同节点通、跨节点挂,且未改 Gateway | 先加密/路由,后才怀疑入口 |
3.2 必须离开本系列主线的症状
| 症状 | 应去的坐标 |
|---|---|
| HTTPRoute 未附着、监听器未编程、TLS 证书未就绪 | Gateway API 控制器 / Cilium Gateway 文档;Envoy admin |
| 仅 Host header/路径错误导致 404,Hubble 显示入口已转发 | L7 路由配置,不是 NetworkPolicy |
| xDS/NACK、Envoy cluster 耗尽 | Envoy 排障 方言 |
| 外部 LB → NodePort 与 Gateway hostNetwork 的端口冲突 | 南北向部署拓扑,不是 identity 漂移 |
3.3 危险交叉区:组合回归
社区在特定组合上报告过:Gateway API + 云 CNI chaining + native routing + WireGuard node encryption 等条件下,跨节点南北向流量黑洞,且 Hubble 不见 drop(见公开 issue 讨论;v1.20 预发与补丁线有修复叙事)。教训不是「不要用 Gateway」,而是:
- 南北向问题不能假设总有
Policy denied文案。
- 加密路径表(第 9、13 轴五)与 host routing 模式必须写进
Gateway 上线检查单。
- 复现与否证要固定 CNI 模式、KPR、加密、Gateway 四元组,禁止只改一维却宣称「Gateway 坏了」。
本系列把该交叉区标为已知工程间隙:完整矩阵测试留给平台验收,不在此伪造结果。
上线检查单(语义级)
启用 Cilium Gateway 前,至少用文字确认下列项(结果记入变更单;本篇不提供「复制即通过」的命令输出):
- 东西向基线已绿:第 13 篇轴一至四在无
Gateway 时已有 runbook。
- 四元组写死:CNI chaining
与否、native/tunnel、KPR 开闭、加密模式(含是否
node-to-node)。
- 身份可读:能用 Hubble 区分
world/ingress(或当前保留 identity)与后端 Pod identity。
- 回程与健康检查:外部 LB → Gateway
监听端口与 hostNetwork/NodePort
无冲突;健康检查路径不依赖尚未附着的 HTTPRoute。
- 回滚面:关掉 Gateway 开关或摘除 HTTPRoute 后,东西向五轴仍可独立值班——禁止「南北向与 CNI 绑死无法回滚」。
缺第 1 项时开 Gateway,等于在未知 BPF 方言上再叠 Envoy 方言。缺第 2 项时出黑洞,复盘只能猜。
四、本系列明确不写什么
| 不写 | 原因 | 指针 |
|---|---|---|
| GatewayClass/HTTPRoute YAML 百科 | 菜谱随上游 CRD 快速变 | Cilium Gateway API 官方文档 |
| Envoy Filter 链与 xDS 经济学 | 已有 Envoy 系列 | envoy/ |
| Ingress 注解动物园 | 历史包袱;与东西向内核无关 | 网关产品文 / network/60 |
| 云厂商 ALB/NLB 控制台步骤 | 环境绑定 | 厂商文档 |
| 「Gateway 比 Ingress 快多少」 | 无统一口径实测 | 禁止 |
写:南北向与东西向的责任面、观测身份差异、加密/KPR 组合风险、何时把工单移出本系列。
五、观测与值班:两套仪表盘
| 问题 | 先看 | 不要只看 |
|---|---|---|
| 外部客户 5xx / 超时 | Gateway/Envoy 指标与访问日志;Route 状态 | 只看 cilium_endpoint_state |
| 已过 Gateway,后端互调失败 | Hubble 后端 identity;第 13 篇 | 只改 HTTPRoute 重试 |
| 入口 identity 流量异常 | Hubble --identity 对 world/ingress |
当成业务 Pod 策略 |
第 12 篇的最小仪表盘对东西向值班仍成立;启用 Cilium Gateway 的平台应追加南北向一类信号(监听器就绪、BackendTLS、嵌入 Envoy 指标),并在 runbook 写明升级时先重跑哪一类门禁。
一次请求的两跳证据包
对「外部客户超时」类工单,最小证据包建议拆成两段,避免混写:
| 段 | 必须有的字段 | 归属 |
|---|---|---|
| 北段 | Gateway/Route 状态、嵌入 Envoy 失败旗标或访问日志状态码、监听器是否编程 | 南北向 / Envoy 方言 |
| 南段(入集群后) | 后端 Pod identity、Hubble verdict/reason、是否经 ClusterIP、是否应加密 | 本系列五轴 |
只有北段没有南段,会把后端 CNP deny 误判成「网关坏了」。只有南段没有北段,会把证书/路由错误误判成「Cilium 丢包」。第 13 篇的「一次否证一轴」在跨平面时升级为「一次否证一段」。
站内 network/60 从产品与协议勾选谈网关;Envoy 16 从排除树谈要不要用户态 L7。本篇只补:在已经选了 Cilium 的集群里,Gateway 如何接到东西向坐标系而不污染它。
六、与选型终章的关系
第 16 篇排除树问的是「要不要 Cilium eBPF 东西向内核」。Gateway 是正交开关:
- 可以:Cilium CNI + 外部 Envoy Gateway / 其他
Ingress。
- 可以:Cilium CNI + Cilium Gateway。
- 可以:其他 CNI + Cilium 不负责 Gateway(视支持矩阵)。
「选了 Cilium」≠「必须用 Cilium Gateway」;「用了 Cilium Gateway」≠「可以不会东西向五轴」。ADR 应分两行写:东西向数据面与南北向入口实现。
与 Ingress 历史包袱
许多集群仍并存 Ingress 与 Gateway
API。本系列不比较两者的注解生态或迁移菜谱,只要求值班地图标明:当前外部流量默认进哪一类对象。若默认仍是
Ingress,却把 Hubble 里的 ingress identity
一律解释成 Gateway——字段同名不等于实现同栈。升级到 Cilium
Gateway 时,把旧 Ingress 控制器的排障口令从 runbook
删除或降级,避免两套南北向同时「好像都对」。
东西向五轴不因 Ingress/Gateway 切换而改写;改写的是北段证据包。平台若希望减少心智负担,应选定一个南北向实现作为默认,并把另一个标为遗留,而不是长期双默认。
七、谱系、争论与开放问题
谱系
南北向 L7 入口的学术/工程谱系走在用户态代理与 API 网关传统上(与 Envoy/Nginx/HAProxy 系列同源);东西向身份策略走在 eBPF 可编程数据面传统上。Cilium 把两者放进同一项目,方便采购与统一发行,但没有消除两套内核假设。本篇的工作是防止「统一品牌」被误读成「统一排障坐标」。对值班而言,品牌统一最多缩短工单路由;真正缩短 MTTR 的是北段/南段证据包能不能在五分钟内填完,以及填完后能否指到唯一责任面。
争论:CNI 是否应内置 Gateway
A 侧:同一供应商减少胶水;身份从
world→ingress→Pod 可观测链路更短。
B 侧:扩大爆炸半径;南北向 L7 与东西向 BPF
的发布节奏耦合,组合缺陷更难隔离。
本系列不站队;要求平台在启用 Cilium Gateway
时显式接受「双坐标」编制,或明确把南北向外包给独立网关团队。若编制上只有「会点
HTTPRoute」的人、没有人会读第 13 篇,启用 Gateway
只会把东西向事故伪装成路由配置问题,平均定位时间上升而不是下降。
开放问题
- 南北向与东西向排障坐标能否统一到单一证据包格式:例如强制包含「入口身份
+ 后端身份 + 是否过加密路径」三字段。可检验:用同一
postmortem 模板跑两起真实事故。
- BackendTLSPolicy
与透明加密叠层时的责任划分:网关到后端 TLS 与节点
WireGuard 同时开启时,延迟税与失败模式如何写入
SLO?需自测;正文不引用虚构百分比。
- hostNetwork Gateway 与 NodePort 健康检查的责任面:在启用 hostNetwork 时,外部 LB 探测失败应先查监听器还是先查节点防火墙?需要可重复的分层否证顺序,避免南北向与主机网络策略互相甩锅。
参考资料
官方(A 级)
- Cilium v1.20.0 Release notes:Gateway API v1.6.1、BackendTLSPolicy、嵌入 Envoy 版本
- Cilium 文档:Gateway API / Service Mesh(以
docs.cilium.io/en/v1.20/现行路径为准) - Kubernetes SIG Network:Gateway API 规范(版本随 CRD)
站内对照
实验台账
- 无 Gateway 延迟对比;组合黑洞仅作风险边界引用,不冒充实测。
- 启用 Gateway 的验收应至少覆盖:同节点后端、跨节点后端、加密开/关各一组连通性,并保留北段与南段证据包各一份(可删减,须来自本环境)。
→ 上一篇:对照替代路径 · 系列目录 · 下一篇:选型收束
读完这篇,下一步读什么
优先读同系列或同问题的下一篇,把单篇消费变成主题集群。
【Cilium / eBPF】东西向包路径:Pod→Pod 停顿点与 netfilter 旁路
沿 Cilium v1.20 Life of a Packet 钉清同节点与跨节点东西向停顿点:Endpoint Policy、Service、socket 加速、加密与 L7 重定向;说明与 netfilter/kube-proxy 旁路关系,并为 kube-proxy 替代篇铺路。
【Cilium / eBPF】L7 与 Mesh 边界:节点 Envoy、sidecar 与 Ambient
划清 Cilium v1.20 可选 L7 路径:BPF 何时重定向节点 Envoy、与 sidecar / Istio Ambient 的职责边界及失败面;不重写 Ambient 数据面,不把 Cilium 写成全能网格。
【Cilium / eBPF】对照替代路径:Calico、kube-proxy、Envoy sidecar 与 Ambient
从机制排除而非跑分出发,对照 Cilium eBPF 数据面与 Calico、kube-proxy iptables/IPVS、Envoy sidecar、Istio Ambient;链接 k8s-network/12–13、envoy/16、haproxy/14,不做延迟排行榜。
【Cilium / eBPF】选型收束:排除树、开放问题与系列边界关闭
用机制排除树收束 Cilium eBPF 相对 Calico、kube-proxy、Envoy sidecar、Ambient 的选型;回收 Envoy/HAProxy 终章的 eBPF 叶;列出系列级开放问题;以 ADR 友好语言关闭数据面续作边界。