ingress-nginx 退场倒计时下,如何评估 F5 NGINX Ingress Controller 5.3.0

2026-07-06 26 预计阅读时间: 1 分钟
来源: my.oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

F5 NGINX Ingress Controller 5.3.0 的发布赶上了一个很现实的时间点:Kubernetes 社区已经宣布,社区维护的 ingress-nginx 项目将在 2026 年 3 月停用。对很多集群来说,Ingress 不是边缘组件,而是生产流量进入服务的第一道门。现在需要做的不是临时换个镜像,而是重新盘点 ingress 策略、控制器能力、迁移风险和运维边界。

这次发布为什么值得关注

5.3.0 本身是一条版本线,但它背后的问题更大:大量团队长期把 ingress-nginx 当作 Kubernetes 默认答案。它熟悉、文档多、示例多,也被许多 Helm chart 和平台模板默认引用。一旦社区维护进入停用倒计时,风险会逐步转移到使用方:安全修复、兼容性、升级路径、生产事故响应,都需要重新评估。

F5 NGINX Ingress Controller 的吸引力在于它仍然围绕 NGINX 这个开发者熟悉的代理栈展开。对于已经使用 NGINX 配置模型、熟悉 Ingress 资源、希望保留开源选择的团队,它比彻底换到另一套网关模型更容易进入评估清单。

需要注意的是,版本号本身不等于迁移完成。控制器行为、注解兼容性、TLS 处理、负载均衡策略、日志格式、Prometheus 指标、WAF 或高级流量策略,都会影响真实工作量。

从“能跑”到“可运营”的评估维度

迁移 ingress 控制器时,最容易低估的是注解和默认行为。Ingress API 是标准的,但控制器注解不是。一个集群里常见的这些配置都可能绑定在 ingress-nginx 的实现上:

  • 请求体大小限制
  • 连接和读取超时
  • rewrite 规则
  • upstream keepalive
  • TLS redirect
  • canary 或灰度路由
  • 真实客户端 IP 透传
  • 自定义 NGINX snippet

因此评估 F5 NGINX Ingress Controller 5.3.0 时,建议把现有 Ingress 当作“配置资产”而不是普通 YAML。先扫描、归类,再决定哪些可以等价迁移,哪些需要改成新的资源或控制器支持的配置方式。

可以这样实践:先列出集群里所有 Ingress 及其注解,找出对 ingress-nginx 的直接依赖。

kubectl get ingress --all-namespaces -o json \
  | jq -r '.items[] | [
      .metadata.namespace,
      .metadata.name,
      ((.metadata.annotations // {}) | keys | join(","))
    ] | @tsv'

如果你只想看 ingress-nginx 相关注解,可以运行:

kubectl get ingress --all-namespaces -o json \
  | jq -r '.items[] |
    select((.metadata.annotations // {}) | keys[]? | startswith("nginx.ingress.kubernetes.io/")) |
    "\(.metadata.namespace)/\(.metadata.name)"'

这一步很朴素,但很关键。它能把“我们应该没用什么特殊能力”变成可检查的清单。

一个可改造的最小 Ingress 示例

下面是一个最小示例,用来说明迁移评估时应把 ingressClassName 明确写出来。不同控制器的 class 名称需要按实际安装方式调整;这里假设目标控制器使用 nginx 作为 IngressClass 名称。

运行前需要修改:

  • host 改成你的测试域名
  • service.name 改成你的服务名
  • service.port.number 改成服务端口
  • ingressClassName 改成实际安装的 F5 NGINX Ingress Controller 对应 class
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-web
  namespace: default
spec:
  ingressClassName: nginx
  rules:
    - host: demo.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: demo-web
                port:
                  number: 80

应用到测试环境:

kubectl apply -f demo-ingress.yaml
kubectl describe ingress demo-web -n default
kubectl get ingressclass

验证请求路径时,不要只看 kubectl get ingress 是否出现地址。还应该直接向入口地址发请求,确认 Host、TLS、重定向和后端服务行为符合预期。

curl -i -H 'Host: demo.example.com' http://INGRESS_ADDRESS/

INGRESS_ADDRESS 替换为负载均衡器地址、节点地址或本地测试入口。

迁移时不要跳过并行验证

生产集群里直接替换默认 IngressClass 风险很高。更稳妥的做法是让新旧控制器短期并行,用不同的 ingressClassName 承接不同测试对象。这样可以逐个服务验证,而不是把所有路由一次性切过去。

可以这样实践:为新控制器保留单独 class,然后只迁移一个低风险服务。

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: f5-nginx
spec:
  controller: nginx.org/ingress-controller

随后业务 Ingress 使用:

spec:
  ingressClassName: f5-nginx

这里的 spec.controller 需要以你实际安装文档和控制器参数为准。示例表达的是迁移方法:通过 IngressClass 隔离流量入口,而不是修改所有现有资源。

在并行阶段,建议至少记录这些结果:

  • 每个服务是否依赖 ingress-nginx 专属注解
  • HTTP 到 HTTPS 的跳转是否一致
  • 大请求、长连接、WebSocket 是否正常
  • 真实客户端 IP 是否被应用正确读取
  • 访问日志字段是否满足排障需求
  • Prometheus 指标名称和告警规则是否需要调整
  • 回滚时 DNS、负载均衡器和 IngressClass 如何恢复

采用建议:把 2026 年 3 月当作工程截止线

ingress-nginx 停用不是某一天突然发生的事故,而是一个明确的维护边界。越早开始,越容易用小批量服务验证;越晚开始,越容易在安全升级、平台改造和业务发布之间抢窗口。

对 F5 NGINX Ingress Controller 5.3.0 的评估可以从三件事开始:

  1. 扫描现有 Ingress 和注解,建立迁移清单。
  2. 在非生产集群安装并配置独立 IngressClass,跑真实业务样例。
  3. 对比日志、指标、TLS、重写、超时和回滚流程,而不是只验证 200 OK。

如果你的团队已经围绕 NGINX 建立了排障经验和配置习惯,F5 NGINX Ingress Controller 是一个值得认真验证的候选项。但它仍然需要一次工程化迁移:把隐含行为显式化,把专属注解清点出来,把入口流量切换做成可回滚的步骤。这样到社区 ingress-nginx 停用时,你面对的是计划内变更,而不是被动救火。


相关推荐