Gateway API

Gateway API 是 Kubernetes 社区推出的用于配置和管理网关的新一代 API,它是 Ingress 资源的演进版本,提供了更强大、更灵活和更具表达力的流量管理能力。

什么是 Gateway API?

Gateway API 是一个由 Kubernetes 网络特殊兴趣小组 (SIG-NETWORK) 维护的开源项目,旨在通过提供表达性强、可扩展和面向角色的接口来改进服务网络。

Gateway API 解决了传统 Ingress 的以下限制:

  • 表达能力有限:Ingress 只能处理简单的 HTTP 路由

  • 可扩展性差:依赖于特定控制器的注解来扩展功能

  • 角色混乱:缺乏清晰的角色分离和权限边界

核心概念

Gateway API 引入了以下核心资源:

Gateway

Gateway 描述了如何将流量转换为集群内的服务。它定义了监听器,每个监听器定义一个端口、协议和主机名。

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: example-gateway
  namespace: default
spec:
  gatewayClassName: example-class
  listeners:
  - name: http
    port: 80
    protocol: HTTP
    hostname: "*.example.com"

GatewayClass

GatewayClass 定义了一组网关,这些网关共享公共配置和行为。它类似于 StorageClass,但用于网关。

HTTPRoute

HTTPRoute 定义了 HTTP 请求如何路由到后端服务。

Gateway API v1.3.0 新特性

标准通道特性

基于百分比的请求镜像

v1.3.0 引入了基于百分比的请求镜像功能,允许将指定百分比的请求镜像到另一个后端:

实验性通道特性

CORS 过滤

新增的 CORS 过滤器支持跨域资源共享配置:

重试预算 (XBackendTrafficPolicy)

重试预算功能限制客户端在服务端点间的重试行为:

XListenerSets

XListenerSets 提供了标准化的 Gateway 监听器合并机制:

Inference Extension(AI/ML 推理扩展)

Gateway API Inference Extension 是专为生成式 AI 和大语言模型 (LLM) 推理工作负载设计的扩展,提供了智能路由和负载平衡能力。

核心组件:

InferencePool - 定义运行模型服务器的 Pod 池:

InferenceModel - 用户面向的模型端点:

主要特性:

  • 模型感知路由:基于模型类型和状态进行智能路由

  • 请求优先级:支持每请求的重要性级别设置

  • 安全模型发布:支持金丝雀发布和 A/B 测试

  • 优化负载平衡:基于实时指标进行 GPU 资源优化

性能优势:

  • 降低 AI/ML 工作负载延迟

  • 提高 GPU 利用率

  • 标准化 AI 服务路由方式

  • 支持前缀缓存感知的负载平衡

角色分离

Gateway API 设计了清晰的角色分离:

  • 基础设施提供者:管理 GatewayClass 和基础设施

  • 集群操作员:管理 Gateway 资源和网络策略

  • 应用开发者:管理 Route 资源和应用流量

支持的协议

Gateway API 支持多种协议:

  • HTTP/HTTPS:通过 HTTPRoute 资源

  • TLS:通过 TLSRoute 资源

  • TCP:通过 TCPRoute 资源

  • UDP:通过 UDPRoute 资源

  • gRPC:通过 GRPCRoute 资源

与 Ingress 的对比

特性
Ingress
Gateway API

协议支持

仅 HTTP/HTTPS

HTTP/HTTPS/TCP/UDP/TLS/gRPC

角色分离

清晰的角色分离

可扩展性

通过注解

原生 API 扩展

表达能力

有限

丰富的流量管理能力

类型安全

部分

完全类型安全

兼容性

  • Kubernetes 版本:要求 Kubernetes 1.26 或更高版本

  • API 稳定性:标准通道功能已达到 v1 稳定版本

  • 实现:Envoy Gateway、Istio、Cilium、Airlock 等多个实现

迁移指南

从 Ingress 迁移

  1. 安装 Gateway API CRDs

  1. 创建 GatewayClass

  1. 创建 Gateway

  1. 将 Ingress 转换为 HTTPRoute

最佳实践

  1. 渐进式迁移:先在测试环境验证,再逐步迁移生产环境

  2. 角色分离:明确定义不同角色的职责和权限

  3. 监控观察:部署适当的监控和日志记录

  4. 安全配置:使用 TLS 终止和适当的安全策略

  5. 性能测试:验证新配置的性能表现

参考文档

最后更新于