反向代理,支持动态路由到Kubernetes服务:portname和WebSockets

时间:2017-08-13 15:40:51

标签: nginx websocket kubernetes istio linkerd

我想通过支持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中指定硬编码目的地。我可以在源(请求)上指定正则表达式,但不能使用正则表达式捕获组来指定目标。

1 个答案:

答案 0 :(得分:0)

不支持基于正则表达式捕获组动态创建目标。您需要为每个目标定义路由规则。