同一AKS集群安装多个nginx ingress controller实例报错如何解决
同一AKS集群安装多实例Nginx Ingress Controller的正确方案
错误原因
你遇到的报错是因为ingress-nginx官方Helm Chart默认会创建名称为nginx的全局IngressClass集群资源,两次安装时未修改该资源的默认名称,导致重复创建冲突。
正确安装步骤
所有实例安装时都需要额外指定3个核心参数,保证IngressClass相关配置全局唯一:
controller.ingressClass:controller监听的IngressClass名称controller.ingressClassResource.name:实际创建的IngressClass资源名称,需和上面的参数值保持一致controller.ingressClassResource.controllerValue:controller的唯一标识,用于区分不同实例,避免多实例争抢Ingress规则
安装第一个实例
helm install ingress1 ingress-nginx/ingress-nginx \ --namespace namespace1 \ --create-namespace \ --set controller.ingressClass=class1 \ --set controller.ingressClassResource.name=class1 \ --set controller.ingressClassResource.controllerValue="k8s.io/ingress-nginx-class1"
安装第二个实例
helm install ingress2 ingress-nginx/ingress-nginx \ --namespace namespace2 \ --create-namespace \ --set controller.ingressClass=class2 \ --set controller.ingressClassResource.name=class2 \ --set controller.ingressClassResource.controllerValue="k8s.io/ingress-nginx-class2"
验证与使用
安装完成后执行kubectl get ingressclass,可看到class1、class2两个独立的IngressClass资源。后续创建Ingress时,在资源配置中指定spec.ingressClassName为对应的值,即可被对应实例处理。
如果之前已经安装了第一个实例不想重新部署,可手动修改名称为nginx的IngressClass资源名称为class1,并同步调整对应的controller配置匹配即可。
内容的提问来源于stack exchange,提问作者Franco Tiveron
相关产品推荐
相关产品推荐

