About gateway proxies
网关代理是你在kgateway架构中的数据面(data plane)。数据面负责处理客户端与服务器(或后端应用)之间的流量。你想使用哪种类型的网关代理取决于你的使用场景,这通常与后端应用以及流量的“方向”相关。
后端应用通常通过API被客户端访问。因此,“API 网关”是网关代理的常见使用场景。
- 如果客户端在集群外,你需要一个 ingress gateway 来处理“南北向(north-south)”流量。
- 如果客户端在集群内或服务网格内,你需要一个 东西向(east-west)网关。
- 若要控制离开你环境的流量,你需要一个 egress gateway。
越来越多的网关代理被设计用于应对AI网络特有的挑战,在这些场景中,你的后端可能包括:
- 云厂商的大语言模型(LLMs)
- 你自己的 LLM 和推理服务
- MCP(Model Context Protocol)服务器
- A2A(agent-to-agent)服务器
- 其它 AI 相关场景
最好的网关代理能够让你配置:
- 高级路由
- 负载均衡
- 安全策略
- 协议转换
- 更多能力
它们还会生成可用于监控与排障的指标与日志。
Architecture
kgateway是一个控制面,用于管理遵循Kubernetes Gateway API规范的网关代理的生命周期。安装 kgateway时,会自动获得GatewayClasses。当你基于这些GatewayClasses创建Gateway资源时,kgateway会自动为你启动一个gateway proxy。该gateway proxy控制数据面,将流量路由到后端服务之后,kgateway会根据你配置的Gateway API和kgateway自定义资源(例如HTTPRoutes与TrafficPolicies)来配置数据面。通过这种方式,你可以使用同一套开源资源来标准化网关代理的配置。
Supported gateway proxies
kgateway支持以下网关代理。根据你的使用场景,你可以在同一个Kubernetes集群中同时使用两种代理。
| Gateway proxy | 主要使用场景 | 描述 |
|---|---|---|
| kgateway | API、ingress、egress、service mesh | kgateway 项目包含其自身的代理,基于 Envoy(一个 L3/L4/L7网络代理)。在 Envoy之上,kgateway提供了一组用于高级配置、安全和流量管理的扩展。你也可以将kgateway与Istio服务网格集成(包括 sidecar 模式和 ambient 模式)。 |
| agentgateway | AI、A2A、MCP、LLM、推理(Inference Extension) | agentgateway 是一个企业级的数据面网关,为任何环境中的agents和工具提供 AI连接能力。 |
Reserved ports(保留端口)
以下端口已被 kgateway 保留,在配置 gateway proxy 时不能使用:
| 端口 | 描述 |
|---|---|
| 19000 | Envoy 管理端口。gateway proxies 在此端口上暴露管理接口,可访问重要代理信息,如 config dump、heap dump、健康检查、内存分配等。 |
| 15000 | agentgateway 管理端口。agentgateway proxies 在此端口上暴露多个端点,例如配置导出(15000/config_dump)和只读 UI(15000/ui)。 |
| 8082 | readiness 端口。用于判断 gateway proxy 是否已准备好接收流量。 |
| 9091 | Prometheus 抓取端口。gateway proxies 会在此端口暴露全部指标,以便 Prometheus 抓取。 |
请注意: 如果你在配置中使用了这些端口,网关代理仍然会被部署,但你会在日志中看到错误消息,例如:
err="failed to apply object apps/v1, Kind=Deployment example-gateway: failed to create typed patch object
(gwtest/example-gateway; apps/v1, Kind=Deployment): .spec.template.spec.containers[name="kgateway-proxy"].
ports: duplicate entries for key [containerPort=9091,protocol="TCP"]"
