Gateway API

Gateway API 作为 Kubernetes 网络流量管理的现代标准,兼具协议多样性、角色分离和强大扩展性,已成为 Ingress 的理想替代方案。

概述

Gateway API 是由 Kubernetes SIG-NETWORK 管理的开源项目,旨在为 Kubernetes 生态系统提供现代化的服务网络 API。自 2023 年 GA 以来,Gateway API 已支持多协议路由、角色分离和灵活策略配置,成为 Ingress 的下一代替代方案。

注意
Gateway API 作为替代 Ingress 的下一代资源,既可以处理南北向流量,还可以处理东西向流量。关于 Gateway API 的详细介绍和发展趋势,请参考 Gateway API:Kubernetes 和服务网格入口中网关的未来

目前已有大量网关和服务网格项目支持 Gateway API,详细的 支持状况 可在官方文档中查看。

设计理念

Gateway API 通过分层架构和面向角色的接口设计,提升了网络配置的表现力和可扩展性。

分层架构

Gateway API 将网络配置分解为不同关注点,实现配置解耦和角色分离。

图 1: Gateway API 的分层架构
图 1: Gateway API 的分层架构

面向角色的设计

为不同场景定义了四类角色:

  • 基础设施提供方:提供 GatewayClass 实现
  • 集群运维人员:管理 Gateway 实例
  • 应用开发者:定义路由需求
  • 应用管理员:配置应用级策略
图 2: Gateway API 管理时的角色划分
图 2: Gateway API 管理时的角色划分

相比 Ingress 的优势

Gateway API 在表现力、扩展性、角色分离、通用性、基础设施共享和类型化后端引用等方面均有显著提升,并支持跨命名空间路由绑定。

资源模型详解

Gateway API 由多种资源组成,分别承担不同的网络管理职责。

GatewayClass

定义网关类,由基础设施提供方创建,支持参数化配置。

apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: cloud-gateway
spec:
  controllerName: "example.com/gateway-controller"
  description: "云服务提供商的网关实现"

Gateway

描述外部流量如何路由到集群服务,支持多监听器和灵活的 TLS 配置。

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: production-gateway
  namespace: gateway-system
spec:
  gatewayClassName: cloud-gateway
  listeners:
  - name: http
    port: 80
    protocol: HTTP
    allowedRoutes:
      namespaces:
        from: Selector
        selector:
          matchLabels:
            environment: production
  - name: https
    port: 443
    protocol: HTTPS
    hostname: "*.example.com"
    tls:
      mode: Terminate
      certificateRefs:
      - kind: Secret
        name: wildcard-tls-cert
  addresses:
  - type: NamedAddress
    value: "production-lb"

Route 资源

HTTPRoute

用于 HTTP/HTTPS 流量的路由和流量分割。

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: api-route
  namespace: production
spec:
  parentRefs:
  - name: production-gateway
    namespace: gateway-system
  hostnames:
  - api.example.com
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /v1/
    - headers:
      - name: X-API-Version
        value: v1
    filters:
    - type: RequestHeaderModifier
      requestHeaderModifier:
        add:
        - name: X-Forwarded-Host
          value: api.example.com
    backendRefs:
    - name: api-v1-service
      port: 8080
      weight: 90
    - name: api-v1-canary-service
      port: 8080
      weight: 10
  - matches:
    - path:
        type: PathPrefix
        value: /v2/
    backendRefs:
    - name: api-v2-service
      port: 8080
图 3: 流量经过网关和 HTTPRoute 发送到服务中的过程
图 3: 流量经过网关和 HTTPRoute 发送到服务中的过程

其他路由类型

  • GRPCRoute:支持基于 gRPC 方法的匹配
  • TLSRoute:基于 SNI 的 TLS 路由
  • TCPRoute/UDPRoute:四层流量路由
路由类型OSI 层路由鉴别器TLS 支持主要用途
HTTPRoute第 7 层HTTP 协议内容仅终止HTTP/HTTPS 应用路由
GRPCRoute第 7 层gRPC 方法和服务仅终止gRPC 应用路由
TLSRoute第 4-7 层SNI 和 TLS 属性直通/终止基于 SNI 的 TLS 路由
TCPRoute第 4 层目的端口直通/终止TCP 流量转发
UDPRoute第 4 层目的端口不支持UDP 流量转发
表 1: Gateway API 路由类型对比

ReferenceGrant

用于启用跨命名空间引用,细粒度控制资源访问。

apiVersion: gateway.networking.k8s.io/v1beta1
kind: ReferenceGrant
metadata:
  name: allow-gateway-access
  namespace: production
spec:
  from:
  - group: gateway.networking.k8s.io
    kind: HTTPRoute
    namespace: app-team
  to:
  - group: ""
    kind: Service
    name: production-api

路由绑定与限制机制

路由绑定需满足 parentRefs、监听器允许、命名空间策略和主机名匹配等条件。可通过监听器配置主机名、命名空间和路由类型限制。

策略附件系统

策略附件(Policy Attachment)允许将自定义策略(如超时、重试、限流等)附加到 Gateway API 资源上,支持 default/override 层级继承。

apiVersion: networking.example.com/v1alpha1
kind: RateLimitPolicy
metadata:
  name: api-rate-limit
spec:
  default:
    requestsPerSecond: 100
  override:
    requestsPerSecond: 1000
  targetRef:
    group: gateway.networking.k8s.io
    kind: HTTPRoute
    name: api-route

TLS 配置

Gateway API 支持下游(客户端到网关)和上游(网关到后端服务)的 TLS 配置,支持终止、透传、通配符证书和跨命名空间证书引用。

流量管理与高级功能

支持流量分割、请求过滤、重定向等高级流量管理能力,并可通过自定义后端、过滤器和路由类型实现扩展。

最佳实践

  • 网关分层部署,区分外部与内部流量
  • 安全配置,限制路由访问和命名空间
  • 启用可观测性,集成监控与日志
  • 迁移建议:并行部署、逐步迁移、验证切换

总结

Gateway API 作为 Kubernetes 网络的下一代标准,提供了比 Ingress 更强大、更灵活的流量管理能力。通过其面向角色的设计、丰富的路由类型和强大的扩展机制,Gateway API 能满足从简单 Web 应用到复杂微服务架构的各种网络需求。建议新项目直接采用 Gateway API,现有项目可逐步迁移以获得更好功能和扩展性。

参考文献

文章导航

章节内容

这是章节的内容页面。

章节概览

评论区