Kubernetes Gateway API 替换 Ingress 时要核对哪些路由
Kubernetes Gateway API 替换 Ingress 时,最该核对的不是资源名称,而是每条请求最终会命中哪个 Listener、HTTPRoute 和 Service。Ingress 把入口和路由规则压在一个对象里;Gateway API 则把它拆成 GatewayClass、Gateway、HTTPRoute 等资源。迁移前应先逐条盘点域名、路径、后端端口、TLS 和注解,再检查新实现是否保留了原来的访问结果。
先建立“旧 host/path/backend → 新 listener/HTTPRoute/backendRefs”的映射表,再迁移。只要 hostname 没有交集、Route 没有成功附着,或注解行为没有替代方案,配置即使能通过 YAML 解析,也不代表请求会到达原来的 Service。
官方资料入口:https://kubernetes.io/docs/concepts/services-networking/gateway/
- 先核对入口和 Listener,再核对 HTTPRoute 的 hostname、path 与 backendRefs。
- Ingress 的 Prefix 大体对应 HTTPRoute 的 PathPrefix,但 ImplementationSpecific 不能直接照搬。
- 跨命名空间引用、TLS 证书和控制器注解都要单独验证,最后用状态条件和灰度请求验收。
先把每条 Ingress 规则拆成三列
迁移清单的第一列写原 Ingress 的 host 与 path,第二列写它实际依赖的入口和控制器,第三列写 Service 名称、端口以及是否经过重写、跳转、鉴权或限流。这样能把“看起来只是换 API”的工作,变成一组可验证的请求契约。
| Ingress 关注点 | Gateway API 对应位置 | 迁移时要确认 |
|---|---|---|
| class / 入口地址 | GatewayClass、Gateway | 控制器、外部 IP、端口和 Listener 是否由同一个团队维护 |
| host、TLS 域名 | Listener.hostname、HTTPRoute.hostnames、Listener TLS | 两处 hostname 是否相交,证书引用是否可读 |
| path、pathType | HTTPRoute.rules.matches.path | Exact、PathPrefix 和正则/实现特性是否等价 |
| service、port | HTTPRoute.backendRefs | Service 端口、协议、命名空间和权重是否一致 |

GatewayClass、Gateway 与 HTTPRoute 要先对上层级
Ingress 控制器通常隐含提供 HTTP/HTTPS 入口;Gateway API 要显式创建 Gateway,并在 Listener 中声明协议、端口、hostname 和允许附着的 Route 类型。GatewayClass 决定由哪个控制器管理 Gateway,Gateway 代表实际承接流量的入口,HTTPRoute.parentRefs 决定路由要挂到哪个 Gateway 或 Listener。
先确认这条链路:GatewayClass 的控制器存在且被接受,Gateway 的 Listener 已进入可编程状态,HTTPRoute 的 parentRefs 指向正确对象。Gateway 默认只接受同命名空间的 Route;如果旧 Ingress 由多个命名空间共同维护,必须重新设计 allowedRoutes,而不是只复制原来的 host。
最容易漏的是 hostname、path 和默认行为
Gateway Listener 与 HTTPRoute 都可能写 hostname。两者没有交集时,Route 不会被接受;通配符也有边界,例如 *.example.com 不等于裸域名 example.com。把原来散落在多份 Ingress 中的域名合并成一条 Route 时,还要检查不同 Route 之间是否出现重叠,避免请求被更具体的规则抢先匹配。
路径也不能只看字符串。Gateway API 的 Exact 是大小写敏感的精确匹配,PathPrefix 按路径元素匹配,/api 会匹配 /api/v2,但不会匹配 /apiv2。Ingress 的 Prefix 通常可以对应 PathPrefix;ImplementationSpecific 则必须查所选控制器的实现说明。还要专门测试 /、带尾斜杠路径、未匹配路径,以及原 Ingress 的默认后端行为。

