Kubernetes双Ingress-Nginx控制器问题:删除及新增部署方案
一、删除/禁用第二个Ingress-Nginx控制器
先定位第二个控制器的资源信息,再针对性清理:
- 先确认集群中所有Ingress控制器的Pod,区分出第二个控制器(可通过创建时间、命名空间判断):
kubectl get pods -A -l app.kubernetes.io/name=ingress-nginx - 如果第二个控制器是通过Helm部署的:
- 先查找对应的Helm发布名:
helm list -A - 卸载该发布:
helm uninstall <release-name> -n <对应命名空间>
- 先查找对应的Helm发布名:
- 如果是通过YAML清单部署的:
- 导出该控制器的所有关联资源(替换成目标命名空间):
kubectl get all -n <命名空间> -l app.kubernetes.io/name=ingress-nginx -o yaml > temp-nginx-resources.yaml - 删除这些资源:
kubectl delete -f temp-nginx-resources.yaml
kubectl delete namespace <命名空间>) - 导出该控制器的所有关联资源(替换成目标命名空间):
- 清理遗留的IngressClass:
- 查看所有IngressClass资源:
kubectl get ingressclass - 删除第二个控制器对应的IngressClass:
kubectl delete ingressclass <目标ingressclass名称>
- 查看所有IngressClass资源:
二、同一集群部署多Ingress-Nginx控制器的方案
要让Kubernetes准确路由流量,核心是通过IngressClass实现控制器与Ingress资源的绑定,步骤如下:
- 为新控制器创建独立的IngressClass资源:
(名称需与现有控制器的IngressClass完全区分)apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: nginx-app2 spec: controller: k8s.io/ingress-nginx - 部署新控制器时绑定该IngressClass:
- Helm部署示例:
helm install nginx-app2 ingress-nginx/ingress-nginx \ --namespace nginx-app2 \ --create-namespace \ --set controller.ingressClass.name=nginx-app2 \ --set service.type=LoadBalancer - YAML部署需修改控制器Deployment的启动参数,添加
--ingress-class=nginx-app2,确保与上述IngressClass关联。
- Helm部署示例:
- 应用的Ingress资源指定对应IngressClass:
这样新控制器只会处理绑定了apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app2-ingress spec: ingressClassName: nginx-app2 rules: - host: app2.example.com http: paths: - path: / pathType: Prefix backend: service: name: app2-service port: number: 80nginx-app2的Ingress资源,与原有控制器互不干扰。
内容的提问来源于stack exchange,提问作者victor Pafume
相关产品推荐
相关产品推荐

