K8s: несколько правил входа nginx-ingress-controller в GKE

#nginx #kubernetes #nginx-ingress

#nginx #kubernetes #nginx-вход

Вопрос:

У меня есть общее правило входа для домена *.foo.com , а затем у меня есть одно конкретное правило для домена a.foo.com . Согласно документации, правило входа для a.foo.com должно иметь приоритет над правилом с подстановочным знаком (потому что оно лучше подходит, чем подстановочный знак). Однако этого не происходит. Как мне явно установить приоритеты? Что я делаю не так?

Вот мое общее правило входа:

 $ kubectl describe ing foo
Name:             foo
Namespace:        foo
Address:          x.x.x.x
Default backend:  default-http-backend:80 (x.x.x.x:8080)
TLS:
  foo.com terminates *.foo.com
Rules:
  Host             Path  Backends
  ----             ----  --------
  *.foo.com
                   /   foo:8888 (<none>)
  

Вот правило, зависящее от домена:

 $ kubectl describe ing foo-a
Name:             foo-a
Namespace:        foo
Address:          x.x.x.x
Default backend:  default-http-backend:80 (x.x.x.x:8080)
TLS:
  foo.com terminates a.foo.com
Rules:
  Host                                Path  Backends
  ----                                ----  --------
  a.foo.com
                                      /hello   foo-a:8080 (<none>)
  

Ответ №1:

Вам нужно будет настроить каждый из ваших контроллеров nginx-ingress на другое ingress-class имя. Затем в вашем определении входа вы должны указать kubernetes.io/ingress.class: "my-ingress" , чтобы указать на контроллер входа, который вы хотите использовать для этого конкретного входа.

Подробности настройки включены в [документы nginx-ingress].(https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress /)

Надеюсь, это поможет!

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

1. Да, я в курсе этого. Однако это приведет к пустой трате ресурсов. Мое текущее решение для этого — использовать *.foo.com в качестве сертификата TLS по умолчанию и не указывать имя сертификата TLS для a.foo.com .