当前位置: 首页 > news >正文

10-Gateway API

Gateway API

概念引入

在文章 03 中,你学了 Ingress——K8s 的"大门保安",负责根据域名和路径把流量分发到不同 Service。但 Ingress 有几个痛点:

  • 表达能力弱:只支持 HTTP 的 host + path 匹配,想做 header 匹配、权重分流?不行
  • 配置不标准:每个 Ingress Controller 用不同的 annotation,换个 Controller 就要重写配置
  • 角色不分离:运维管网关基础设施,开发管路由规则,但 Ingress 把两者混在一个资源里

Gateway API 就是为了解决这些问题而生的新一代标准。

Gateway API(新)

GatewayClass
(基础设施类型)

Gateway
(网关实例)

HTTPRoute
(路由规则)

Ingress(旧)

Ingress
一个资源管所有

角色分离:
运维管 Gateway
开发管 HTTPRoute

原理讲解

Gateway API 的三个核心资源

资源谁管作用类比
GatewayClass基础设施提供商定义网关类型(如 nginx、envoy)“我要买什么型号的门”
Gateway集群运维创建网关实例,定义监听器和端口“把门装在哪里,开几个口”
HTTPRoute应用开发者定义路由规则(路径、header、权重)“进哪个门走哪条路”

路由层(开发管)

基础设施层(运维管)

GatewayClass: nginx

Gateway: my-gateway
监听 :80 和 :443

HTTPRoute: web-route
/ → web-svc

HTTPRoute: api-route
/api → api-svc

HTTPRoute: canary-route
/v2 → v2-svc (20%)
/v2 → v1-svc (80%)

Ingress vs Gateway API 对比

维度IngressGateway API
标准化❌ 各 Controller 用不同 annotation✅ 统一标准,跨 Controller 兼容
路由能力仅 host + pathhost + path + header + query + method
流量分割❌ 不支持✅ 权重分流(金丝雀发布)
角色分离❌ 一个资源✅ 三层分离(Class/Gateway/Route)
协议支持HTTP/HTTPSHTTP/HTTPS/TCP/TLS/gRPC
状态稳定但功能受限GA(正式可用),持续演进

HTTPRoute 的强大能力

apiVersion:gateway.networking.k8s.io/v1kind:HTTPRoutemetadata:name:advanced-routespec:parentRefs:-name:my-gatewaysectionName:httphostnames:-"app.example.com"rules:# 规则 1:按 header 路由-matches:-headers:-name:x-versionvalue:"v2"backendRefs:-name:v2-svcport:80# 规则 2:按权重分流(金丝雀发布)-matches:-path:value:/apibackendRefs:-name:api-v1port:80weight:90# 90% 流量到 v1-name:api-v2port:80weight:10# 10% 流量到 v2# 规则 3:请求重定向-matches:-path:value:/old-pathfilters:-type:RequestRedirectrequestRedirect:path:type:ReplaceFullPathreplaceFullPath:/new-path

迁移路径

大多数 Ingress Controller(Nginx Ingress、Traefik、Kong)已经支持 Gateway API。迁移步骤:

  1. 安装支持 Gateway API 的 Controller
  2. 创建 GatewayClass 和 Gateway
  3. 把 Ingress 规则逐一转换为 HTTPRoute
  4. 验证无误后删除旧 Ingress

动手实验

配套实验位于docs/labs/beginner/gateway-api/

⚠️ 本实验安装 Gateway API CRD(资源定义),但不安装 Gateway Controller(需要额外网络下载镜像)。学习重点是资源结构和角色分离——Gateway 和 HTTPRoute 的定义方式、与 Ingress 的对比。

本实验用 Gateway API 重新实现 Ingress 的路由规则。

步骤 1:安装 CRD 并创建后端服务

cddocs/labs/beginner/gateway-apibashsetup.sh

步骤 2:认识 Gateway 资源

# 查看已创建的 Gatewaykubectl get gateway# 查看 Gateway 的 YAML 定义kubectl describe gateway my-gatewaycatmanifests/gateway.yaml

解读gatewayClassName: nginx指定用哪种网关实现,listeners定义监听的端口和协议。这个资源由运维管理——决定网关实例的规格。

步骤 3:认识 HTTPRoute 资源

# 查看已创建的 HTTPRoutekubectl get httproute# 查看路由规则kubectl describe httproute app-routecatmanifests/httproute.yaml

解读/api → api:5678/ → web:80。这个资源由开发管理——决定路由规则,不需要关心网关是用 nginx 还是 envoy 实现的。

步骤 4:验证后端服务

# 通过 port-forward 直接访问后端(无需网关控制器)kubectl port-forward svc/web8080:80&curl-slocalhost:8080|head-5kill%12>/dev/null kubectl port-forward svc/api8081:5678&curl-slocalhost:8081kill%12>/dev/null

💡 在完整部署中,Gateway Controller 会自动配置代理,你不需要手动 port-forward。这里直接访问后端是为了验证服务可用。

步骤 5:理解流量分割(金丝雀发布)

