Size: a a a

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

2020 December 01

GG

George Gaál in Kubernetes — русскоговорящее сообщество
А ты хочешь именно кастомный порт ? Или кастомный адрес для ингресса Ранчера ?
источник

AL

Aleksey Lazarev in Kubernetes — русскоговорящее сообщество
Andru Cherny
Ребята, кто-то вешал морду ранчера на кастомный порт?
Что значит кастомный порт?
источник

AC

Andru Cherny in Kubernetes — русскоговорящее сообщество
Я хочу чтоб консоль ранчера(пода) не залипала. Короче если у кого-то остались конфиги можете скинуть. По факту получается что на кастомный порт
источник

GG

George Gaál in Kubernetes — русскоговорящее сообщество
Andru Cherny
Я хочу чтоб консоль ранчера(пода) не залипала. Короче если у кого-то остались конфиги можете скинуть. По факту получается что на кастомный порт
Т.е. все таки не хочешь на отдельные айпи ?
источник

AC

Andru Cherny in Kubernetes — русскоговорящее сообщество
George Gaál
Т.е. все таки не хочешь на отдельные айпи ?
Зачем. Айпишники то не резиновые
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
Aleksey Lazarev
Ну дык поставть в регулярку !trade_ws
Конкретнее можете подсказать?
Я тестировал разные варианты на сервисе https://nginx.viraptor.info/, но только такой вариант
дает требуемый мне результат
location ~* "^/(ru|es|)/(orders|trade(?!_ws)|login)"
Но при попытке задеплоить хельмом в кластер, при рендеринге не проходит синтаксис  с ошибкой
must be a valid regex
Причина в символе
?
, но без него нужная мне логика не работает
Если этот символ экранировать обратным слешем, то синтаксис валиден, деплоится успешно, но логика ломается
trade(\?!_ws)
источник

S

Stefan in Kubernetes — русскоговорящее сообщество
источник

DS

Dmitry Sergeev in Kubernetes — русскоговорящее сообщество
Eugene
Конкретнее можете подсказать?
Я тестировал разные варианты на сервисе https://nginx.viraptor.info/, но только такой вариант
дает требуемый мне результат
location ~* "^/(ru|es|)/(orders|trade(?!_ws)|login)"
Но при попытке задеплоить хельмом в кластер, при рендеринге не проходит синтаксис  с ошибкой
must be a valid regex
Причина в символе
?
, но без него нужная мне логика не работает
Если этот символ экранировать обратным слешем, то синтаксис валиден, деплоится успешно, но логика ломается
trade(\?!_ws)
Kubernetes only accept expressions that comply with the RE2 engine syntax. It is possible that valid expressions accepted by NGINX cannot be used with ingress-nginx, because the PCRE library (used in NGINX) supports a wider syntax than RE2. See the RE2 Syntax documentation for differences.

RE2 к сожалению не поддерживает просмотры вперед/назад то есть (?!_ws) не будет работать
источник
2020 December 02

DS

Dmitry Sergeev in Kubernetes — русскоговорящее сообщество
Eugene
Конкретнее можете подсказать?
Я тестировал разные варианты на сервисе https://nginx.viraptor.info/, но только такой вариант
дает требуемый мне результат
location ~* "^/(ru|es|)/(orders|trade(?!_ws)|login)"
Но при попытке задеплоить хельмом в кластер, при рендеринге не проходит синтаксис  с ошибкой
must be a valid regex
Причина в символе
?
, но без него нужная мне логика не работает
Если этот символ экранировать обратным слешем, то синтаксис валиден, деплоится успешно, но логика ломается
trade(\?!_ws)
а зачем тут (?!_ws) ?
тебе же надо аналог:

location = /trade_ws
location ~* "^/(ru|es|)/(orders|trade(?!_ws)|login)"

Этого же можно добиться так
path: /trade_ws$
path: /(ru|es|)/(orders|trade|login)

В итоге в nginx.conf контроллера это будет
location ~* "^/trade_ws$"
location ~* "^/(ru|es|)/(orders|trade|login)"

У тебя например запрос /ru/trade ну никак не попадет в /trade_ws. Так как регулярка не подходит
Поведение, равносильное location =, можно добиться и регуляркой, просто раставив якоря
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
Dmitry Sergeev
а зачем тут (?!_ws) ?
тебе же надо аналог:

location = /trade_ws
location ~* "^/(ru|es|)/(orders|trade(?!_ws)|login)"

Этого же можно добиться так
path: /trade_ws$
path: /(ru|es|)/(orders|trade|login)

В итоге в nginx.conf контроллера это будет
location ~* "^/trade_ws$"
location ~* "^/(ru|es|)/(orders|trade|login)"

