GKE环境下无法新增部署多个ingress-nginx实例该如何解决?
报错根因
IngressClass是Kubernetes的集群级资源,默认配置下ingress-nginx的官方helm chart安装时会自动创建名为nginx的IngressClass,该资源的所有权归属于第一个安装的helm release(即你环境中的ingress-nginx-01)。第二个实例安装时会尝试创建同名的IngressClass,触发所有权校验失败,就是你收到的报错。
解决方案
多实例部署推荐使用每个实例对应独立IngressClass的方案,逻辑隔离清晰,不会出现规则冲突。安装第二个实例时指定自定义IngressClass参数即可,命令如下:
helm install ingress-nginx-02 ingress-nginx/ingress-nginx \ --set controller.ingressClass.name=nginx-02 \ --set controller.ingressClassController=k8s.io/ingress-nginx-02
参数说明:
controller.ingressClass.name:自定义新实例对应的IngressClass名称,不能和已有的nginx重名controller.ingressClassController:自定义控制器的识别标识,只有Ingress资源的ingressClassName字段等于上方设置的IngressClass名称,或是Ingress注解kubernetes.io/ingress.class等于该值的规则,才会被当前实例处理。
如果需要部署更多实例,只需将命令中的nginx-02、ingress-nginx-02替换为对应序号即可。
可选方案(不推荐)
如果你需要多个实例共用已有的nginx IngressClass,可以安装时关闭IngressClass的创建:
helm install ingress-nginx-02 ingress-nginx/ingress-nginx \ --set controller.ingressClass.create=false
注意:该方案下所有匹配
nginxIngressClass的规则会被所有实例同时加载,容易出现流量调度异常,非特殊场景不建议使用。
验证方法
安装完成后执行如下命令,能看到多个独立的IngressClass资源即部署成功:
kubectl get ingressclass
内容的提问来源于stack exchange,提问作者mitchldtn
相关产品推荐
相关产品推荐

