Size: a a a

Kubernetes — русскоговорящее сообщество

2020 December 01

E

Eugene in Kubernetes — русскоговорящее сообщество
Dmitry Sergeev
я новым API ingress не пользовался 🤷🏻‍♂️
1.Обновил ингресс до последней версии(0.41.2)
2.Привел конфигурацию в соответствие
https://pastebin.com/0EpK9ygc

3.Но по факту не работает строгое совпадение
Такое очущение,что оно вообще игнорится (возможно из-за того,что в одном из ингрессов  использую регулярку для того же домена, где использую и строгое совпадение (PathType: Exact) и ingress-nginx везде лепит регулярку)

Запросы к / trade_ws направляются в service-1, но они должны быть направлены в service-2 в соответствии с нашими входными настройками
Строгие Root-запросы в / должны быть направлены в service-1, но на самом деле они направляются в service-2

Если посмотреть в конфиг nginx-ingress-контроллера, который он динамически сгенерировал на основе описанных мной ingress-ресурсов, то
строгого совпадения вообще нигде нет (везде регулярка) + наиболее непонятное для меня, почему оба localtion на корень(/) направлены на service-1, хотя в конфигурации ингресс-обекта видно,что строгое - на service-1, а все остальное(префиксное) - на service-2

Здесь я представил полную выкладку конфигов/ингрессов,возможно, кто-то подскажет, в чем я ошибся
https://pastebin.com/0EpK9ygc
источник

c

corsars in Kubernetes — русскоговорящее сообщество
А почему у вас в path одинаковые сервисы ?
источник

DS

Dmitry Sergeev in Kubernetes — русскоговорящее сообщество
Eugene
1.Обновил ингресс до последней версии(0.41.2)
2.Привел конфигурацию в соответствие
https://pastebin.com/0EpK9ygc

3.Но по факту не работает строгое совпадение
Такое очущение,что оно вообще игнорится (возможно из-за того,что в одном из ингрессов  использую регулярку для того же домена, где использую и строгое совпадение (PathType: Exact) и ingress-nginx везде лепит регулярку)

Запросы к / trade_ws направляются в service-1, но они должны быть направлены в service-2 в соответствии с нашими входными настройками
Строгие Root-запросы в / должны быть направлены в service-1, но на самом деле они направляются в service-2

Если посмотреть в конфиг nginx-ingress-контроллера, который он динамически сгенерировал на основе описанных мной ingress-ресурсов, то
строгого совпадения вообще нигде нет (везде регулярка) + наиболее непонятное для меня, почему оба localtion на корень(/) направлены на service-1, хотя в конфигурации ингресс-обекта видно,что строгое - на service-1, а все остальное(префиксное) - на service-2

Здесь я представил полную выкладку конфигов/ингрессов,возможно, кто-то подскажет, в чем я ошибся
https://pastebin.com/0EpK9ygc
У тебя там какая-то дич из кучи ingress
Я повотрюсь - я новый API не щупал. Смотри что там в nginx.conf в итоге. По эксперементируй
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
corsars
А почему у вас в path одинаковые сервисы ?
В path для корня в nginx.conf-файле контроллера?
Если да, то меня это тоже удивляет,почему так конфигурационный файл был сгенерирован, ведь в описанни ингресса + при деплои видно,что там типа логика такая,которую я и ожидаю получить
источник

SO

Sergey Olisov in Kubernetes — русскоговорящее сообщество
Sergey Shevchenko
Народ а кто то использует кубер на базе aws fargate? выглядит вроде любопытно. Интересно это будет проще и дешевле или нет?
Я использую. Зависит от задачи.  у фаргейта есть ряд ограничений по сравнению с EC2
источник

c

corsars in Kubernetes — русскоговорящее сообщество
Eugene
В path для корня в nginx.conf-файле контроллера?
Если да, то меня это тоже удивляет,почему так конфигурационный файл был сгенерирован, ведь в описанни ингресса + при деплои видно,что там типа логика такая,которую я и ожидаю получить
Более того, нужно ещё указать как будет обработана сессия пользователя в куках, какой афтнити поставить для сессии. Отсюда https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/affinity/cookie
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
Dmitry Sergeev
У тебя там какая-то дич из кучи ingress
Я повотрюсь - я новый API не щупал. Смотри что там в nginx.conf в итоге. По эксперементируй
Там 3 ингресса
Первый для корешка и /trade_ws  (типа без использования регулярки)
Второй - для префиксных совпадений(с подключением регулярки)
Третий - дефолтный - для всех тех,кто ломится по IP-адресу(на нем я разрешаю доступ только whitelist-списку адресов)
источник

c

corsars in Kubernetes — русскоговорящее сообщество
Eugene
Там 3 ингресса
Первый для корешка и /trade_ws  (типа без использования регулярки)
Второй - для префиксных совпадений(с подключением регулярки)
Третий - дефолтный - для всех тех,кто ломится по IP-адресу(на нем я разрешаю доступ только whitelist-списку адресов)
Вот три разных пути должно быть на сервисы. Почему везде один service 1 ?
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
corsars
Вот три разных пути должно быть на сервисы. Почему везде один service 1 ?
Почему везде service-1?

Точное совпадение корня - service-1
Префиксное совпадение корня - service-2 (все, что не строгое корень идет сюда)
Строгое совпадение /trade_ws - service-2 ( т.к. все,где есть вхождение /trade идет на service-1 благодаря правилу,указанному в ингресе ingress-nginx-subroutes)

     paths:
     - path: /
       pathType: Exact
       backend:
         serviceName: service-1
         servicePort: 80
     - path: /
       pathType: Prefix
       backend:
         serviceName: service-2
         servicePort: 80
     - path: /trade_ws
       pathType: Exact
       backend:
         serviceName: service-2
         servicePort: 80


