2. 云原生网关基础:Kubernetes Ingress / Gateway API 核心概念与架构
在云原生安全运维体系中,网关是南北向流量的第一道防线。Kubernetes 生态提供了两代网关抽象:Ingress(传统)与 Gateway API(新一代)。理解它们的核心概念与架构,是设计 WAF 策略与 OTel 协同回滚护栏的前提。
2.1 Ingress:传统七层网关抽象
Ingress 是 Kubernetes 内置的 API 对象,用于管理集群外部访问集群内服务的 HTTP/HTTPS 路由。它定义了请求如何从集群外到达 Service,但本身不实现流量转发,需要配合 Ingress Controller(如 Nginx、Traefik、HAProxy)才能生效。
| 组件 | 角色 | 说明 |
|---|---|---|
| Ingress 资源 | 路由规则声明 | 定义 host、path、后端 Service 及 TLS 配置 |
| Ingress Controller | 流量代理与规则执行 | 监听 Ingress 资源变化,动态更新反向代理配置 |
| Service | 后端负载均衡 | 将流量分发到 Pod 实例 |
运维要点:Ingress 的规则变更(如新增路由、修改 TLS 证书)由 Controller 异步生效,期间可能出现配置不一致窗口。WAF 策略若绑定在 Ingress 注解上,回滚时需要同时回退 Ingress 资源与 Controller 配置。
2.2 Gateway API:新一代、角色分离的网关标准
Gateway API(v1beta1 / v1)是 Kubernetes SIG-Network 推出的下一代网关抽象,解决了 Ingress 在角色权限、协议扩展、跨团队协作上的不足。它通过 GatewayClass、Gateway、HTTPRoute 三层资源实现角色分离。
| 资源类型 | 管理角色 | 核心职责 |
|---|---|---|
| GatewayClass | 基础设施管理员 | 定义网关实现类型(如 istio、contour、nginx) |
| Gateway | 集群管理员 | 声明网关实例的监听端口、TLS、容量 |
| HTTPRoute | 应用开发者 | 定义流量匹配规则、后端转发、过滤器 |
安全优势:Gateway API 原生支持 过滤器(Filter) 机制,可在 HTTPRoute 中嵌入 WAF 策略、速率限制、请求改写等安全逻辑,无需依赖 Controller 注解。这使得策略与路由解耦,回滚时只需回退 HTTPRoute 资源,不影响网关实例本身。
2.3 核心架构对比:Ingress vs Gateway API
以下 SVG 图展示了两种网关架构在流量路径与策略绑定上的核心差异。
2.4 关键差异与运维影响
| 维度 | Ingress | Gateway API |
|---|---|---|
| 角色分离 | 无,单一资源定义所有 | GatewayClass / Gateway / HTTPRoute 三层分离 |
| 策略绑定 | 依赖 Controller 注解(非标准) | 原生 Filter 机制,标准 API 字段 |
| 协议支持 | HTTP/HTTPS 为主,扩展困难 | HTTP、HTTPS、gRPC、TCP、UDP 等 |
| 回滚粒度 | 需同时回退 Ingress 资源 + Controller 配置 | 仅回退 HTTPRoute 资源,Gateway 保持不变 |
| WAF 集成 | 通过注解或自定义 CRD 注入 | 通过 HTTPRouteFilter 原生注入,可观测性更强 |
2.5 回滚护栏视角:为什么选择 Gateway API
在《WAF 策略与 OTel 协同的云原生网关回滚护栏》剧本中,Gateway API 是更优的基础选择:
- 策略与实例解耦:WAF 过滤器作为 HTTPRoute 的一部分,回滚路由时自动回退安全策略,无需操作网关实例。
- 精细化回滚范围:可按路由粒度回滚,避免全量回退影响其他正常服务。
- 原生可观测性:Gateway API 资源状态可通过 Status 字段直接反映配置生效情况,便于 OTel 采集回滚事件。
- 多团队协作:应用开发者管理 HTTPRoute,平台团队管理 Gateway,安全团队通过 Admission Webhook 校验 WAF 过滤器,职责清晰。
迁移注意:若现有环境已深度使用 Ingress + 自定义注解实现 WAF 策略,迁移至 Gateway API 需要重新设计过滤器链。建议采用 渐进式迁移:先在同一集群中部署 Gateway API Controller,将新服务接入新架构,旧服务保持 Ingress,待验证稳定后再全面切换。
2.6 核心概念速查表
| 概念 | API 版本 | 作用域 | 是否支持 WAF 原生注入 |
|---|---|---|---|
| Ingress | networking.k8s.io/v1 | 命名空间 | 否(需注解) |
| GatewayClass | gateway.networking.k8s.io/v1 | 集群 | — |
| Gateway | gateway.networking.k8s.io/v1 | 命名空间 | — |
| HTTPRoute | gateway.networking.k8s.io/v1 | 命名空间 | 是(通过 Filter) |
| ReferenceGrant | gateway.networking.k8s.io/v1beta1 | 命名空间 | — |