Kubernetes Gateway API 进入新阶段后怎样理解迁移影响
来源:17golang原创
时间:2026-10-24 20:31:13 368浏览 收藏
Kubernetes Gateway API 进入新阶段,真正改变的不是“明天必须把所有 Ingress 删除”,而是入口流量的资源模型、职责边界和可移植能力开始有了更完整的标准答案。当前 Ingress API 仍然稳定,但已经冻结;Gateway API 则继续扩展 Standard 能力,尤其是对 HTTP 之外的 TCP、UDP 以及服务网格场景的覆盖。
官方地址:https://gateway-api.sigs.k8s.io/
因此,迁移的正确理解是:先把现有 Ingress 中“标准路由”和“控制器私有注解”分开,再让 Gateway API 控制器与旧入口并行,按业务入口逐步切换。Gateway API v1.6 已将 TCPRoute、UDPRoute 提升到 Standard,并将后续实验资源放入 gateway.networking.x-k8s.io;这会影响新资源的选型,却不会自动改变已有 Ingress 对象。

先把“新阶段”拆成三个事实
第一,Ingress 没有被删除。Kubernetes 文档明确说明,Ingress API 已冻结,项目没有移除计划,已有业务可以继续运行。第二,Gateway API 不是 Kubernetes 核心内置的某个单一负载均衡器,而是一组由控制器实现的 CRD;安装哪个控制器、支持哪些扩展,仍然是平台团队要做的选择。第三,Gateway API 的版本节奏与 Kubernetes 集群小版本解耦,升级 Gateway API 并不等同于升级整个集群。
v1.6 的信号在于:TCPRoute 和 UDPRoute 进入 v1 Standard,说明 Gateway API 已从“主要解决 HTTP/HTTPS 入口”继续向更完整的 L4/L7 网络 API 延伸。与此同时,新的实验资源不再和 Standard 资源混在同一个 API 组里,而是使用带 x- 的实验组名。团队审查 YAML 时,应先看 API 组和版本,再判断能否把它当成可迁移的标准契约。
迁移时最先变化的是资源职责
传统 Ingress 把入口、主机路径、TLS 和控制器选择压缩在一个对象里,复杂能力通常靠注解扩展。Gateway API 将这些职责拆开:GatewayClass 表示由哪类控制器实现,Gateway 描述入口监听器,HTTPRoute 或 TCPRoute 描述路由规则,平台或实现方策略再承载认证、超时等不完全标准化的能力。
这个拆分对多团队集群更重要。集群运维可以管理 Gateway 和监听器,应用团队只提交 HTTPRoute;路由通过 parentRefs 显式挂到某个 Gateway,而不是依赖一个模糊的默认入口。迁移时不要只做字段翻译,还要重新确认“谁可以修改哪个对象”。
# Gateway 由平台侧声明入口与监听器,HTTPRoute 由应用侧声明路由
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: public-gateway
namespace: platform-network
spec:
gatewayClassName: example-gateway-class
listeners:
- name: https
protocol: HTTPS
port: 443
hostname: app.example.com
# TLS 证书仍由 Secret 提供,具体跨命名空间规则需按实现配置
tls:
mode: Terminate
certificateRefs:
- name: app-example-com
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: app-route
namespace: app-team
spec:
# 通过 parentRefs 显式声明这条路由挂到哪个 Gateway
parentRefs:
- name: public-gateway
namespace: platform-network
sectionName: https
hostnames:
- app.example.com
rules:
- matches:
- path:
type: PathPrefix
value: /
# backendRefs 指向 Service,不把后端地址写进入口对象
backendRefs:
- name: app-service
port: 8080
上面的代码只表达资源关系和权限边界;它不是某个云厂商控制器的完整生产清单。跨命名空间引用、证书引用和策略附着都要按选定实现的文档补齐授权。
旧 Ingress 里的注解不能机械搬家
迁移成本通常藏在注解里,而不在 host、path 和后端 Service 这些显眼字段里。重定向、请求头改写、流量切分等能力已经有一部分对应到 HTTPRoute;认证、连接超时、健康检查等能力,则可能需要 Gateway 实现的策略资源或自定义扩展。也就是说,转换工具可以减少 YAML 手工劳动,却不能替平台团队做兼容性决策。
建议为每条注解建立三种状态:有标准字段可映射、需要控制器策略、暂时没有等价物。第三类不要在迁移时悄悄删除,应保留旧入口或先在影子环境验证替代行为。官方迁移指南也明确提醒,Ingress 的实现特定功能仍要结合源控制器和目标 Gateway 实现判断。

