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 将网络配置分解为不同关注点,实现配置解耦和角色分离。
{width=609 height=452}
为不同场景定义了四类角色:
{width=2735 height=1519}
Gateway API 在表现力、扩展性、角色分离、通用性、基础设施共享和类型化后端引用等方面均有显著提升,并支持跨命名空间路由绑定。
Gateway API 由多种资源组成,分别承担不同的网络管理职责。
定义网关类,由基础设施提供方创建,支持参数化配置。
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: cloud-gateway
spec:
controllerName: "example.com/gateway-controller"
description: "云服务提供商的网关实现"
描述外部流量如何路由到集群服务,支持多监听器和灵活的 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"
用于 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
{width=800 height=600}
| 路由类型 | OSI 层 | 路由鉴别器 | TLS 支持 | 主要用途 |
|---|---|---|---|---|
| HTTPRoute | 第 7 层 | HTTP 协议内容 | 仅终止 | HTTP/HTTPS 应用路由 |
| GRPCRoute | 第 7 层 | gRPC 方法和服务 | 仅终止 | gRPC 应用路由 |
| TLSRoute | 第 4-7 层 | SNI 和 TLS 属性 | 直通/终止 | 基于 SNI 的 TLS 路由 |
| TCPRoute | 第 4 层 | 目的端口 | 直通/终止 | TCP 流量转发 |
| UDPRoute | 第 4 层 | 目的端口 | 不支持 | UDP 流量转发 |
用于启用跨命名空间引用,细粒度控制资源访问。
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
Gateway API 支持下游(客户端到网关)和上游(网关到后端服务)的 TLS 配置,支持终止、透传、通配符证书和跨命名空间证书引用。
支持流量分割、请求过滤、重定向等高级流量管理能力,并可通过自定义后端、过滤器和路由类型实现扩展。
Gateway API 作为 Kubernetes 网络的下一代标准,提供了比 Ingress 更强大、更灵活的流量管理能力。通过其面向角色的设计、丰富的路由类型和强大的扩展机制,Gateway API 能满足从简单 Web 应用到复杂微服务架构的各种网络需求。建议新项目直接采用 Gateway API,现有项目可逐步迁移以获得更好功能和扩展性。