2017-08-13 62 views
0

我想通过支持WebSockets来执行基于路径的动态路由到Kubernetes服务。支持动态路由到Kubernetes服务的反向代理服务:portname和WebSockets

例如,该路径:

http://10.0.0.1/myport/myservice/foo 

应该将流量路由到指定港口MyPort上空间(namespace默认)服务为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

您是否指定了解析器?请参阅[此链接](http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver) –

+0

感谢您的回应。我试着指定一个解析器(与resolv.conf文件中的解析器相同)。它没有帮助。我会尝试使用有效的= s选项来使DNS缓存失效,但我在NGINX中观察到的行为是没有找到新的kube-dns条目(不是旧的条目会被记住)。 NGINX的另一个问题是它不支持SRV记录,这使得它不可能在K8s中使用命名端口... – Perspectivus

回答

0

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

+0

Thanks @Tautology。我猜你是指Istio的路由功能。 我正在寻找任何解决方案,将动态路由到K8s服务+提供WebSocket支持。 – Perspectivus