Ein Blick in die neue Welt der Service Discovery
Henrik Hoegh
Henrik is a DevOps Consultant based in Aarhus. He specializes in Docker, Kubernetes and everything Atlassian. Away from the office Henrik designs loudspeakers and takes a keen interest in quantum physics and astrophotography.
Traefik ist ein Reverse Proxy und besonders nützlich beim Betrieb von Containern. In diesem Blogbeitrag zeigen wir, wie wir einen auf einem Docker-Host laufenden Jenkins-Container über Traefik proxien und anschließend auch einen Artifactory-Container über denselben Port, aber unter einer anderen Subdomain, bereitstellen können.
Was ihr benötigt
Für das folgende Beispiel verwenden wir euren lokalen Laptop sowie Beispiel-Container für Jenkins und Artifactory – zwei Services, die unsere Kunden häufig einsetzen. Wir nutzen lokale Hosts und Hostnamen, sodass wir kein echtes DNS konfigurieren müssen.
Jenkins läuft auf den Ports 8080 und 50000. Wir möchten den auf Port 8080 bereitgestellten Dienst über Port 80 des Proxys verfügbar machen. Er soll unter der Domain praqma.io als Subdomain erreichbar sein: http://jenkins.praqma.io.
Auf unserem Laptop verweist jenkins.praqma.io nicht auf unseren Rechner, daher fügen wir ihn zu unserer Hosts-Datei hinzu.
echo "192.168.1.165 jenkins.praqma.io" >> /etc/hostsErsetzt die IP-Adresse durch die IP-Adresse eures Laptops.
Jenkins-Container starten
Jetzt starten wir den Jenkins-Docker-Container. Wir müssen ihm ein Label geben, da Traefik den ersten freigegebenen Port auswählt und bei Jenkins automatisch den falschen Port erkennt. Es empfiehlt sich daher, Traefik-Labels zu verwenden, um sicherzustellen, dass der richtige Port ausgewählt wird. Deshalb fügen wir das Label traefik.port=8080 hinzu, um Traefik mitzuteilen, dass stattdessen dieser Port bereitgestellt werden soll. Wir geben dem Container einen Namen (Jenkins). Dieser wird zur Subdomain.
docker run --name jenkins --label="traefik.port=8080" -d jenkinsEine Traefik-Konfiguration vorbereiten
Wir haben bereits einen laufenden Jenkins-Container, aber Traefik kann auch für bereits laufende Container verwendet werden. Konfigurieren wir also Traefik und starten es.
Erstellt und bearbeitet eine traefik.toml, um Traefik anzuweisen, den Docker-Socket auf Änderungen zu überwachen. Traefik konfiguriert sich dann bei Änderungen neu, beispielsweise wenn ein Container gestartet oder gestoppt wird.
Der Abschnitt [web] fügt ein Traefik-Web-Dashboard hinzu, in dem wir unsere Frontends, Backends und den Status sehen können. Dieses Dashboard wird über Port 8088 bereitgestellt.
Im Abschnitt [docker] geben wir den Pfad zu docker.sock, die gewünschte Domain und an, ob Traefik weiterhin auf Änderungen warten soll.
Wir möchten standardmäßig alle Container bereitstellen, daher setzen wir exposedbydefault = true. Dieser Host läuft nicht im Swarm-Modus, deshalb setzen wir swarmmode auf false.
[web] address = ":8088" [web.statistics]################################################################# Docker configuration backend################################################################[docker]endpoint = "unix:///var/run/docker.sock"domain = "praqma.io"watch = true# Expose containers by default in traefikexposedbydefault = true# Use the IP address from the bound port instead of the inner network one. For specific use-case :)usebindportip = true# Use Swarm Mode services as data providerswarmmode = falseTraefik-Proxy starten
Jetzt können wir den Traefik-Proxy-Server starten und ihm die Konfigurationsdatei als Option übergeben.
Zuerst laden wir hier die neueste Traefik-Binärdatei herunter: Traefik-Download
wget https://github.com/containous/traefik/releases/download/v1.1.1/traefik_linux-amd64 chmod u+x traefik_linux-amd64 sudo ./traefik_linux-amd64 -c traefik.tomlUnd schon ist es geschafft. Traefik überwacht docker.sock auf Container und Änderungen auf dem Host und stellt die Container für die Außenwelt bereit.
Die Hauptdomain zu eurer Hosts-Datei hinzufügen
echo "192.168.1.165 praqma.io" >> /etc/hostsDen Proxy testen
Ruft jetzt das Traefik-Dashboard unter praqma.io:8088 auf, um Details zu Traefik zu sehen.
Ihr seht, dass wir ein Frontend und ein Backend haben. Die Regel für das Frontend lautet: Host:jenkins.praqma.io. Das Backend verwendet unseren Docker-Container, um den Traffic weiterzuleiten.
Versucht nun, Jenkins aufzurufen.
Öffnet http://jenkins.praqma.io
Anschließend sollte die Jenkins-Startseite angezeigt werden:
Artifactory starten
Jetzt starten wir Artifactory und möchten, dass es über den DNS-Namen artifactory.praqma.io bereitgestellt wird.
docker run --name artifactory --label="traefik.port=8080" -d mattgruter/artifactoryArtifactory zu eurer Hosts-Datei hinzufügen
echo "192.168.1.165 artifactory.praqma.io" >> /etc/hostsJetzt sollte Traefik unseren Artifactory-Container erkennen und ihn automatisch unter http://artifactory.praqma.io bereitstellen.
Ihr werdet sehen, dass Artifactory zum Dashboard hinzugefügt wurde.
Jenkins stoppen
Stoppt jetzt den Jenkins-Container, während ihr die Traefik-Konsole beobachtet.
docker stop jenkinsNächstes Mal
Jetzt können wir Docker-Container auf einem einzelnen Host starten und sie über einen Proxy bereitstellen. Aber Container auf einem einzelnen Host sind nicht die Zukunft. Orchestratoren wie Swarm und Kubernetes sind es.
Im nächsten Blogbeitrag richten wir Traefik so ein, dass es sich mit dem API-Server (Master) eines Kubernetes-Clusters verbindet und dort denselben Trick anwendet. Nur in Kubernetes gibt es ein Objekt namens Ingress, das wir nutzen werden.
Bleibt dran ...!
- Cloud
Subscribe to our newsletter
Related blogs