Traefik 2.0+ TCP和Postgres

时间:2019-04-03 12:28:00

标签: traefik

我正在尝试设置traefik来路由postgres实例。 我认为我必须在treafik 2.0中使用新的TCP功能。但是我正在努力弄清楚。

有人知道任何提示或可行的例子吗?

我的凝视点是“入门”部分,并试图包括一个postgres数据库。我可以到达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('*'),这是可行的,但不是真正的解决方案。 也用“ Host”代替“ HostSNI”来代替睾丸

1 个答案:

答案 0 :(得分:0)

因此,我检查了有关TCP的信息,并认为主机名上的路由是一种http功能。 mm!因此,决定使用通用的主机名,然后为不同的数据库提供公开的随机端口

因此,我将DB即服务视为Rundeck,用于部署postgres和mongodb docker容器,并让docker选择随机发布端口。不需要Traefik。仅将Traefik用于我的前端和api

如何将postgres端口映射到随机端口的示例:

docker run -d -p 5432 postgres

因为我不想每次都忘记使用ssh并运行docker ps来检查我的数据库端口,所以我发现了一个漂亮的docker监控器DockWatch

它显示我的Docker容器的端口,日志等。因此,对于解决我的数据库即服务情况非常方便。

Rundeck和DockWatch都在Docker容器中。