1

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 ルーティング構成でハードコーディングされた宛先を指定する必要があるようです。ソース (要求) で正規表現を指定できますが、正規表現キャプチャ グループを使用して宛先を指定することはできません。

4

1 に答える 1