我想通过支持WebSockets来执行基于路径的动态路由到Kubernetes服务。
例如,此路径:
http://10.0.0.1/myport/myservice/foo
应将流量路由到指定端口 myport (命名空间默认值)的服务 myservice ,路径为 foo 。
我接近使用以下ConfiMap路由器条目(使用io.l5d.k8s名称)使用 Linkerd 实现此目的:
routers:
- protocol: http
dtab: |
/svc => /#/io.l5d.k8s/default;
identifier:
kind: io.l5d.path
segments: 2
consume: true
除了我需要WebSocket support which is not available in Linkerd之外,它有效。
我尝试使用正则表达式 NGINX 进行位置和重写规则。这看起来像这样:
location ~ ^/(.*?)/.*$ {
rewrite ^/(.*?)/(.*)$ /$2 break;
proxy_pass http://$upstream:$1;
除非NGINX没有路由到NGINX启动后创建的服务,否则这种情况有效。我不确定这是与nginx中的DNS缓存问题有关还是支持 SRV DNS记录。此方案应该在NGINX Plus中有效,但我必须依赖于开源软件。
任何反向代理/服务网格的想法都支持动态路由到K8s服务:端口以及WebSockets?
修改 这可以用 Istio 来完成吗?似乎必须在Istio routing configuration中指定硬编码目的地。我可以在源(请求)上指定正则表达式,但不能使用正则表达式捕获组来指定目标。
答案 0 :(得分:0)
不支持基于正则表达式捕获组动态创建目标。您需要为每个目标定义路由规则。