Container und reverse proxy traefik...grundsätzliche Fragen

the other

Well-known member
Moinsen,
Was docker et al betrifft bin ich absoluter Neuling...also bitte um Geduld.
Auch das Thema reverse proxy ist bisher eher unbekanntes Terrain für mich...

Was ich grundsätzlich vorhabe:
Auf proxmox läuft eine vm mit einem Linux. Darauf ist docker installiert. Alles ist nur aus dem internen LAN erreichbar und soll nicht extern zur Verfügung stehen (nur via VPN). Genutzt wird https im LAN mit selbst-signierten Zertifikaten.
Ich möchte für die zukünftigen Container erreichen, dass ich auf diese nicht mit Eingabe von IP.vom.host: PORT komme, sondern zb per portainer.example.com.
Dafür möchte ich einen reverse proxy nutzen (traefik).

Der Aufruf der Container soll per https erfolgen (auf traefik). Dieser soll dann "übersetzen" auf http (kein TLS) IP: PORT. Alles hinter traefik ist also nur http. Damit spare ich die aufwändige Verteilung von Zertifikaten an alle Container...denke ich mir so.
Frage 1: sollte doch so machbar sein, oder?

Um nun nicht zig Zertifikate (für jeden Container) anzulegen, soll ein wildcard Zertifikat in traefik hinterlegt werden.
Ich würde also vereinfacht gesagt
1. Ein *.example.com Zertifikat erstellen
2. Einen passenden dns Eintrag im DNS resolver anlegen (IP von traefik auf traefik.example.com plus jeweilige containername.example.com)
3. Das Zertifikat in der dynamic.yaml von traefik angeben (Pfad zum Speicherort des Zertifikats).

Damit soll es dann gelingen, dass durch Eingabe von https://containername.example.com zuerst der traefik rp erreicht wird. Dieser übersetzt auf die IP und Port des jeweiligen Containers und leitet auf http zu portainer weiter zur login Seite.
Frage 2: sollte doch auch machbar sein, oder?

Sorry für die vielleicht doofen Fragen, wie gesagt: Neuland ;)
Danke für eure Ideen dazu...
 
Zuletzt bearbeitet:
Hallo,
ein Kumpel von mir hat sowas auch für sein lokales Netzwerk eingerichtet. Ich weiß nicht genau wie er es gemacht hat, aber es war initial glaube ein nicht zu unterschätzender Aufwand.
Ich habe mir für meine lokal laufenden Dienste ein Dashboard eingerichtet. So muss ich mir die IPs nicht merken und klicke einfach nur auf ein Symbol ;) Falls das auch für die infrage käme hier mal zwei Links zu solchen Dashboards: 1. heimdall und 2. homer

Ach und wenn du dich doch mit dem Thema reverse proxy auseinander setzen möchtest: ich nutze den Nginx Proxy Manager. Der hat eine recht einfach verständliche UI. Allerdings verwalte ich damit meine Domain, die per DynDNS auf mein Zuhause zeigt.
 
Moinsen,
Ja, heimdall nutze ich bereits, auf dem NAS als container laufend.Wäre ein easy exit...
Und nach meinen bisherigen Recherchen gebe ich dir recht, es ist nicht eben mal (für einen Neuling wie mich). Viel Input, weil ich nicht einfach irgendwas copy&Pasten möchte. ;) Ist eben mal ein neues subhobby...Und ausser lesen und grübeln hab ich noch nix gemacht, der 1. Sprung ins Wasser kommt dann erst später...zunächst mal nen Überblick verschaffen.

Ich hadere auch noch (Frage 3) damit, ob der reverse proxy...
...auf der pfsense mit haproxy oder
...traefik als container
laufen sollte...ngnix habe ich auch zu gelesen, fand aber gerade auch die Option von traefik nice, dass neue container versehen mit passendem label direkt in traefik integriert werdet.
 
Hi,
willst du denn eine "echte" Domain verwenden? Dann muss der Reverse Proxy auch nach außen "telefonieren" können. Dann würde wahrscheinlich auf der pfsense Sinn ergeben. Ob du rein intern eine Domain nutzen kannst, weiß ich ehrlich gesagt nicht.
Ich bin bei traefik irgendwann ausgestiegen, da es mit Version 2 irgendwann nicht mehr so easy war einen neuen Container zu integrieren. Vll war ich aber auch einfach nur zu doof. Ich kann mich noch schwach daran erinnern, dass alles was von traefik erfasst werden sollte zumindest im selben Docker-Netzwerk liegen musste und ich hatte Probleme neue Container in dieses Netzwerk zu bekommen. Das hat dann darin geendet, dass alle Anwendungen in einem großen Docker Compose File lagen. Hat das Handling jetzt nicht unbedingt einfacher gemacht.
 
