1

我想对支持 WebSocket 的 Kubernetes 服务执行基于路径的动态路由。

例如,这条路径:

http://10.0.0.1/myport/myservice/foo

应该使用路径foo将流量路由到命名端口myport(默认命名空间)上的服务myservice

我使用以下 ConfiMap 路由器条目(使用 io.l5d.k8s 命名器)通过 Linkerd接近实现了这一点:

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

除了我需要在 Linkerd 中不可用的 WebSocket 支持之外,它可以工作。

我尝试使用正则表达式来定位NGINX并重写规则。这看起来像这样:

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

除了 NGINX 不会路由到 NGINX 启动后创建的服务之外,这很有效。我不确定这是否与 nginx 中的 DNS 缓存问题或对SRV DNS 记录的支持有关。这种情况应该在NGINX Plus中工作,但我必须依赖开源软件。

反向代理/服务网格支持动态路由到 K8s service:port 以及 WebSockets 的任何想法?

编辑 这可以用Istio完成吗?似乎必须在Istio 路由配置中指定一个硬编码的目的地。我可以在源(请求)上指定一个正则表达式,但不能使用正则表达式捕获组来指定目标。

4

1 回答 1

0

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

于 2017-08-14T23:31:50.660 回答