Несколько входных контроллеров Nginx в одном пространстве имен?

#nginx #kubernetes #kubernetes-ingress #azure-aks #nginx-ingress

Вопрос:

Насколько я понимаю, мы можем использовать аннотацию входного класса для использования нескольких входных контроллеров Nginx в кластере. Но у меня есть вариант использования, когда мне нужно использовать несколько контроллеров входа в одном пространстве имен, чтобы предоставлять разные службы в одном пространстве имен, используя соответствующие созданные правила входа. Я следую https://kubernetes.github.io/ingress-nginx/deploy/#azure чтобы создать образец контроллера входа. Какие все параметры я должен изменить, если хочу иметь несколько входных контроллеров Nginx в одном пространстве имен.

Заранее спасибо

Ответ №1:

Из вашего поста неясно, собираетесь ли вы развернуть несколько контроллеров входа nginx или разные контроллеры входа. Однако оба они могут быть развернуты в одном пространстве имен.

В случае развертывания разных контроллеров входа должно быть достаточно просто развернуть в одном пространстве имен и использовать аннотации классов, чтобы указать, какое правило входа обрабатывается каким контроллером входа. Однако в случае, если вы хотите развернуть несколько контроллеров входа nginx в одном пространстве имен, вам придется использовать обновление имени/меток или других идентификаторов до чего-то другого.

Например, Ссылка, которую вы упомянули, https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/cloud/deploy.yaml , необходимо будет обновить, как —

 apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    helm.sh/chart: ingress-nginx-3.33.0
    app.kubernetes.io/name: ingress-nginx-internal
    app.kubernetes.io/instance: ingress-nginx-internal
    app.kubernetes.io/version: 0.47.0
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
  name: ingress-nginx-internal
  namespace: ingress-nginx
automountServiceAccountToken: true
 

предполагая, что мы вызываем 2-й контроллер nginx-ingress как ingress-nginx-внутренний; Аналогично, все ресурсы, созданные в вашей ссылке, должны быть изменены и развернуты в одном пространстве имен.

Кроме того, вам придется обновить параметры развертывания, чтобы указать ingress.class, ваши контроллеры будут нацелены —

 spec:
  template:
     spec:
       containers:
         - name: nginx-ingress-internal-controller
           args:
             - /nginx-ingress-controller
             - '--ingress-class=nginx-internal'
             - '--configmap=ingress/nginx-ingress-internal-controller'
 

Ссылка https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/ объясняет, как управлять несколькими входными контроллерами.

Комментарии:

1. Спасибо за ответ. Я хочу, чтобы несколько входных контроллеров Nginx находились в одном пространстве имен. Я застрял в понимании того, какие все ярлыки мне нужно обновить в этом случае.

2. Круто. этикетки app.kubernetes.io/name и app.kubernetes.io/instance их необходимо будет обновить, чтобы сделать их идентифицируемыми [ссылка] ( kubernetes.io/docs/concepts/overview/working-with-objects/… ) , наряду с metadata.name . Также не забудьте указать новое имя в других создаваемых ресурсах.

3. Эй, @JithinZachariah — Не могли бы вы, пожалуйста, принять ответ, если решение сработало.

4. Эй, Кумар, я предполагаю, что разные классы входа необходимы только в том случае, если контроллеры входа развернуты в одном пространстве имен. Это правильно?

5. Не совсем. Независимо от того, в каком пространстве имен развернут входной контроллер, они оба могут конфликтовать. Использование классов входа указывает вашему правилу входа использовать определенный контроллер входа.