У тебя например запрос /ru/trade ну никак не попадет в /trade_ws. Так как регулярка не подходит
Поведение, равносильное location =, можно добиться и регуляркой, просто раставив якоря
У меня есть аналогичный блок и без локали
location ~* "^/(orders|trade(?!_ws)|login)"
Поэтому он и перехватиывает на себя обработку запроса т.к. идет раньше, чем голый /trade_ws
т.к. я использую регулярку в несколькких местах, то nginx-ingress лепит ее для всех локейшенов домена, соответственно первый локейшен с регуляркой, в котором запрос попадает под шаблон и будет обрабатывать запрос

А nginx-ingress контроллер при динамической генерации конфига ставит
location ~* "^/trade_ws" после
location ~* "^/(orders|trade(?!_ws)|login)"
источник

DS

Dmitry Sergeev in Kubernetes — русскоговорящее сообщество
Eugene
У меня есть аналогичный блок и без локали
location ~* "^/(orders|trade(?!_ws)|login)"
Поэтому он и перехватиывает на себя обработку запроса т.к. идет раньше, чем голый /trade_ws
т.к. я использую регулярку в несколькких местах, то nginx-ingress лепит ее для всех локейшенов домена, соответственно первый локейшен с регуляркой, в котором запрос попадает под шаблон и будет обрабатывать запрос

А nginx-ingress контроллер при динамической генерации конфига ставит
location ~* "^/trade_ws" после
location ~* "^/(orders|trade(?!_ws)|login)"
у тебя запросы на этом обрываются? Если нет, то можно просто location ~* "^/(orders|trade|login)/" тогда /trade_ws сюда тоже не подойдет
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
Dmitry Sergeev
у тебя запросы на этом обрываются? Если нет, то можно просто location ~* "^/(orders|trade|login)/" тогда /trade_ws сюда тоже не подойдет
нет не обрываются, у меня там куча подзапросов идет
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
Dmitry Sergeev
у тебя запросы на этом обрываются? Если нет, то можно просто location ~* "^/(orders|trade|login)/" тогда /trade_ws сюда тоже не подойдет
Хотя что-то может и обрываться, ты же видешь,там такая портянка с 100500 роутов)
источник

DS

Dmitry Sergeev in Kubernetes — русскоговорящее сообщество
Eugene
нет не обрываются, у меня там куча подзапросов идет
ну значит просто поставь "/" после них. Если у тебя там точно нет запросов вида ^/trade$ или ^/orders$ или ^/login$
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
Dmitry Sergeev
ну значит просто поставь "/" после них. Если у тебя там точно нет запросов вида ^/trade$ или ^/orders$ или ^/login$
та есть
/trade
/trade/123
источник

DS

Dmitry Sergeev in Kubernetes — русскоговорящее сообщество
Eugene
та есть
/trade
/trade/123
Тогда выдели еще один location
location ~* "^/trade_ws$"
location ~* "^/(ru|es|)/(orders|trade|login)"
location ~* "^/(orders|trade|login)/"
location ~* "^/(orders|trade|login)$"
источник

DS

Dmitry Sergeev in Kubernetes — русскоговорящее сообщество
Eugene
та есть
/trade
/trade/123
Да и в целом шо за костыли с регулярками.
Судя по тому что ты кидал раньше в pastebin. У тебя только запросы на ^/trade_ws$ надо кидать на service2, остальные идут на service1. Это можно описать очень простыми:

pathType: Prefix
path: /
=> service1

pathType: Exact
path: /trade_ws
=> service2

Ну или если я не внимательно посмотрел, то вариант с регулярками - выше
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
Dmitry Sergeev
Да и в целом шо за костыли с регулярками.
Судя по тому что ты кидал раньше в pastebin. У тебя только запросы на ^/trade_ws$ надо кидать на service2, остальные идут на service1. Это можно описать очень простыми:

pathType: Prefix
path: /
=> service1

pathType: Exact
path: /trade_ws
=> service2

Ну или если я не внимательно посмотрел, то вариант с регулярками - выше
нет, не так
^/$ - service-1
/- service-2
/trade_ws - service2

Я уже попробовал разные варианты  с Exact|Path (без регулярок)
Он там такую херню лепит,что вообще ничего не работает
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
Dmitry Sergeev
Тогда выдели еще один location
location ~* "^/trade_ws$"
location ~* "^/(ru|es|)/(orders|trade|login)"
location ~* "^/(orders|trade|login)/"
location ~* "^/(orders|trade|login)$"
look{head/behind}
location ~* "^/(?<!$)"
location ~* "^/"
источник

E

Eugene in Kubernetes — русскоговорящее сообщество
Eugene
look{head/behind}
location ~* "^/(?<!$)"
location ~* "^/"
Я не могу это использовать,т.к. нет поддержи PCRE, а только RE2
Как мне с корнем разрулить?

Вариант с /trade_ws я оставлю на случах, когда название роута поменять не смогу
источник