当前位置:首页 > 文章列表 > 科技周边 > 业界新闻 > Gateway API 如何补足传统 Ingress 的路由表达

Gateway API 如何补足传统 Ingress 的路由表达

来源:17golang原创 2026-11-11 22:38:59 0浏览 收藏

Gateway API 补足传统 Ingress 的核心,不是把入口资源换一个名字,而是把“谁负责基础设施、谁定义入口、谁维护应用路由”拆开,并把更多常见路由条件写进标准资源。Kubernetes 官方文档已经说明 Ingress API 进入冻结状态,仍然可用,但不会继续扩展;Gateway API 则面向更丰富、更可移植的流量路由场景。

官方地址:https://gateway-api.sigs.k8s.io/

如果现有 Ingress 只承担简单的 Host、Path 转发,可以继续稳定运行;如果开始依赖大量控制器注解、按请求头分流、按权重灰度,或需要让不同团队共享入口,Gateway API 的资源模型更适合承载这些表达。
  • Ingress:资源简单、生态成熟,但扩展能力常落到控制器注解。
  • Gateway API:用 GatewayClass、Gateway、HTTPRoute 分离职责,表达更结构化。
  • 迁移策略:先对照目标控制器的支持矩阵,再按入口或路由逐步迁移,不必一次性重建全部流量。

这次变化解决的是什么问题

传统 Ingress 主要解决“外部 HTTP(S) 请求如何到达 Service”。它支持 Host、Path、TLS 等基础能力,但更复杂的请求头匹配、流量分配、重写和策略控制,往往依赖某个 Ingress Controller 的注解。这样做的直接代价是:配置看起来仍是 Kubernetes 对象,实际语义却可能被控制器实现锁定。

Gateway API 的思路是把可复用的路由语义提升到 API 资源中。官方概览把 Gateway API 描述为角色导向、可移植、可表达和可扩展的 API 家族;它不是单一控制器,而是一组由不同实现负责落地的 CRD。标准字段解决共性问题,厂商或项目扩展则应明确标注支持范围。

传统 Ingress 与 Gateway API 资源职责结构说明图
图1:Ingress 与 Gateway API 的职责结构说明图,展示 GatewayClass、Gateway、HTTPRoute 到 Service 的关系。

先看懂 GatewayClass、Gateway、HTTPRoute 的关系

Gateway API 把入口链路拆成三层。GatewayClass 表示由哪个控制器实现一类网关;Gateway 表示一个实际的流量入口和监听器;HTTPRoute 描述请求如何从监听器匹配到后端 Service。Service 仍然是应用后端,通常不需要因为入口 API 的变化而改写。

这组关系对应不同管理角色:基础设施提供者可以维护 GatewayClass,集群运维人员可以维护 Gateway 和监听器,应用团队则只维护自己的 HTTPRoute。Gateway 的 allowedRoutes 与 Route 的 parentRefs 共同决定“谁可以把什么路由挂到哪个入口”,比在一个 Ingress 对象上堆叠团队约定更容易审查。

HTTPRoute 如何补足路由表达

HTTPRoute 把一条 HTTP 路由拆成主机名、匹配条件、过滤器和后端引用。匹配条件可以组合路径前缀、精确路径、请求头、查询参数和方法;过滤器可表达请求或响应头修改等处理;多个 backendRefs 还可以通过权重完成渐进分流。不是每个扩展都在所有实现中具备相同支持等级,所以写配置前仍需查看所用 Gateway Controller 的文档。

HTTPRoute 按主机路径请求头和权重分流的结构说明图
图2:HTTPRoute 路由表达说明图,展示匹配条件、权重分流与跨命名空间信任边界。

用最小资源关系表达一个入口

下面的示例只展示资源之间的关系,不绑定具体控制器。实际部署前需要安装对应实现提供的 CRD,并把 controllerName 换成目标实现声明的值。

apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: shared-gateway
spec:
  # 中文注释:这里由具体 Gateway Controller 声明实际控制器名称。
  controllerName: example.net/gateway-controller
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: public-gateway
spec:
  # 中文注释:GatewayClass 决定这个入口由哪类实现负责管理。
  gatewayClassName: shared-gateway
  listeners:
  - name: http
    protocol: HTTP
    port: 80
    # 中文注释:同命名空间路由是较保守的默认协作边界。
    allowedRoutes:
      namespaces:
        from: Same

这个拆分带来一个重要结果:应用团队不必修改基础设施层,就可以在被允许的范围内提交自己的 HTTPRoute。入口监听器和应用路由之间的边界由资源字段与 RBAC 共同约束,而不是只依赖注解命名规范。

把 Host、Path 和灰度权重写进 HTTPRoute