一套更稳妥的迁移落地路径
第一步:盘点入口,而不是先改 YAML
列出每个 Ingress 的控制器、外部地址、域名、TLS Secret、路径匹配、重写规则、认证注解和回滚依赖。特别标出同一域名由多个 Ingress 共享、依赖默认后端或依赖控制器私有行为的对象。没有这张清单,迁移后的“配置成功”可能只是丢掉了旧注解。
第二步:选择控制器并确认支持边界
Gateway API 的资源规范统一,不意味着所有实现的扩展都一致。先确认目标控制器支持的 Gateway API 版本、Standard/Experimental 资源、策略模型、跨命名空间引用和 conformance 信息,再决定首批迁移哪些入口。对核心生产流量,优先选择 Standard 资源;实验组资源应明确记录版本和退出路径。
第三步:并行部署,隔离外部流量
官方迁移建议允许 Gateway API 控制器与原 Ingress-NGINX 并行运行,让两套入口获得不同的外部地址,在不影响生产入口的前提下验证。这个阶段的重点不是把 DNS 立刻切过去,而是比较 TLS、重定向、路径匹配、请求头、超时和后端健康状态。
# 查看 Gateway API 资源的状态条件,重点关注 Accepted 和 Programmed kubectl get gatewayclass,gateway,httproute -A # 只读取目标 Gateway 的详细条件,不修改线上对象 kubectl describe gateway public-gateway -n platform-network # 检查路由是否被目标 Gateway 接受,失败时回到控制器事件与实现文档 kubectl describe httproute app-route -n app-team
命令输出中的条件状态是控制器反馈,不是 Kubernetes API 自动保证的业务可用性。还需要使用测试域名或受控流量验证证书链、状态码、重试和日志。
第四步:按域名或业务单元切换
不要一次性把所有 Ingress 转成一组巨大 HTTPRoute。按域名、团队或风险等级拆分资源,先切低风险业务,再切有认证、重写和跨命名空间引用的入口。每个单元都要保留原 Ingress 清单和 DNS 回退记录,确认新入口稳定后再决定是否删除旧对象。
第五步:把回退写进操作手册
回退不仅是“重新应用旧 YAML”。还应包含 DNS 或负载均衡切回、证书 Secret 的归属、两套控制器的地址、策略资源清理、监控告警和变更窗口。若只是暂停 Gateway API 控制器而保留已切换的 DNS,入口仍可能不可用;回退顺序要按实际流量路径编排。
哪些团队现在就该迁移,哪些可以继续观察
如果团队正在新建平台入口、需要多租户职责分离、需要标准化的流量切分,或者已经使用 TCP/UDP 入口,Gateway API 值得作为新基线。新项目直接采用 Gateway、HTTPRoute、TCPRoute 等 Standard 资源,通常比先写 Ingress 再安排二次迁移更省协调成本。
如果现有 Ingress 只承担稳定的 HTTP/HTTPS 路由,控制器私有注解很多,且近期没有入口改造窗口,则没有必要因为“API 进入新阶段”而强制重写。可以先完成注解盘点、控制器选型和一条低风险域名的并行验证。Ingress 继续可用,但新能力和新团队协作不要再继续堆叠到冻结的 Ingress API 上。
迁移影响速查
| 关注点 | 迁移后的判断 | 建议动作 |
|---|---|---|
| 已有 Ingress | 可继续运行,API 冻结,不等于立即删除 | 盘点并按业务单元规划 |
| HTTP/HTTPS 标准路由 | 优先映射到 Gateway 与 HTTPRoute | 先并行验证,再逐域名切换 |
| TCP/UDP 入口 | v1.6 的 TCPRoute、UDPRoute 进入 Standard | 确认控制器 conformance 与监听器配置 |
| 控制器私有注解 | 可能映射到字段、策略或无等价物 | 建立注解迁移矩阵,不要静默丢弃 |
| 实验资源 | 新的实验资源使用独立 x-k8s API 组 | 记录实验版本和退出方案 |
| 组织协作 | 入口和路由可由不同角色管理 | 同步 RBAC、审计和回退手册 |
相关问题
Ingress 会被 Kubernetes 立即移除吗?
不会。Ingress API 已冻结,但 Kubernetes 文档说明没有移除计划。迁移的主要原因是 Gateway API 的新能力、职责模型和扩展方式,而不是旧对象突然失效。
Gateway API 升级是否必须先升级 Kubernetes 集群?
不一定。Gateway API 项目说明其版本与 Kubernetes 集群版本解耦,但仍需满足所选控制器和 CRD 的支持要求,不能只看集群版本。
Ingress 到 Gateway API 能不能完全自动转换?
可以用 ingress2gateway 等工具辅助生成资源,但工具主要解决结构转换。控制器私有注解、策略、证书权限、外部地址和回滚仍需人工确认。
新项目应该直接使用实验资源吗?
除非确实需要实验能力并接受其变化成本,否则优先使用 Standard 资源。实验资源应记录 API 组、控制器支持范围和未来升级路径。
参考资料
Kubernetes Gateway API v1.6:https://kubernetes.io/blog/2026/08/03/gateway-api-v1-6-release/
Ingress 迁移指南:https://gateway-api.sigs.k8s.io/guides/getting-started/migrating-from-ingress/
Kubernetes Gateway API 概念:https://kubernetes.io/docs/concepts/services-networking/gateway/
-
Golang · Go教程 | 4个月前 | 性能优化 · kubernetes · Go教程 · 生产实践 · Go1.25 · golang Go Kubernetes 性能优化 GOMAXPROCS473 收藏
-
113 收藏
-
Golang · Go教程 | 2个月前 | 容器 · go · 性能 · kubernetes · 运行时 · Kubernetes GOMAXPROCS cgroup Go 1.25 容器 CPU 限额438 收藏
-
318 收藏
-
353 收藏
-
273 收藏
-
324 收藏
-
355 收藏
-
454 收藏
-
235 收藏
-
349 收藏
-
309 收藏
-
151 收藏
-
189 收藏
-
262 收藏
-
187 收藏
-
439 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习