Docker Traefik Grundlagen

Aus xinux.net
Zur Navigation springen Zur Suche springen

Was ist Traefik

Traefik ist ein Reverseproxy der Anfragen von Clients entgegen nimmt und sie an die Container weitergibt. Traefik kann auch als TLS Endpunkt dienen und die Beschaffung von Zertifikaten verwalten.

Traefik läuft auch in einem Docker Container.

Port handling

Beim "normalen" Docker ohne Traefik wird die Unterscheidung welcher Container "angefahren" wird, anhand des Ports getroffen (ISO/OSI Schicht 4). Das ist sehr unschön und in der Praxis untauglich.

  • Docker ohne Traefik

Docker-ports.png

Wenn man traefik benutzt, erfolgt die Selektion mit welchem Container kommnuiziert wird, anhand des Domainnamens. Dies erfolgt in der Applikationsschicht (ISO/OSI Schicht 4).

  • Docker mit Traefik

Docker-traefik.png

Wir erstellen zu erst ein Traefik Netz

  • docker network create traefik-public


Einfaches Beispiel

version: "3.3"
networks:
  traefik-public:
    external: true
services:
  traefik:
    image: "traefik:v2.4"
    container_name: "traefik"
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.myresolver.acme.email=wombel@linugs.de"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    networks:
      - traefik-public
    labels:
        - "traefik.enable=true"
        - "traefik.loadbalancer.server.port=8080"
        - "traefik.http.routers.mytraefik.rule=Host(`traefik.linugs.de`)"
        - "traefik.http.routers.mytraefik.tls.certresolver=myresolver"
        - "traefik.http.routers.mytraefik.entrypoints=websecure"
        - "traefik.http.routers.mytraefik.service=api@internal"
~                                                                   

Traefik kann nun Anfragen entgegen nehmen und an die Container weiterleiten.


Traefik1.png