You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes v1.22部署Nginx Ingress Controller报找不到IngressClass nginx错误

问题根因分析

你遇到的报错核心是Nginx Ingress Controller(简称IC)无法正常识别已存在的IngressClass资源,常见原因如下:

  1. 版本不兼容:你部署的IC v1.12.1最高适配Kubernetes v1.21版本,而你的集群是v1.22.1,该版本已经正式移除了networking.k8s.io/v1beta1版本的IngressClass API。旧版本IC默认请求v1beta1接口查询资源,即使你用v1 API创建了IngressClass,IC也无法从老接口获取到对应资源,就会返回找不到的报错。
  2. RBAC权限不足:Kubernetes的RBAC机制为了防止资源枚举,当服务账号没有对应资源的访问权限时,会返回404而非403错误。如果nginx-ingress对应的服务账号没有ingressclasses资源的get权限,也会触发该报错。
  3. 启动参数不匹配:如果IC启动参数中指定的--ingress-class值和你创建的IngressClass名称不一致,也会出现找不到对应资源的问题。

排查步骤

  • 验证版本兼容性:直接升级Nginx Ingress Controller到v1.20及以上版本,该版本开始正式支持Kubernetes v1.22的v1版本Ingress相关API。
  • 校验RBAC权限:执行命令kubectl auth can-i get ingressclasses --as=system:serviceaccount:nginx-ingress:nginx-ingress,如果返回no,则需要在nginx-ingress对应的ClusterRole中添加如下权限配置:
- apiGroups: ["networking.k8s.io"]
  resources: ["ingressclasses"]
  verbs: ["get", "list", "watch"]
  • 检查启动参数:执行kubectl get deployment -n nginx-ingress nginx-ingress -o yaml,查看spec.template.spec.containers[0].args字段,确认存在--ingress-class=nginx参数,和你创建的IngressClass名称完全一致。
  • 确认IngressClass API版本:执行kubectl get ingressclass nginx -o yaml,确认顶部apiVersion字段为networking.k8s.io/v1,如果是旧版本API创建的资源,删除后重新用v1版本配置创建即可。

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:18:00