web-dev-qa-db-ja.com

Traefik 2.0+ TCPおよびpostgres

Postgresインスタンスをルーティングするためのtraefikをセットアップしようとしています。 treafik 2.0の新しいTCP=機能を使用する必要があると考えました。しかし、それを理解するのに苦労しています。

誰かがヒントや実用的な例を持っていますか?

私の主なポイントは「はじめに」セクションであり、postgres dbを含めようとしました。 whoamiインスタンスに到達できますが、postgresインスタンスには到達できません

docker-compose.yaml

version: '2'

services:
  reverse-proxy:
    image: traefik:v2.0.0-alpha3 # The official v2.0 Traefik docker image
    ports:
      - "80:80"     # The HTTP port
      - "8080:8080" # The Web UI (enabled by --api)
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
      - /home/mariufa/tmp/traefik.toml:/etc/traefik/traefik.toml

  whoami:
    image: containous/whoami # A container that exposes an API to show its IP address
    labels:
      - "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)"

  postgres:
    image: postgres:latest
    labels:
      - "traefik.tcp.routers.postgres.rule=HostSNI(`postgres.docker.localhost`)"

traefik.toml

[api]

[entrypoints]
  [entrypoints.web]
    address = ":80"

[providers.docker]
endpoint = "unix:///var/run/docker.sock"

私のpostgres接続をテストする:

psql -h postgres.docker.localhost -U postgres -d postgres -p 80

これは、HostSNI( '*')を設定すると機能しますが、実際のソリューションではありません。 「HostSNI」の代わりに「Host」を使用したテスト

5
marfagerland

そこで私はTCPについて調べ、ホスト名でのルーティングはhttp機能であると考えました。バマー!!そのため、共通のホスト名を設定し、さまざまなDBにランダムなポートを公開することにしました。

したがって、私のサービスとしてのDBは Rundeck であり、postgresとmongodbのdockerコンテナーをデプロイし、dockerにランダムな公開ポートを選択させることができます。これにはTraefikは必要ありません。私のフロントエンドとAPIにTraefikのみを使用する

Postgresポートをランダムなポートにマップする方法の例:

docker run -d -p 5432 postgres

Sshを使用せずにdocker psを実行してdbポートを確認したくないので、ポートを忘れるたびに、気の利いたdockerモニター DockWatch を見つけました。

Dockerコンテナーのポート、ログなどが表示されます。サービス状況として私のDBを解決するのにとても便利です。

Dockerコンテナー内のRundeckとDockWatchの両方。

2
marfagerland