WebSocket をサポートする Kubernetes サービスへのパスベースの動的ルーティングを実行したいと考えています。
たとえば、次のパス:
http://10.0.0.1/myport/myservice/foo
パスfooを使用して、名前付きポートmyport (名前空間のデフォルト) でサービスmyserviceにトラフィックをルーティングする必要があります。
次の ConfiMap ルーター エントリ (io.l5d.k8s namer を使用) を使用して、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 および WebSocket への動的ルーティングをサポートするアイデアはありますか?
編集 これはIstioで実行できますか? Istio ルーティング構成でハードコーディングされた宛先を指定する必要があるようです。ソース (要求) で正規表現を指定できますが、正規表現キャプチャ グループを使用して宛先を指定することはできません。