背景
如果想在集群中部署多个 Ingress-Nginx 实例,或者在一个命名空间下部署多个实例,需要对 ingress-controller 设置额外的启动参数,以免遇到创建的 ingress 资源的 status IP 被同步为空或者被抢占同步为其他实例的 Service IP 的异常行为。
操作步骤
1. 配置关键启动参数。
如多实例不在同一个命名空间,使用如下配置:
代码语言:yaml复制...
- args:
- /nginx-ingress-controller
- --controller-class=k8s.io/prod-internal # 控制器类, 必须唯一
...
- --ingress-class=prod-internal # ingress 类, 必须唯一
...
...
如多实例在需要在同一个命名空间, 使用如下配置:
代码语言:yaml复制...
- args:
- /nginx-ingress-controller
- --election-id=ingress-controller-leader-prod-internal # 选举ID, 必须唯一
- --controller-class=k8s.io/prod-internal # 控制器类, 必须唯一
...
- --ingress-class=prod-internal # ingress 类, 必须唯一
...
...
2. 创建 ingressClass 资源:
代码语言:yaml复制apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: prod-internal
spec:
controller: k8s.io/prod-internal
3. 创建 Ingress 资源时使用 ingressClass 字段指定相关实例类:
代码语言:yaml复制apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test
namespace: prod
spec:
ingressClassName: prod-internal
rules:
- host: "foo.bar.com"
http:
paths:
- path: /testpath
pathType: Prefix
backend:
service:
name: xwd-social
port:
number: 80
参考相关 issues:
https://github.com/kubernetes/ingress-nginx/issues/7890
https://github.com/kubernetes/ingress-nginx/issues/8215
参考官文:https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/