Обратный прокси с поддержкой динамической маршрутизации к сервису 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 ответ
Не поддерживается динамическое создание пунктов назначения на основе групп захвата регулярных выражений. Вам необходимо определить правило маршрутизации для каждого пункта назначения.