Ну а в ингресе ingress-nginx-subroutes
я определяю роуты, которые мне нужно направить на service-1 т.к. все,что не строгий корень идет на service-2 согласно правилу из ингресса ingress-nginx-main
источник

c

corsars in Kubernetes — русскоговорящее сообщество
Eugene
Почему везде service-1?

Точное совпадение корня - service-1
Префиксное совпадение корня - service-2 (все, что не строгое корень идет сюда)
Строгое совпадение /trade_ws - service-2 ( т.к. все,где есть вхождение /trade идет на service-1 благодаря правилу,указанному в ингресе ingress-nginx-subroutes)

     paths:
     - path: /
       pathType: Exact
       backend:
         serviceName: service-1
         servicePort: 80
     - path: /
       pathType: Prefix
       backend:
         serviceName: service-2
         servicePort: 80
     - path: /trade_ws
       pathType: Exact
       backend:
         serviceName: service-2
         servicePort: 80


Ну а в ингресе ingress-nginx-subroutes
я определяю роуты, которые мне нужно направить на service-1 т.к. все,что не строгий корень идет на service-2 согласно правилу из ингресса ingress-nginx-main
Я про то зачем ты описываешь Service 1 в ингрессе если это можно сделать через LB + у тебя нет пути до backend (service2) в твоем конфиге
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
corsars
Я про то зачем ты описываешь Service 1 в ингрессе если это можно сделать через LB + у тебя нет пути до backend (service2) в твоем конфиге
Не понимаю вопроса
С помощью ингресс-ресурсов я составояю карту маршрутов для nginx-ingress-контроллера, благодаря которой последний проксирует нужные мне роуты на разные бекенды
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
corsars
Я про то зачем ты описываешь Service 1 в ингрессе если это можно сделать через LB + у тебя нет пути до backend (service2) в твоем конфиге
И что такое ?
 у тебя нет пути до backend (service2) в твоем конфиге
источник

c

corsars in Kubernetes — русскоговорящее сообщество
Eugene
И что такое ?
 у тебя нет пути до backend (service2) в твоем конфиге
На service2 ничего не придет в таком конфиге
источник

c

corsars in Kubernetes — русскоговорящее сообщество
Вы через HELM это делали 😉 ?
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
corsars
На service2 ничего не придет в таком конфиге
# kubectl describe ing ingress-nginx-main
Name:             ingress-nginx-main
Namespace:        default
Address:          192.168.100.5,192.168.100.6,192.168.100.7
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
 Host                  Path  Backends
 ----                  ----  --------
 stage2.mydomain.com
                       /           service-1:80 (10.20.16.140:9999)
                       /           service-2:80 (10.20.146.39:80,10.20.16.107:80,10.20.23.112:80)
                       /trade_ws   service-2:80 (10.20.146.39:80,10.20.16.107:80,10.20.23.112:80)

Почему конфиг генерируется service-1 ТОЛЬКО, а должен включать согласно выше представленнуому ингресу как service-1 так и service-2 - это тоже для меня загадка
    location ~* "^/" {
       set $ingress_name   "ingress-nginx-main";
       set $service_name   "service-1";
       set $service_port   "80";
       set $location_path  "/";

   location ~* "^/" {
       set $ingress_name   "ingress-nginx-main";
       set $service_name   "service-1";
       set $service_port   "80";
       set $location_path  "/";
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
corsars
Вы через HELM это делали 😉 ?
Да
источник

c

corsars in Kubernetes — русскоговорящее сообщество
Eugene
Да
Тогда понятно. Вопросов нет
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
corsars
Тогда понятно. Вопросов нет
Это он так интрпретирует и разламывает мою логику?
источник

A

Anton in Kubernetes — русскоговорящее сообщество
Ребят привет. Подскажите, обновил сертификат на кубике. Сейчас при просмотре сервисов такая ошибка
root@bit-kub01$ kubectl get service
error: You must be logged in to the server (the server has asked for the client to provide credentials)
В чем может быть проблема?
источник

DS

Dmitry Sergeev in Kubernetes — русскоговорящее сообщество
Eugene
# kubectl describe ing ingress-nginx-main
Name:             ingress-nginx-main
Namespace:        default
Address:          192.168.100.5,192.168.100.6,192.168.100.7
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
 Host                  Path  Backends
 ----                  ----  --------
 stage2.mydomain.com
                       /           service-1:80 (10.20.16.140:9999)
                       /           service-2:80 (10.20.146.39:80,10.20.16.107:80,10.20.23.112:80)
                       /trade_ws   service-2:80 (10.20.146.39:80,10.20.16.107:80,10.20.23.112:80)

Почему конфиг генерируется service-1 ТОЛЬКО, а должен включать согласно выше представленнуому ингресу как service-1 так и service-2 - это тоже для меня загадка
    location ~* "^/" {
       set $ingress_name   "ingress-nginx-main";
       set $service_name   "service-1";
       set $service_port   "80";
       set $location_path  "/";

   location ~* "^/" {
       set $ingress_name   "ingress-nginx-main";
       set $service_name   "service-1";
       set $service_port   "80";
       set $location_path  "/";
Про helm вам сказали ерунду, вероятно не сильно вникая в суть вашей проблемы. Тут helm конечно не при делах. Конфиг генерит контроллер.

из доки по контроллеру про nginx.ingress.kubernetes.io/use-regex
When this annotation is set to true, the case insensitive regular expression location modifier will be enforced on ALL paths for a given host regardless of what Ingress they are defined on.
источник