2

目的

Rancher (Docker) を実行しているサーバーがあります。そのサーバーには、関連のないスタックがいくつかあります。

Traefik をそのスタックの主要なインタラクション ポイントにしたいと考えています。そして、パスに基づいて異なるコンテナへのリクエストを負荷分散/プロキシします。

/apiバックエンドserverサービスにトラフィックを送信させたい。そして、トラフィックをサービスに送信し/ますfrontend

現在の状態

docker-compose.ymlこれは、関連するサービスのみを表示する私のスリム化されたバージョンです。

version: '2'
services:
  server:
    image: server
    labels:
      - "traefik.frontend.rule=PathPrefix:/api"
      - "traefik.enable=true"
      - "traefik.port=80"
  frontend:
    image: frontend
    labels:
      - "traefik.frontend.rule=PathPrefix:/"
      - "traefik.enable=true"
      - "traefik.port=80"
  proxy:
    image: traefik:v1.4
    command: --web --accessLog --rancher --rancher.exposedbydefault=false --rancher.metadata=true
    volumes:
      - /dev/null:/traefik.toml

次に、パブリック ポートをリッスンする Rancher ロード バランサーを使用して、リクエストをサービスにリダイレクトしapp1.example.comますproxy。次に、リクエストを取得し、パスに基づいて 2 つのコンテナーのそれぞれにトラフィックをリダイレクトします。

traefik.app1.example.comまた、トラフィックを同じサービス、つまり Web UI にアクセスするproxyためのポートにリダイレクトします。8080

スタックが 1 つしかない場合でも機能します。

問題

別のスタックを追加した場合 (またはそのスタックを複製した場合)、Traefik ラベルを持つサービスがさらにある場合、 from はサービス内のサービスと Traefik ラベルを宣言する他のスタックproxyからapp1ラベルを読み取ります。app2

次に、 in の Web UI でproxyapp1さまざまなスタックのすべてのバックエンドを確認できます。ただし、フロントエンドのルールは上書きされます。

質問

これまで、Traefik を独自のグローバル ロード バランサー/プロキシとして使用する方法の例を主に見てきました。スタックごとに分離された Traefik インスタンス、または Traefik ロード バランサーの階層を作成することもできると思っていたことに気付きました。

設定が欠けているか、何かを誤解しているように思えます。

それでも、スタックごとに異なる分離された Traefik インスタンスを持ち、それらが独自のスタック内のサービスのみをリッスンして使用するようにすることは可能ですか?

ランチャーで可能ですか?他の Docker スタック オーケストレーター (Swarm など) で可能ですか?

それが可能であれば、何が欠けていますか?

4

2 に答える 2

1

このための Traefik v2 ソリューションに関心がある場合は、--providers.docker.constraintsオプションを使用して同じ結果を得ることができます。したがって、基本的な例は次のようになります。

services:
  traefik:
    image: traefik:v2.3
    command:
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.docker.constraints=Label(`custom.label`,`custom-value`)"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  custom_service:
    image: ...
    labels:
      - "traefik.enable=true"
      - "custom.label=custom-value"

ドキュメント

于 2021-01-25T12:56:21.193 に答える