使用Traefik 2作为MariaDB(Docker)的TCP代理



我正在尝试使用Traefik作为MariaDB的反向代理,这样我就可以从我的客户端进行连接。

目前Traefik可以很好地使用HTTP和HTTPS为多个WordPress容器工作,但我在为MariaDB配置它时遇到了问题。

以下是当前配置:

Traefik组合文件:

version: '3.5'
networks:
traefik:
name: traefik

services:
traefik:
image: traefik:latest
restart: always
container_name: traefik
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.toml:/traefik.toml:ro
- ./acme.json:/acme.json
ports:
- 80:80
- 443:443
- 3306:3306
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.rule=Host(`traefik.local`)"
- "traefik.http.routers.traefik.entrypoints=websecure"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=username:$$apr1$$j994eiLb$$KmPfiii4e9VkZwTPW2/RF1"
networks:
- traefik

Traefik配置文件(Traefik.toml(:

# Network traffic will be entering our Docker network on the usual web ports
# (ie, 80 and 443), where Traefik will be listening.
[entyPoints]
[entryPoints.web]
address = ":80"
[entryPoints.websecure]
address= ":443"
[entryPoints.websecure.http.tls]
certResolver = "resolver"
#  [entryPoints.ssh]
#    address = ":2222"
[entryPoints.mariadb]
address = ":3306"
#Redirection from HTTP to HTTPS
[entryPoints.web.http]
[entryPoints.web.http.redirections]
[entryPoints.web.http.redirections.entryPoint]
to = "websecure"
scheme = "https"

#Integration with Let's Encrypt
[certificatesResolvers.resolver.acme]
email = "service@local"
storage = "acme.json"
[certificatesResolvers.resolver.acme.tlsChallenge]
#[log]
#  level = "DEBUG"

[api]
#Defaul=true
dashboard = true

# Enable retry sending request if network error
[retry]

# These options are for Traefik's integration with Docker.
[providers.docker]
endpoint = "unix:///var/run/docker.sock"
exposedByDefault = false
network = "traefik"

MariaDB撰写文件:版本:"3.5">

networks:
traefik:
external:
name: traefik

services:
dbtest:
image: mariadb:latest
restart: always
container_name: dbtest
environment:
- MYSQL_DATABASE=admin
- MYSQL_USER=admin
- MYSQL_PASSWORD=admin
- MYSQL_ROOT_PASSWORD=admin
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik"
- "traefik.tcp.routers.mariadb.entrypoints=mariadb"
- "traefik.tcp.routers.mariadb.rule=HostSNI(`test.local`)"
- "traefik.tcp.routers.mariadb.tls=true"
#      - "traefik.tcp.routers.mariadb.service=dbtest"
#      - "traefik.tcp.services.mariadb.loadbalancer.server.port=3306"

当我尝试从我的客户端连接到数据库时,它不起作用

有没有人有这样的经验或很好的例子?

看起来不可能指定test.local这样的主机名。相反,您需要使用catchall*。

我为MariaDB使用的标签是:

labels:
- "traefik.enable=true"
- "traefik.tcp.routers.mariadb.rule=HostSNI(`*`)"
- "traefik.tcp.routers.mariadb.entrypoints=mariadb"
- "traefik.tcp.routers.mariadb.service=mariadb-svc"
- "traefik.tcp.services.mariadb-svc.loadbalancer.server.port=3306"

我在docker compose文件中使用以下内容。当然,您可以根据需要调整端口号。

静态配置:

traefik:
ports:    
# db - postgres
- 5432:5432

# This override command section REPLACES the one in the docker-compose file.  
command:
- --providers.docker
- --providers.docker.exposedbydefault=false
- --accesslog
- --log
- --api
# These create named entry points for later use in routers.
# You don't need to specify an entrypoint if the in port = out port.  It will
# automatically figure that out.
- --entryPoints.postgres.address=:5432

动态配置:

db:
labels:
- traefik.enable=true
- traefik.docker.network=traefik-public
- traefik.tcp.routers.db-tcp.rule=HostSNI(`*`)
- traefik.tcp.routers.db-tcp.entrypoints=postgres
- traefik.tcp.routers.db-tcp.service=db-proxy
- traefik.tcp.services.db-proxy.loadbalancer.server.port=5432

您的traefik.toml在第3行有一个拼写错误:[entyPoints]我想它少了一个r

最新更新