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

deyfvvtc  于 2023-02-04  发布在  Docker
关注(0)|答案(3)|浏览(173)

我正在尝试使用Traefik作为MariaDB的反向代理,以便可以从我的客户端连接。
目前Traefik在多个WordPress容器的HTTP和HTTPS上运行良好,但我在为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"

当我尝试从客户端连接到数据库时,无法正常工作
有人有经验或者有好的例子吗?

bmvo0sr5

bmvo0sr51#

似乎无法指定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"
ghhaqwfi

ghhaqwfi2#

我在一个对接合成文件中使用了以下代码。当然,你可以根据自己的需要调整端口号。

静态配置:

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
wfveoks0

wfveoks03#

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

相关问题