我想通过支持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中指定一个硬编码的目标。我可以在源(请求)上指定正则表达式,但不能使用正则表达式捕获组来指定目标。
您是否指定了解析器?请参阅[此链接](http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver) –
感谢您的回应。我试着指定一个解析器(与resolv.conf文件中的解析器相同)。它没有帮助。我会尝试使用有效的= s选项来使DNS缓存失效,但我在NGINX中观察到的行为是没有找到新的kube-dns条目(不是旧的条目会被记住)。 NGINX的另一个问题是它不支持SRV记录,这使得它不可能在K8s中使用命名端口... –
Perspectivus