Traefik 2.0+ TCP 和 postgres

Posted

技术标签:

【中文标题】Traefik 2.0+ TCP 和 postgres【英文标题】:Traefik 2.0+ TCP and postgres 【发布时间】:2019-08-24 23:39:29 【问题描述】:

我正在尝试设置 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】:

所以我检查了 TCP,并认为主机名上的路由是一个 http 功能。无赖!!所以决定有一个共同的主机名,然后为不同的数据库公开随机端口

所以我对 DB 即服务的看法是 Rundeck 用于部署 postgres 和 mongodb docker 容器,并让 docker 选择随机发布端口。这不需要 Traefik。仅将 Traefik 用于我的前端和 api

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

docker run -d -p 5432 postgres

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

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

Docker 容器中的 Rundeck 和 DockWatch 也是如此。

【讨论】:

以上是关于Traefik 2.0+ TCP 和 postgres的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Traefik 2.0 和 Docker Compose 标签将 http 重定向到 https?

Traefik无法通过docker-compose连接到服务器。

是否有使用 Postgres 的 Slick 2.0 AutoInc 的工作示例?

Docker traefikV2.1

未读取 database.yml 中的 ENV 变量(Rails 4.2.0、RubyMine 7、Postgres、Ruby 2.2.0、DotEnv)

traefik 2.1 for docker