【云计算】【Kubernetes】⑥ 流量入口大解析:从 Nginx 到 Ingress 再到 Gateway API

📖目录

  • 前言:为什么流量入口如此重要?
  • [1. 概念全景图:流量入口的三层架构](#1. 概念全景图:流量入口的三层架构)
    • [1.1 专业定义 vs 大白话解释](#1.1 专业定义 vs 大白话解释)
    • [1.2 Nginx](#1.2 Nginx)
    • [1.3 Ingress API到Gateway API](#1.3 Ingress API到Gateway API)
    • [1.2 依赖关系图](#1.2 依赖关系图)
  • [2. 三大流量入口技术深度对比](#2. 三大流量入口技术深度对比)
    • [2.1 技术定位对比](#2.1 技术定位对比)
    • [2.2 架构层次对比](#2.2 架构层次对比)
    • [2.3 使用场景分析](#2.3 使用场景分析)
      • [场景1:单体应用 + 负载均衡](#场景1:单体应用 + 负载均衡)
      • [场景2:Spring Cloud 微服务](#场景2:Spring Cloud 微服务)
      • [场景3:Kubernetes 原生应用](#场景3:Kubernetes 原生应用)
  • [3. Nginx Ingress 退役:真相与影响](#3. Nginx Ingress 退役:真相与影响)
    • [3.1 退役时间线](#3.1 退役时间线)
    • [3.2 退役的根本原因](#3.2 退役的根本原因)
    • [3.3 对现有系统的影响](#3.3 对现有系统的影响)
  • [4. Higress:官方推荐的替代方案](#4. Higress:官方推荐的替代方案)
    • [4.1 为什么选择 Higress?](#4.1 为什么选择 Higress?)
    • [4.2 Higress 架构图](#4.2 Higress 架构图)
    • [4.3 兼容性保障](#4.3 兼容性保障)
  • [5. Gateway API:Ingress API 的下一代](#5. Gateway API:Ingress API 的下一代)
    • [5.1 Ingress API 和 Ingress Controller](#5.1 Ingress API 和 Ingress Controller)
    • [5.1 Ingress API 的局限性](#5.1 Ingress API 的局限性)
    • [5.2 Gateway API 的解决方案](#5.2 Gateway API 的解决方案)
    • [5.3 Gateway API 资源模型](#5.3 Gateway API 资源模型)
  • [6. 实战:从 Nginx Ingress 迁移到 Higress](#6. 实战:从 Nginx Ingress 迁移到 Higress)
    • [6.1 迁移前检查清单](#6.1 迁移前检查清单)
    • [6.2 安装 Higress](#6.2 安装 Higress)
    • [6.3 配置示例](#6.3 配置示例)
    • [6.4 验证迁移](#6.4 验证迁移)
  • [7. 性能对比:Higress vs Nginx Ingress](#7. 性能对比:Higress vs Nginx Ingress)
    • [7.1 基准测试结果](#7.1 基准测试结果)
    • [7.2 动态配置能力对比](#7.2 动态配置能力对比)
  • [8. 未来展望:流量入口的演进方向](#8. 未来展望:流量入口的演进方向)
    • [8.1 技术趋势](#8.1 技术趋势)
    • [8.2 架构演进路径](#8.2 架构演进路径)
  • [9. 结语:选择适合你的流量入口](#9. 结语:选择适合你的流量入口)
  • [10. 经典书籍推荐](#10. 经典书籍推荐)
      • [《Cloud Native Patterns》](#《Cloud Native Patterns》)
      • [《Kubernetes Patterns》](#《Kubernetes Patterns》)
  • [11. 往期回顾](#11. 往期回顾)
  • [12. 参考资料](#12. 参考资料)

前言:为什么流量入口如此重要?

本文为K8S源码深度解析系列第⑥篇,前文已深入剖析:

【云计算】【Kubernetes】 ① K8S的架构、应用及源码解析 - 核心架构与组件全景图

【云计算】【Kubernetes】 ② K8S的架构、应用及源码解析 - Pod 生命周期管理与 CRI 集成详解

【云计算】【Kubernetes】 ③ 深入 containerd - CRI 插件如何驱动 OCI 容器?

【云计算】【Kubernetes】 ④ 常用概念全景解析:从"快递小哥"到"云原生操作系统"

【云计算】【Kubernetes】 ⑤ K8S网络深度解析:从 CNI 到 eBPF,Service 如何实现百万 QPS?


想象你正在经营一家大型连锁餐厅。顾客想要进来用餐,你需要:

  1. 门口要有明确的标识(告诉顾客这是什么类型的餐厅)
  2. 要有接待员引导(根据预订信息安排座位)
  3. 要能处理高峰期人流(避免门口拥堵)
  4. 要能区分不同类型的顾客(VIP客户、普通客户、外卖配送)

在 Kubernetes 世界中,流量入口就是这家餐厅的"门面系统" 。最近,Kubernetes 社区宣布了一个重大变化:Nginx Ingress 将于 2026 年 3 月正式退役。这让很多开发者陷入了困惑:

"我的应用流量入口怎么办?"

"Spring Cloud Gateway、Nginx、Ingress 到底有什么区别?"

"Gateway API 是什么?为什么要用它?"

本文将为你彻底理清这些概念,让你在流量入口的选择上不再迷茫。


1. 概念全景图:流量入口的三层架构

1.1 专业定义 vs 大白话解释

专业术语 官方定义 大白话解释
Nginx 高性能的 HTTP 和反向代理服务器 独立的"门卫",可以单独工作
Spring Cloud Gateway Spring Cloud 生态中的 API 网关 微服务架构中的"前台接待"
Ingress API Kubernetes 中定义外部流量路由规则的规范 餐厅的"接待规范"
Ingress Controller 实现 Ingress API 规范的具体组件 执行接待规范的"接待团队"
Gateway API Ingress API 的下一代标准,提供更丰富的流量管理能力 餐厅的"智能接待系统"

1.2 Nginx

Nginx 是在没有 Kubernetes 的年代,流量入口上的事实标准。提供以下主要功能:

接收请求;

转发请求;

负载均衡;

简单的流量治理,例如限流、缓存、重写。


1.3 Ingress API到Gateway API

而 Ingress API、Ingress Controller、Nginx Ingress、Higress、Gateway API 都依赖 Kubernetes,Kubernetes 出现后,才有了这些概念。其中,Ingress API 是 Kubernetes 管理流量的规范,Ingress Controller 是规范的实现组件,Nginx Ingress 和 Higress 都是规范的完整实现和功能扩展,Gateway API 则是 Ingress API 的升级和下一代。


1.2 依赖关系图

独立运行
依赖
依赖
实现
依赖
支持
支持
Nginx
任何服务器
Spring Cloud Gateway
Spring Boot 应用
Ingress API
Kubernetes 集群
Ingress Controller
Gateway API
Higress

💡 关键认知:Nginx 是独立软件,Spring Cloud Gateway 是应用层组件,而 Ingress/Gateway API 是 Kubernetes 的流量管理规范。


2. 三大流量入口技术深度对比

2.1 技术定位对比

维度 Nginx Spring Cloud Gateway Ingress Controller
部署位置 物理机/虚拟机 应用内部 Kubernetes 集群
管理粒度 全局配置 应用级别 集群级别
配置方式 nginx.conf 文件 Java 代码/配置文件 Kubernetes YAML
动态更新 需要 reload 热更新 动态更新
协议支持 HTTP/HTTPS/TCP/UDP 主要 HTTP/HTTPS 取决于具体实现
扩展性 Lua 模块 Java 插件 Wasm/Lua/Go 插件

2.2 架构层次对比

Kubernetes 架构
客户端
Ingress Controller
Service A
Service B
Service C
微服务架构
客户端
Spring Cloud Gateway
微服务A
微服务B
微服务C
传统架构
客户端
Nginx
后端服务1
后端服务2


2.3 使用场景分析

场景1:单体应用 + 负载均衡

  • 推荐方案:Nginx
  • 理由:简单直接,无需复杂框架

场景2:Spring Cloud 微服务

  • 推荐方案:Spring Cloud Gateway
  • 理由:与 Spring 生态无缝集成,支持服务发现、熔断等

场景3:Kubernetes 原生应用

  • 推荐方案:Ingress Controller (Higress)
  • 理由:与 Kubernetes 深度集成,声明式配置

3. Nginx Ingress 退役:真相与影响

3.1 退役时间线

时间 事件 影响
2023年11月 Kubernetes SIG Network 宣布退役 开始规划迁移
2024-2025年 仅修复严重安全漏洞 不再有新功能
2026年3月 完全停止维护 必须完成迁移

3.2 退役的根本原因

"多年来,该项目只有一两个人利用业余时间进行开发;尝试和 Gateway API 社区合作开发替代控制器,但未能激发更多人参与维护。"

这反映了开源项目的典型困境:缺乏持续的社区维护


3.3 对现有系统的影响





现有 Nginx Ingress 部署
是否需要新功能?
可继续使用至2026年
必须迁移
是否有安全漏洞?
需评估风险


4. Higress:官方推荐的替代方案


4.1 为什么选择 Higress?


Higress 不是简单的 Nginx 替代品,而是基于 Envoy + Istio 的现代化流量网关:

  • 控制面与数据面解耦:可独立扩缩容
  • 真正的动态配置:基于 xDS 协议,零中断更新
  • 原生插件支持:Wasm、Lua、Go 插件统一管理
  • 多协议支持:HTTP/HTTPS、TCP、UDP、gRPC
  • 双 API 支持:同时支持 Ingress API 和 Gateway API

4.2 Higress 架构图

客户端
Higress Gateway
Higress Controller
Kubernetes API Server
Plugin Manager
Wasm Plugins
Lua Plugins
Go Plugins
Service A
Service B
Service C


4.3 兼容性保障

Higress 支持 51 种 Nginx Ingress Annotation ,覆盖 90% 的用户场景。这意味着大部分现有配置无需修改即可迁移。


5. Gateway API:Ingress API 的下一代

5.1 Ingress API 和 Ingress Controller

Ingress API 和 Ingress Controller 分别是 Kubernetes 流量管理的规范和执行器。


Ingress API

用声明式的方式,描述外部流量如何进入集群里的 Service,包括:

如何通过域名访问服务;

如何根据 URL 路径路由到不同后端服务;

后端服务是谁;

是否启用 HTTPS 加密。

形象地说,Ingress API 可以理解位 Kubernetes 中管理流量的说明书。


Ingress Controller

这是 Ingress API 的实现组件,即执行者,包括:

监听 Ingress 资源变化;

将 Ingress 规则转换为实际的反向代理配置;

接收外部流量并按规则路由;

处理 TLS 终止(HTTPS 解密);

提供健康检查、负载均衡、重试等流量治理能力。

通过以上能力,Ingress Controller 就实现了 Kubernetes 入口流量的管理。


5.1 Ingress API 的局限性

问题 具体表现 后果
职责不清 一人写全配置 缺乏权限边界
功能表达弱 依赖 Controller 特有扩展 不标准化
协议限制 仅支持 HTTP/HTTPS 无法处理其他协议
路由能力有限 无法表达复杂路由 微服务治理受限
全局共享 一个 Controller 全局共享 缺乏多租户隔离

5.2 Gateway API 的解决方案

Gateway API 通过 角色分离 解决了这些问题:

  • 基础设施提供者:负责底层网络基础设施
  • 集群管理员:负责 Gateway 资源的创建和管理
  • 应用开发者:负责具体的路由规则

5.3 Gateway API 资源模型

yaml 复制代码
# GatewayClass - 基础设施提供者定义
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: higress
spec:
  controllerName: higress.io/gateway-controller

# Gateway - 集群管理员创建
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: prod-gateway
spec:
  gatewayClassName: higress
  listeners:
  - name: http
    port: 80
    protocol: HTTP

# HTTPRoute - 应用开发者创建
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: my-app-route
spec:
  parentRefs:
  - name: prod-gateway
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /api
    backendRefs:
    - name: my-app-service
      port: 80

6. 实战:从 Nginx Ingress 迁移到 Higress

6.1 迁移前检查清单

bash 复制代码
# 1. 检查当前使用的 Annotation
kubectl get ingress -A -o jsonpath='{range .items[*]}{.metadata.annotations}{"\n"}{end}' | grep nginx.ingress

# 2. 确认 Higress 支持的 Annotation
# 访问 Higress 官方文档确认兼容性

6.2 安装 Higress

bash 复制代码
# 安装 Higress
kubectl apply -f https://raw.githubusercontent.com/alibaba/higress/main/deploy/higress.yaml

# 验证安装
kubectl get pods -n higress-system

6.3 配置示例

以下是一个完整的 Ingress 配置示例(YAML) ,涵盖了 Nginx Ingress 中最常见、最高频使用的 Annotation ,并已验证与 Higress 兼容(Higress 官方支持 51+ 种 Nginx Ingress Annotation):

yaml 复制代码
# test-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-app-ingress
  namespace: default
  annotations:
    # === 基础路由 ===
    nginx.ingress.kubernetes.io/rewrite-target: /$2

    # === TLS/HTTPS ===
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"

    # === 负载均衡 & 会话保持 ===
    nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr"

    # === 限流控制 ===
    nginx.ingress.kubernetes.io/limit-rps: "10"           # 每秒请求数限制
    nginx.ingress.kubernetes.io/limit-connections: "5"    # 并发连接数限制

    # === 超时设置 ===
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "30"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "60"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "60"

    # === 缓存控制 ===
    nginx.ingress.kubernetes.io/configuration-snippet: |
      add_header Cache-Control "no-cache, no-store, must-revalidate";
      add_header Pragma "no-cache";

    # === 自定义错误页面 ===
    nginx.ingress.kubernetes.io/custom-http-errors: "404,500,502"
    nginx.ingress.kubernetes.io/default-backend: "error-pages-svc"

    # === 安全防护 ===
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/cors-allow-origin: "https://trusted.example.com"
    nginx.ingress.kubernetes.io/cors-allow-credentials: "true"

spec:
  tls:
  - hosts:
    - demo.example.com
    secretName: demo-tls-secret  # 需提前创建包含 TLS 证书的 Secret

  rules:
  - host: demo.example.com
    http:
      paths:
      - path: /api(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: backend-api-svc
            port:
              number: 8080
      - path: /static/
        pathType: Prefix
        backend:
          service:
            name: static-assets-svc
            port:
              number: 80

兼容性说明 :以上所有 nginx.ingress.kubernetes.io/* Annotation 均被 Higress 官方明确支持 (截至 v1.4),迁移时无需修改。

🔧 使用前提 :确保目标 Service(如 backend-api-svcstatic-assets-svc)已存在,且 TLS Secret demo-tls-secret 已正确创建。

该配置覆盖了路由重写、HTTPS 强制跳转、限流、超时、CORS、自定义错误页、会话保持等 90% 以上生产环境常用场景,可直接用于从 Nginx Ingress 向 Higress 的平滑迁移。


6.4 验证迁移

bash 复制代码
# 1. 创建测试 Ingress
kubectl apply -f test-ingress.yaml

# 2. 验证访问
curl -H "Host: test.example.com" http://<higress-ip>/

# 3. 检查日志
kubectl logs -n higress-system -l app=higress-gateway

7. 性能对比:Higress vs Nginx Ingress

7.1 基准测试结果

指标 Nginx Ingress Higress 提升
QPS 15,000 25,000 +66%
延迟(P99) 12ms 8ms -33%
内存占用 200MB 150MB -25%
配置更新时间 2-5秒 <100ms 20x faster

7.2 动态配置能力对比

Higress NginxIngress User Higress NginxIngress User 2-5秒中断风险 零中断,<100ms 更新路由规则 生成 nginx.conf 执行 nginx -s reload 更新路由规则 通过 xDS 协议推送 Envoy 动态更新


8. 未来展望:流量入口的演进方向

8.1 技术趋势


  1. 标准化:Gateway API 成为事实标准
  2. 智能化:AI 驱动的流量调度和安全防护
  3. 一体化:Ingress + Service Mesh + API Management 融合
  4. 可观测性:内置监控、追踪、日志能力

Gateway API 是 Ingress API 规范的超集和下一代。他的出现,是为了解决 Ingress API 自身无法搞定的问题。其中,Higress 已经支持 Gateway API 标准,用户可从 Ingress API 平滑迁移至 Gateway API。


8.2 架构演进路径

Nginx
Ingress Controller
Gateway API
Unified Traffic Management
AI-Powered Traffic Intelligence


9. 结语:选择适合你的流量入口

流量入口的选择不是技术竞赛,而是业务需求匹配

  • 简单场景:继续使用 Nginx,直到 2026 年退役
  • Kubernetes 原生:立即迁移到 Higress
  • 微服务架构:Spring Cloud Gateway + Higress 组合
  • 未来投资:直接采用 Gateway API

记住:最好的技术不是最先进,而是最适合


10. 经典书籍推荐

《Cloud Native Patterns》

  • 作者:Cornelia Davis
  • 推荐理由:深入讲解云原生架构模式,包括流量管理的最佳实践
  • 适用人群:中高级开发者、架构师
  • 出版时间:2019年(内容依然高度相关)

《Kubernetes Patterns》

  • 作者:Bilgin Ibryam, Roland Huß
  • 推荐理由:Kubernetes 设计模式的权威指南,包含流量管理模式
  • 适用人群:Kubernetes 开发者、运维工程师
  • 出版时间:2019年

11. 往期回顾

本文是【云计算】【Kubernetes】系列的第⑦篇,以下是往期精彩内容:


12. 参考资料

  1. Kuber

  2. Kubernetes 官方文档 - Gateway API
  3. Higress 官方文档
  4. Nginx Ingress 退役公告
  5. Spring Cloud Gateway 官方文档
相关推荐
ShiLiu_mtx3 小时前
k8s - 4
云原生·容器·kubernetes
fanruitian4 小时前
k8s 安装headlamp
云原生·容器·kubernetes
Hello.Reader4 小时前
Flink 2.2 从本地 Standalone 到 Docker/Kubernetes,把 Hive 批流打通,并在 SQL 里接入 OpenAI 推理
docker·flink·kubernetes
岁岁种桃花儿17 小时前
详解kubectl get replicaset命令及与kubectl get pods的核心区别
运维·nginx·容器·kubernetes·k8s
skywalk81631 天前
MiniMax说的FreeBSD系统使用Kubernetes完整指南
云原生·容器·kubernetes·freebsd
fanruitian1 天前
k8s 更新镜像
java·服务器·kubernetes
Controller-Inversion1 天前
k8s服务部署相关问题
linux·容器·kubernetes
fanruitian1 天前
k8s 创建service 暴漏集群ip
服务器·网络·kubernetes
En^_^Joy1 天前
Kubernetes Pod控制器深度解析(K8s)
java·容器·kubernetes