type
status
date
slug
summary
category
tags
create_time
Sep 10, 2025 09:55 PM
icon
password
my_create_time
📝 前言
在 Kubernetes 的服务治理体系中,如何管理集群入口流量 一直是核心问题。
早期的 Ingress 资源承担了大部分 HTTP/HTTPS 流量入口的工作,但随着应用场景复杂化,Ingress 的功能和可扩展性逐渐显得不足。
Gateway API 是 Kubernetes 社区推动的新一代流量入口管理标准,旨在提供比 Ingress 更清晰、更强大、更可扩展的解决方案。
🧭 背景介绍
在云原生环境中,应用面临的流量管理挑战包括:
- 多协议支持不足:Ingress 仅支持 HTTP/HTTPS,难以覆盖 TCP/UDP 等场景。
- 跨团队协作复杂:Ingress 规则通常由开发和运维团队共享,权限边界模糊。
- 实现不一致:不同 Ingress Controller 对规范的支持差异较大,缺乏统一标准。
Gateway API 的设计目标:
- 抽象解耦:通过 GatewayClass、Gateway、Route 等资源对象,将控制权拆分给不同角色。
- 协议扩展:除 HTTP 外,还能支持 TCP、UDP、TLS 等协议。
- 多租户友好:允许在不同命名空间下定义路由并绑定同一个 Gateway。
- 标准化生态:提供统一的 CRD 标准,便于 NGINX、Istio、Kong 等实现。
🧠 本章知识卡片

🚀 本章小节
1️⃣ 什么是 Gateway
网关(Gateway)API 是一组 API 类别,可提供动态基础设施配置和高级流量路由。
Gateway API 通过使用可扩展的、角色导向的、 协议感知的配置机制来提供网络服务。
它是一个附加组件,包含可提供动态基础设施配置和高级流量路由的 API 类别。
简单点来说,它能统一管理 L4/L7 层的流量入口。
2️⃣ 工作原理
Gateway API 的核心资源对象包括:
- GatewayClass 类似于 StorageClass,用于定义网关的控制器类型(例如 NGINX、Istio)。
- Gateway
定义实际的网关实例(入口点),由 GatewayClass 控制器负责实现。
一个 Gateway 对象只能与一个 GatewayClass 相关联
- Route(HTTPRoute、TCPRoute、UDPRoute、TLSRoute)
描述路由规则,用于匹配请求并转发到后端 Service。
多个
Gateway API 被组织成不同的 API 类别,这些 API 类别具有相互依赖的关系,以支持组织中角色导向的特点。
组件图:

3️⃣ 工作流程图
大致工作流程如下所示:

4️⃣ 安装部署
安装 Gateway CRD
可通过以下命令一键安装CRD:
安装完成后,可以验证 CRD 是否已就绪:
选择并安装 Gateway Controller
Gateway API 本身只定义了标准,需要由具体的 实现控制器 来运行。
常见选择包括:
- NGINX Gateway Fabric(推荐给熟悉 NGINX 的团队)
- Istio Gateway(适合使用 Service Mesh 的场景)
- Kong Gateway(API 网关功能更丰富)
- 云厂商实现(如 AWS Gateway Controller、GCP Gateway Controller、阿里云 ACK Gateway Controller)
以 NGINX Gateway 为例,安装方式如下:
PS:若之前有安装过 Ingress Controller 可先卸载,避免端口冲突。
卸载命令:
helm uninstall -n ingress-nginx ingress-nginx
安装 Gateway
在 Controller 安装完成之后,我们继续安装 Gateway 组件。
Gateway 是数据面的核心组件,它定义了一个网络端点,该端点可用于处理流量,即对 Service 等后端进行过滤、平衡、拆分等。
配置如下:
5️⃣ 实战示例
在上一步我们已经把基础 Gateway 组件全部安装完毕,接下来就是如何使用了。
如果是 L7 的 HTTP 协议,可创建一个 HTTPRoute 资源,并关联 Gateway 即可。
至于 deployment 和 service 我们可以使用快速命令完成创建:
资源都准备好了,接下来如何访问呢?
首先我们需要先找到 Gateway 监听的端口,我这里以 NodePort 为例:
其中:45718 即为宿主机的访问端口,当然也可以改为80。
访问地址:
http://app.192.168.162.129.nip.io:45718
PS:如果是在公有云,使用的是 LoadBalancer 类型,那应该是根据 Gateway 的 IP 来访问,而不是宿主机IP,可通过以下命令查看 Gateway IP:
访问流程如下:

6️⃣ 常用命令
命令 | 说明 |
kubectl get gatewayclass | 查看所有 GatewayClass |
kubectl get gateway | 查看 Gateway 实例 |
kubectl describe gateway <name> | 查看 Gateway 详情 |
kubectl get httproute | 查看 HTTP 路由规则 |
kubectl describe httproute <name> | 查看路由规则详情 |
✅ 总结
Gateway API 是 Ingress 的进化版,提供了更清晰的抽象和更强大的协议支持。
例如有以下特性:
- 支持多协议、多租户、细粒度路由和统一标准化接口。
- 可以替代 Ingress,实现更灵活的服务治理和灰度发布策略。
- 与 Kubernetes 原生 API 无缝集成,适合云原生场景和多集群部署。
Gateway API 同时也是官方推荐的新一代流量入口管理,对于老的 Ingress 管理项目可以逐渐进行迁移了。
有关文章的任何疑问,欢迎您在底部评论区留言,一起交流~
- 作者:青萍叙事
- 链接:https://blog.lusyoe.com/article/kubernetes-gateway-resources-intro
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。