Moinsen,
Nein, keine öffentliche Domain. Auch das (weil ich nach draußen eh nur den VPN Port der pfsense freigebe via dyndns).
Intern läuft es via .internal-Domain.

ich hatte Probleme neue Container in dieses Netzwerk zu bekommen.
Warum?

Das hat dann darin geendet, dass alle Anwendungen in einem großen Docker Compose File lagen. Hat das Handling jetzt nicht unbedingt einfacher gemacht.
😂 Ja, das kann ich mir vorstellen....wäre der Moment, wo ich kurz zusammen breche innerlich...
 
Sieht doch alles gar nicht so schlimm aus.

Wenn du einen Resolver in deinem Netzwerk hast, dem Du beigringen kannst, die Subdomains (besser noch *.example.com oder *.xyz.example.com) auf deinen Docker-Host zeigen zu soll, und du weisst wie du ein Wildcard-Zertifikat dafür ausstellen kannst, dann geht es am Ende ja nur noch um die Konfiguraiton von Traefik.

- Einbinden von "bring your own certificate" ist machbar
- Container durch Labels die Regel mitgeben soll auf welche Subdomain der Container Reagiert ist machbar
 
Es müsste in etwa so aussehen:

compose.yml:
Code:
services:
  traefik:
    image: "traefik:v3.3"
    container_name: "traefik"
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entryPoints.web.address=:80"
      # redirect port 80 auf 443
      - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--entryPoints.websecure.address=:443"
      # in diesem Verzeichnis liegen dynamic configs
      - "--providers.file.directory=/etc/traefik/dynamic"
      - "--providers.file.watch=true"
    labels:
      - "traefik.enable=true"
      # hier muss die Subdomain für die Traefik UI angegeben werden
      - "traefik.http.routers.traefik.rule=Host(`traefik.example.com`)"
      - "traefik.http.routers.traefik.entrypoints=websecure"
      - "traefik.http.routers.traefik.service=api@internal"
      - "traefik.http.routers.traefik.middlewares=traefik-auth"
      - "traefik.http.routers.whoami.tls=true"
      # siehe: https://doc.traefik.io/traefik/middlewares/http/basicauth/
      - "traefik.http.middlewares.traefik-auth.basicauth.users=username:hashed-password"
    networks:
      # default Netzwerk innerhalb dieser Compose Datei, extern: traefik-frontent
      - default
      # backen Netzwerk innerhalb dieser Compose Datei, extern: traefik-backend.
      - backend
    ports:
      - "80:80"
      - "443:443"
      # Port fuer Traefik UI
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      # Verzeichnis fur dynamic configs
      - "./dynamic:/etc/traefik/dynamic:ro"
      # Verzeichnis fuer Zertifikatsdaten
      - "./certs:/etc/ssl/certs:ro"
  whoami:
    image: "traefik/whoami"
    labels:
      - "traefik.enable=true"
      # hier muss die Subdomain für den Container angegeben werden
      - "traefik.http.routers.whoami.rule=Host(`whoami.example.com`)"
      - "traefik.http.routers.whoami.entrypoints=websecure"
      - "traefik.http.routers.whoami.tls=true"
networks:
  defaultt:
    name: traefik-frontend
  backend:
    name: traefik-backend
    # In anderen compose Dateien muss es als external eingebunden werden
    # external:true
dynamic/tls.yaml:
Code:
tls:
  options:
    default:
      sniStrict: true
  certificates:
    - certFile: /etc/ssl/certs/mydomain.cert
      keyFile: etc/ssl/certs/mydomain.key

certs/mydomain.cert = ist idealerweise eine fullchain.pem, sonst ist deine CA mit der Du selbstsigniert hast nicht bekannt.
certs/mydomain.key = der key zum Zertifikat

Probier mal aus und melde mal zurück :)
 
Moinsen @Confluencer,
Das werde ich tun, auf jeden Fall.
Egal, wie es dann damit läuft: dank dir vielmals für den Aufwand. (y)
Es wird allerdings ein paar Tage dauern, bin vorher nicht am Rechner.Rückmeldung gebe ich aber sofort.
...
Es ist aber auch...je mehr ich mich Einlese, umso mehr tendiere ich auch zu lets encrypt und Co. Via dns challenge Abfrage mit dann eben doch eigener Domain scheint ja dann doch weniger Aufwand, gerade wo sich andeutet, dass die Lebensdauer der Zertifikate absehbar verringert wird bzgl Akzeptanz im Browser.
 
Zurück
Oben