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

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

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

http://10.0.0.1/myport/myservice/foo

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

Я приблизился к достижению этого с помощью Linkerd, используя следующую запись маршрутизатора ConfiMap (используя имя 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 или с поддержкой записей DNS SRV. Этот сценарий должен работать в NGINX Plus, но я должен полагаться только на программное обеспечение с открытым исходным кодом.

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

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

1 ответ

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

Другие вопросы по тегам