欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在 K8s 集群中,如何部署多个独立的 Ingress-Nginx 实例?

最编程 2024-07-24 07:25:11
...

背景

如果想在集群中部署多个 Ingress-Nginx 实例,或者在一个命名空间下部署多个实例,需要对ingress-controller 设置额外的启动参数,以免遇到创建的 ingress 资源的 status IP 被同步为空或者被抢占同步为其他实例的 Service IP 的异常行为。

操作步骤

1. 配置关键启动参数。

如多实例不在同一个命名空间,使用如下配置:

...
  - args:
    - /nginx-ingress-controller
    - --controller-class=k8s.io/prod-internal # 控制器类, 必须唯一
    ...
    - --ingress-class=prod-internal # ingress 类, 必须唯一
    ...
...

如多实例在需要在同一个命名空间, 使用如下配置:

...
  - 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 资源:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: prod-internal
spec:
  controller: k8s.io/prod-internal

3. 创建 Ingress 资源时使用 ingressClass 字段指定相关实例类:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: jokey-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/

推荐阅读