Gateway API 是什么
Gateway API 是 Kubernetes 新一代的入口与网关标准,用一组 CRD 描述流量入口:GatewayClass 声明由哪个实现来服务,Gateway 描述监听器、端口、证书等入口资源,HTTPRoute 描述域名与路径到后端服务的路由规则。相比 Ingress,它把「平台团队管入口」与「应用团队管路由」的职责分开,表达能力也更强;生态仍在演进,选型前需要确认所用实现的支持程度。
基本信息
| 提供形式 | 以 CRD 扩展提供,集群未安装则不显示相关资源 |
|---|---|
| 核心对象 | GatewayClass、Gateway、HTTPRoute |
| 职责划分 | 平台团队管入口资源,应用团队管路由规则 |
| 组名 | gateway.networking.k8s.io |
| 与 Ingress 的关系 | 可以并存,支持逐步迁移 |
典型使用场景
- 新集群选型:入口方案评估时对比表达力与生态支持
- 多团队协作:平台提供入口、业务自助配置路由
- 复杂路由需求:需要按请求头、权重等更细粒度分流
- 迁移评估:评估从 Ingress 迁移所需改动与风险
- 职责治理:把入口资源与应用路由的权限边界分开
HTTPRoute 示例
HTTPRoute 示例
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: web-route
namespace: prod
spec:
parentRefs:
- name: shared-gateway # 引用平台提供的 Gateway
hostnames: ["app.example.com"]
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: web
port: 80查看资源
查看资源
kubectl get gatewayclass
kubectl get gateway -A
kubectl get httproute -A
kubectl api-resources | grep gateway.networking.k8s.io
kubectl describe httproute web-route -n prod | tail -20 # 看状态条件与引用是否成功对象分工
| 对象 | 归属 | 作用 |
|---|---|---|
| GatewayClass | 基础设施团队 | 声明由哪个实现来服务 |
| Gateway | 平台团队 | 监听器、端口、证书与入口地址 |
| HTTPRoute | 应用团队 | 域名与路径到后端服务的路由 |
| 与 Ingress 对比 | 跨团队职责 | 分层更清晰,表达能力更强 |
不同实现支持的 CRD 版本与特性差异较大:迁移前做一次能力核对,不要按某个实现的行为去推断通用语义。
Gateway 一般由平台统一管理:应用团队直接修改会碰到权限与职责边界问题,路由规则写在 HTTPRoute 里更合适。
排查路由不生效时先看 HTTPRoute 的状态条件:父级引用是否被接受、条件里的原因是定位权限、实现能力还是配置错误的第一手线索。