Обратный прокси с поддержкой динамической маршрутизации в сервис Kubernetes: имя порта и WebSockets

Я хотел бы выполнить динамическую маршрутизацию на основе путей к сервисам Kubernetes с поддержкой WebSockets.

Например, этот путь:

http://10.0.0.1/myport/myservice/foo

должен направлять трафик в службу myservice на именованный порт myport (пространство имен по умолчанию) с путем foo.

Я был близок к достижению этого с помощью Linkerd, используя следующую запись маршрутизатора ConfiMap (с использованием namer io.l5d.k8s):

routers:
- protocol: http
  dtab: |
    /svc => /#/io.l5d.k8s/default;
  identifier:
    kind: io.l5d.path
    segments: 2
    consume: true

Это сработало, за исключением того, что мне нужна поддержка WebSocket, которая недоступна в Linkerd.

Я пробовал NGINX с использованием регулярных выражений для определения местоположения и правил перезаписи. Это выглядит примерно так:

 location ~ ^/(.*?)/.*$ {
   rewrite ^/(.*?)/(.*)$ /$2 break;
   proxy_pass http://$upstream:$1;

Это сработало, за исключением того, что NGINX не выполняет маршрутизацию к службам, созданным после запуска NGINX. Я не уверен, связано ли это с проблемами кеширования DNS в nginx или с поддержкой записей SRV DNS. Этот сценарий должен работать в NGINX Plus, но я должен полагаться в программном обеспечении с открытым исходным кодом только.

Есть идеи, какие обратные прокси / сервисная сетка поддерживает динамическую маршрутизацию к сервису K8s: порт, а также WebSockets?

Изменить. Можно ли это сделать с помощью Istio? Похоже, что нужно указать жестко запрограммированное место назначения в Конфигурация маршрутизации Istio. Я могу указать регулярное выражение в источнике (запросе), но не могу использовать группы захвата регулярных выражений для указания места назначения.


person Perspectivus    schedule 13.08.2017    source источник
comment
Вы указали резольвер? См. эту ссылку   -  person Richard Smith    schedule 13.08.2017
comment
Спасибо за ответ. Я попытался указать преобразователь (тот же, что в файле resolv.conf). Это не помогло. Я попробую поиграть с опцией valid = ‹n› s, чтобы аннулировать кеш DNS, но поведение, которое я наблюдал с NGINX, заключается в том, что новые записи kube-dns не обнаруживаются (а не запоминаются старые). Еще одна проблема с NGINX заключается в том, что он не поддерживает записи SRV, что делает невозможным работу с именованными портами в K8s ...   -  person Perspectivus    schedule 13.08.2017


Ответы (1)


Нет поддержки для динамического создания мест назначения на основе групп захвата регулярных выражений. Вам необходимо определить правило маршрутизации для каждого пункта назначения.

person Tautology    schedule 14.08.2017
comment
Спасибо @Tautology. Я предполагаю, что вы имеете в виду возможности маршрутизации Istio. Я ищу любое решение, которое будет динамически перенаправлять на сервисы K8s + обеспечивать поддержку WebSocket. - person Perspectivus; 15.08.2017
comment
@Perspectivus Вы когда-нибудь находили решение или жизнеспособный обходной путь для этой проблемы? Я изо всех сил пытаюсь сделать то же самое. (динамическая маршрутизация кубернетов с использованием обратного прокси) - person mason505; 30.08.2018