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

更新Nginx Ingress Controller Helm Chart遇权限错误,如何禁用自定义资源?

解决Nginx Ingress Controller Helm更新时的CRD权限错误

问题原因

你遇到的cannot list virtualserverroutes.k8s.nginx.org at cluster scope错误,是因为Nginx Ingress Controller默认启用了对VirtualServerRoute这类自定义资源(CRD)的支持,但当前集群中对应的ClusterRole没有授予该资源的集群级list权限,或者你本身不需要使用这类CRD。

能不能禁用自定义资源?

可以,但不建议手动修改deployment.yaml/daemonset.yaml(Helm部署下手动修改的配置会在下次upgrade时被覆盖),正确的方式是通过Helm的values配置项来禁用,这也是Helm部署的最佳实践。

具体操作步骤

  1. 确认Chart的控制参数:
    官方nginxinc维护的Helm Chart中,控制自定义资源启用的参数为controller.enableCustomResources;部分衍生Chart可能使用controller.config.use-custom-resources,可直接查看Chart自带的values.yaml文件确认。

  2. 执行升级时指定禁用参数:

    helm upgrade nginx-ingress nginx-stable/nginx-ingress --set controller.enableCustomResources=false
    

    或者将配置写入自定义values.yaml后执行升级:

    helm upgrade nginx-ingress nginx-stable/nginx-ingress -f your-custom-values.yaml
    
  3. 可选:彻底禁用相关CRD组件
    如果完全不需要VirtualServer、VirtualServerRoute这类CRD,可在values.yaml中添加以下配置:

    controller:
      virtualServer:
        enabled: false
      virtualServerRoute:
        enabled: false
    

关于GitHub案例的说明

你看到的手动修改deployment/daemonset的案例,大多是非Helm部署的场景(比如直接用yaml文件部署)。Helm部署依赖values配置生成资源文件,手动修改生成后的yaml会破坏Helm的状态管理,后续升级会丢失修改,所以优先用values配置更稳妥。

替代方案(若需保留CRD)

如果业务需要使用VirtualServerRoute等CRD,需检查并更新对应的ClusterRole,确保包含以下权限规则:

rules:
- apiGroups: ["k8s.nginx.org"]
  resources: ["virtualserverroutes"]
  verbs: ["list", "watch", "get", "update", "create", "delete"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:05:27