# 查看权重分流路由定义catmanifests/canary-route.yaml# 创建资源(没有 Controller 不会有实际分流效果,但能学习 API 结构)kubectl apply-fmanifests/canary-route.yaml kubectl get httproute canary-route-oyaml|grep-A10backendRefs

关键字段weight: 80weight: 20——声明式地定义流量比例,不需要 annotation。

步骤 6:清理

bashteardown.sh

自检问题

  1. Gateway API 的三层结构(GatewayClass / Gateway / HTTPRoute)分别由谁管理?
查看答案 **GatewayClass** 由基础设施提供商定义(如 Nginx 提供 nginx GatewayClass)。**Gateway** 由集群运维管理——决定在哪里创建网关实例、监听哪些端口。**HTTPRoute** 由应用开发者管理——定义具体的路由规则。这种分离让运维和开发各司其职,互不干扰。
  1. Ingress 的 annotation 有什么问题?Gateway API 怎么解决的?
查看答案 Ingress 的 annotation 不是标准 API,不同 Controller(Nginx Ingress、Traefik、Kong)用不同的 annotation 实现相同功能。换 Controller 就要改 annotation。Gateway API 是 K8s 官方标准 API,所有兼容的 Controller 都支持相同的 HTTPRoute 语法,换 Controller 不需要改路由配置。
  1. 你的团队要做一个灰度发布(10% 流量到新版本),用 Ingress 和 Gateway API 分别怎么实现?
查看答案 **Ingress**:需要用 Controller 特定的 annotation 实现分流(如 Nginx Ingress 的 `canary` 注解),不可移植。**Gateway API**:直接在 HTTPRoute 的 backendRefs 中设置 `weight: 90` 和 `weight: 10`,标准 API,任何兼容的 Controller 都支持。

下一步

Gateway API 是 Ingress 的未来。你的基础功已经扎实了,接下来进入进阶实战阶段!

🎉恭喜!你已经完成了 K8s Guide 初学者轨道的全部 11 篇文章。

从零基础到能独立部署、排查、运维 K8s 应用——你已经掌握了核心知识。接下来的面试轨道会帮你把这些知识转化为 Offer。


📚本文来自 K8s Guide—— 开源免费的 Kubernetes 中文学习指南

  • 🗺️ 初学者轨道 + 面试轨道,从零基础到拿 Offer 一站式覆盖
  • 🧪 每篇文章配套 Kind 实验脚本,本地一键运行
  • 🔗 本文源码:docs/beginner/20-gateway-api.md

如果对你有帮助,欢迎 Star!github.com/callmebg/k8s-guide

http://www.jsqmd.com/news/1281759/

相关文章:

  • Leaf size is too small for the input dataset 解决办法
  • linux shell 各种括号作用详解()、(())、[]、[[]]、{}
  • 惠州惠城漏水检测维修一站式服务 - 本地正规防水补漏公司精选推荐(2026 最新)全域上门:卫生间 / 厨房 / 阳台 / 屋顶渗漏水免砸砖检测维修补漏全攻略 - 吉林同城获客
  • SpringBoot+Vue构建问卷调查系统的技术实践
  • 如何快速搭建私有搜索引擎:SearXNG Docker终极部署指南
  • NBM7100A芯片在低功耗物联网设备中的应用与优化
  • 暗黑2存档编辑器完全手册:零基础掌握角色与装备修改
  • Java微服务的七个常见架构错误:从超时配置到异常处理的生产级反例
  • SpringBoot拦截器读取流后不能再读取(详解)
  • 【第一章04】MQTT控制报文
  • Unity-XLua中Lua异常处理:构建跨语言稳定性的工程实践
  • Windows 11 添加网络打印机总是连接失败:从设备发现到 TCP/IP 端口的排查记录
  • 01 准备你的开发环境
  • 编写程序对比一帆风顺和历经波折两种状态下的作品风格,利用低谷心境打造差异化创意。
  • 量化交易策略可视化与实战复盘
  • Vosk-Browser:浏览器端离线语音识别的革命性解决方案
  • 思源宋体TTF:7种粗细的免费开源中文字体终极指南
  • 数字沟通的时光守护者:RevokeMsgPatcher如何为你的对话留下永恒印记
  • 现代网络诊断工具Trippy:从架构设计到实战应用的完整指南
  • 职场压力监测:汗液生物指标与可穿戴设备的技术解析
  • 使用Spring实现权限控制动态为注解赋值
  • Git 快速极简图文教程 第一篇
  • 物联网设备硬件级安全方案:PIC18与SE050集成实践
  • 企业私域流量团队搭建与高效运营指南
  • HFS文件服务器:轻松搭建个人云存储与文件共享平台
  • M9A技术深度解析:基于MaaFramework的《重返未来:1999》自动化引擎
  • Serverless安全实战:从TAR依赖漏洞到10步纵深防御体系构建
  • 【C++】 unordered_map 与unordered_set
  • URP水体渲染:动态生成渐变纹理实现数据驱动颜色控制
  • hdu 5458 Stability (并查集+线段树+树链剖分(边权))