下面的配置让 api.example.com 下的 /v2 请求进入两个版本的 Service,并按 90% 与 10% 的权重分流。它用于展示表达方式;权重是请求分配意图,最终效果仍受具体实现、连接复用和流量规模影响。

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: api-v2-route
spec:
  # 中文注释:parentRefs 把路由挂到指定 Gateway。
  parentRefs:
  - name: public-gateway
  # 中文注释:hostname 先筛选请求的 Host,再进入规则匹配。
  hostnames:
  - api.example.com
  rules:
  - matches:
    - path:
        # 中文注释:PathPrefix 只匹配 /v2 及其子路径。
        type: PathPrefix
        value: /v2
      # 中文注释:同一条规则还可按请求头继续收窄流量。
      headers:
      - name: X-Canary
        value: "true"
    backendRefs:
    - name: api-v2
      port: 8080
      weight: 90
    - name: api-v2-canary
      port: 8080
      weight: 10

与传统 Ingress 相比,读者可以直接从资源字段看出“匹配什么、转发到哪里、如何分流”。如果某个字段属于 Extended 或 Implementation-specific 能力,应以所选实现的支持声明为准,不要把标准示例当成所有环境中的自动保证。

从 Ingress 迁移时先做这张对照表

现有需求Ingress 常见做法Gateway API 对应表达迁移关注点
绑定入口控制器ingressClassName 或注解GatewayClass确认控制器的 class 与实现名称
监听地址和协议Ingress 与控制器约定Gateway.listeners确认端口、协议、TLS 和 hostname
Host/Path 路由rules 和 pathsHTTPRoute.hostnames 与 rules.matches对照 Prefix、Exact 和默认匹配语义
请求头或灰度控制器注解或自定义字段HTTPRoute 的 header match、filter、weight核对实现的 conformance 和扩展支持
跨命名空间共享通常依赖控制器约定allowedRoutes、parentRefs、必要时 ReferenceGrant同时检查 RBAC 与信任边界

推荐的渐进采用流程

  1. 盘点注解:把现有 Ingress 的 Host、Path、TLS、重写、限流和灰度需求分开,标出哪些依赖控制器注解。
  2. 选择实现:确认目标 Gateway Controller 支持哪些 Standard、Extended 或 Implementation-specific 特性,并准备对应 CRD。
  3. 先建入口:由基础设施或运维角色创建 GatewayClass 与 Gateway,明确 listener 和 allowedRoutes。
  4. 迁移一条路由:先将一个低风险服务转换为 HTTPRoute,检查 Accepted、ResolvedRefs 等状态条件,再逐步扩展。
  5. 保留回退:在切换 DNS、负载均衡或入口地址前保留原 Ingress 配置,确保能按服务粒度回退。

常见误区和判断边界

  • 误区一:Gateway API 等于某个网关产品。它是 Kubernetes 生态中的 API 规范,具体流量处理仍由实现它的控制器负责。
  • 误区二:Ingress 立即失效。Ingress API 已冻结不代表现有资源被删除;简单入口可以继续使用,迁移的价值主要来自新的表达需求。
  • 误区三:标准字段在所有实现中都一样。Gateway API 有支持等级和 conformance,过滤器、跨命名空间引用等能力必须结合实现文档判断。
  • 误区四:跨命名空间只改一处 YAML。Route 附着、Gateway 的 allowedRoutes、ReferenceGrant 和 RBAC 共同构成信任边界,少一层都可能导致路由不被接受。

速查结论

你要表达的事情优先查看
谁实现入口GatewayClass
入口监听什么Gateway.listeners
哪些请求命中HTTPRoute.hostnames 与 matches
请求如何改写或分流filters 与加权 backendRefs
哪些团队可以挂载路由allowedRoutes、parentRefs、ReferenceGrant

因此,Gateway API 对传统 Ingress 的补足可以概括为:把入口基础设施、监听器和应用路由拆成可协作的资源,再把常见的请求级路由条件从控制器注解中搬到更清晰的 API 表达里。是否迁移,取决于当前路由复杂度和目标实现的支持情况,而不是由“新旧”二字单独决定。

相关问题

Ingress 还能继续用吗?

可以。官方文档说明 Ingress API 已冻结,但现有能力仍受稳定性保证。只有在需要新的路由表达、角色协作或更强可移植性时,才更有必要评估 Gateway API。

Gateway API 会自动替换现有 Ingress 吗?

不会。Gateway API 不包含 Ingress kind,需要一次性的资源转换或按路由渐进迁移;具体转换方式取决于目标实现。

HTTPRoute 可以跨命名空间绑定吗?

可以设计跨命名空间关系,但必须满足 Gateway 的 allowedRoutes、Route 的 parentRefs 以及相关引用授权条件。实际配置还要检查实现对 ReferenceGrant 等资源的支持。

只用简单 Host 和 Path 是否需要马上迁移?

通常不需要。若现有 Ingress 稳定且没有控制器迁移压力,可以先保持;把 Gateway API 作为下一次入口能力扩展或平台统一时的演进方向更稳妥。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
OCI 镜像规范变化会影响哪些镜像元数据OCI 镜像规范变化会影响哪些镜像元数据
上一篇
OCI 镜像规范变化会影响哪些镜像元数据
OpenTelemetry Logs 信号怎样与 traces 关联
下一篇
OpenTelemetry Logs 信号怎样与 traces 关联
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    985次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    991次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    1112次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    1081次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    927次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码