K8S 集群创建多个 Ingress-Nginx 实例

2024-02-28 13:24:06 浏览数 (2)

背景

如果想在集群中部署多个 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/

0 人点赞