Bonjour à tous,

J'utilise le couple Docker / Traefik pour proposer des services sur notre réseau interne. J'ai mis en place la gestion des points d'entrées web (80) et webs (443) facilement, mais je bloque pour proposer mysql/mariadb.

Par exemple avec ce docker-compose.yml

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
version: '3.5'
services:
  sv_mysql:
    image: mysql:latest
    container_name: sv_mysql
    command: --default-authentication-plugin=mysql_native_password --secure-file-priv=/tmp
    environment:
      MYSQL_ROOT_PASSWORD: xxxx
    security_opt:
       - seccomp:unconfined
    volumes:
      - "/sql/portail/dev:/var/lib/mysql"
      - "./conf.d:/etc/mysql/mysql.conf.d"
    labels:
      - "traefik.enable=true"
      - "traefik.tcp.routers.sv_mysql.rule=HostSNI(`*`)"
      - "traefik.tcp.routers.sv_mysql.entrypoints=mysql"
      - "traefik.tcp.services.sv_mysql.loadBalancer.server.port=3306"
      - "backuppc.active=true"
      - "backuppc.services=mysql,"
    hostname: sv_mysql.mon.domain
    networks:
      - backend
      - traefik

  sv_pma:
    image: phpmyadmin/phpmyadmin:latest
    container_name: sv_pma
    depends_on:
      - sv_mysql
    environment:
      MYSQL_ROOT_PASSWORD: sv
      PMA_USER: root
      PMA_PASSWORD: sv
      PMA_HOST: sv_mysql
      UPLOAD_LIMIT: 16384M
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.sv_pma.entrypoints=web"
      - "traefik.http.routers.sv_pma.rule=Host(`sv-pma.mon.domain`)"
    networks:
      - backend
      - traefik

  # use a Dockerfile
  sv_www:
    depends_on:
      - sv_mysql
    build: .
    container_name: sv_www
    volumes:
      - "/www/dev/extranet/html:/var/www/html"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.sv_www.entrypoints=web"
      - "traefik.http.routers.sv_www.rule=Host(`sv.mon.domain`)"
      - "backuppc.active=true"
      - "backuppc.services=volume,"
      - "backuppc.volume.path=/var/www/html"
    networks:
      - backend
      - traefik

networks:
  backend:
    name: sv_backend
  traefik:
    external: true
J'arrive à accéder avec Firefox av sv.mon.domain et sv-pm.mon.domain. J'essai depuis mon pc d'atteindre avec le client mysql sv_mysql avec :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
mysql -H sv_mysql.mon.domain -u xxxx -p
Mais rien à faire, après la demande de mot de passe je reste bloqué jusqu'au timeout.

config de Traefik

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
global:
  sendAnonymousUsage: false
  checkNewVersion: false

api:
  insecure: true
  dashboard: true
  debug: true

log:
  filePath: "/var/log/traefik/applog.log"
  format: json
  level: INFO

accessLog:
  filePath: "/var/log/traefik/access.log"

providers:
  docker:
    endpoint: unix:///var/run/docker.sock
    exposedByDefault: false
    network: traefik
  file:
    directory: /etc/traefik/dynamic
    watch: true

entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"
  mysql:
    address: ":3306/tcp"

certificatesResolvers:
  le:
    acme:
      email: contact@xxxxxxx
      caServer: https://acme-v02.api.letsencrypt.org/directory
      storage: /letsencrypt/acme.json
      dnsChallenge:
       provider: ovh
       delayBeforecheck: 5
       resolvers:
         - 8.8.8.8
         - 8.8.4.4
Je n'arrive pas à trouver de doc qui explique comment faire fonctionner correctement le SNI car l'idée est de pouvoir proposer autant de container mysql/mariadb que besoin avec une connexion possible hors réseau Traefik, du coup exit la configuration par mappage de port.

Avez-vous une idée ?

Merci d'avance.