跨命名空间、TLS 和注解不能按名称硬搬
如果 HTTPRoute 要引用另一个命名空间的 Service,backendRefs.namespace 之外还需要在被引用资源所在命名空间创建 ReferenceGrant。没有授权时,Route 的 ResolvedRefs 应显示为失败,不能把这类问题当作后端暂时不健康。Gateway 引用其他命名空间的 Secret 也适用同样的显式授权思路。
TLS 迁移要核对 Listener 的 HTTPS 协议、终止模式、证书 Secret、SNI 域名和 HTTP 到 HTTPS 的跳转。原 Ingress 注解中的 URL 重写、请求头修改、灰度权重、鉴权、限流或 body 大小限制,不一定都有相同的核心字段;应逐条标记为 Gateway API 核心能力、扩展能力或控制器私有策略,并在选型文档里记录缺口。
用状态条件和灰度流量完成迁移验收
新对象部署后,先看 GatewayClass、Gateway 和 HTTPRoute 的状态条件,再发真实的 Host、路径、协议和异常请求。至少覆盖每个域名的首页、最具体路径、未匹配路径、HTTP/HTTPS、证书错误、后端不存在和跨命名空间引用失败场景。只有当日志中的 upstream、状态码和延迟与旧入口基线相符,才适合切换 DNS、LoadBalancer 地址或上游反向代理。
迁移最好保持一段时间的双轨运行:旧 Ingress 保留回退能力,新 Gateway 使用独立入口接收灰度流量。回退开关应明确写进发布流程,尤其是证书续期、重写规则和鉴权策略未完成时,不要因为 Gateway 对象显示 Programmed=True 就认定业务路由完全等价。
常见问题
Gateway API 能把 Ingress YAML 直接改名吗?
不能。Gateway API 是 Ingress 的后继 API,但资源模型、入口归属和 Route 附着方式不同,需要一次转换并重新验证实现特性。
HTTPRoute 的 hostnames 一定要写吗?
不一定。省略时可由路由规则匹配更广的流量,但仍受 Listener 的 hostname 和附着条件限制;生产迁移通常应明确写出业务域名。
为什么 Route 已创建却没有流量?
优先检查 parentRefs、Listener 的 allowedRoutes、hostname 是否相交,以及后端引用的 ResolvedRefs。跨命名空间时再检查 ReferenceGrant。
真正的迁移完成标准,是同一组请求在新旧入口上得到一致的路由、TLS 和错误处理结果,而不是新资源已经成功提交。把这份逐条清单保留下来,后续更换 Gateway 控制器时仍可复用。
Go math/big.Int.SetString 如何判断进制输入失败
- 上一篇
- Go math/big.Int.SetString 如何判断进制输入失败
- 下一篇
- Go 泛型约束中 comparable 为什么仍不能比较所有值
-
- 科技周边 · 业界新闻 | 2小时前 | 日志 · trace · opentelemetry · 可观测性 OpenTelemetry trace_id 日志关联
- OpenTelemetry 日志信号进入生产后如何和 trace_id 对齐
- 400浏览 收藏
-
- 科技周边 · 业界新闻 | 3小时前 | gitHub actions · 持续集成 · 构建验证 · GitHub Actions runner images 构建矩阵
- GitHub Actions Runner Images 更新时如何验证构建矩阵
- 344浏览 收藏
-
- 科技周边 · 业界新闻 | 4小时前 |
- OpenTelemetry GenAI 语义约定变化后如何整理追踪字段
- 272浏览 收藏
-
- 科技周边 · 业界新闻 | 5小时前 |
- PHP 8.5 新语法发布后旧项目如何安排兼容性扫描
- 430浏览 收藏
-
- 科技周边 · 业界新闻 | 8小时前 |
- Python 3.14 free-threaded 构建如何确认解释器模式
- 446浏览 收藏
-
- 科技周边 · 业界新闻 | 10小时前 |
- Go 1.27.1 的 encoding/json 和 net/http 修复如何纳入回归测试
- 226浏览 收藏
-
- 科技周边 · 业界新闻 | 11小时前 |
- Go 1.27.1 修复 cgo 和编译器问题后如何安排升级验证
- 241浏览 收藏
-
- 科技周边 · 业界新闻 | 12小时前 |
- etcd v3.7 RangeStream 用于大列表时如何估算客户端改造量
- 146浏览 收藏
-
- 科技周边 · 业界新闻 | 13小时前 | 云原生 · 调度器 · kubernetes · 资源调节 · Kubernetes v1.37 调度器抢占 InPlacePodVerticalScaling Pod resize
- Kubernetes v1.37 InPlacePodVerticalScaling 如何检查原地调节条件
- 122浏览 收藏
-
- 科技周边 · 业界新闻 | 15小时前 | kubernetes · Gateway API · TCPRoute · 云原生网络 · 入口迁移 · Gateway API v1.6 TCPRoute v1迁移 Gateway入口规则评估
- Gateway API v1.6 TCPRoute 标准化后如何评估现有入口规则
- 219浏览 收藏
-
- 科技周边 · 业界新闻 | 16小时前 | 云原生 · kubernetes · job · successPolicy · Kubernetes v1.37 Job successPolicy Indexed Job succeededIndexes succeededCount
- Kubernetes v1.37 Job successPolicy 如何设计提前完成条件
- 271浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 27次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 131次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 65次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 23次使用
-
- CMMLU
- 深入了解CMMLU中文评估基准,涵盖67个学科主题,提供数据集下载、Zero-shot/Five-shot评估方法及排行榜,助力优化中文语言模型性能。
- 8次使用
-
- Go chassis云原生微服务开发框架应用编程实战
- 2022-12-29 214浏览
-
- Go 1.25 容器感知 GOMAXPROCS:K8s 里别再让 CPU limit 偷偷拖垮 P99
- 2026-06-01 473浏览
-
- Go 1.25 容器里的 GOMAXPROCS 怎么迁移:cgroup CPU 限额、自动更新与旧环境兼容
- 2026-08-09 438浏览
-
- docker的 linux 内核可以和宿主机不一样吗?
- 2023-01-12 318浏览
-
- mac 如何安装k8s
- 2023-01-13 353浏览

