En inblick i den nya världen av tjänsteidentifiering
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 är en reverse proxy och särskilt användbar när du kör containrar. I det här blogginlägget tittar vi på hur du kan proxy:a en Jenkins-container som körs på en Docker-värd via Traefik, och sedan även driftsätta en Artifactory-container på samma port men på en annan subdomän.
Det här kommer du att använda
Exemplet vi ska visa använder din lokala laptop och exempelcontainrar för Jenkins och Artifactory, två tjänster som våra kunder ofta använder. Vi använder lokala värdar och värdnamn, så vi behöver inte hantera riktig DNS.
Jenkins körs på portarna 8080 och 50000. Vi vill exponera det som körs på port 8080 på proxyns port 80. Vi vill tillhandahålla tjänsten under domänen praqma.io som en subdomän: http://jenkins.praqma.io.
På vår laptop pekar inte jenkins.praqma.io mot vår dator, så vi lägger till den i hosts-filen.
echo "192.168.1.165 jenkins.praqma.io" >> /etc/hostsErsätt IP-adressen med din laptops IP-adress.
Starta Jenkins-containern
Nu startar vi Jenkins Docker-container. Vi behöver ge den en etikett eftersom Traefik väljer den första exponerade porten, och för Jenkins väljer den automatiskt fel exponerad port. Därför är det en bra idé att ge Traefik etiketter för att säkerställa att rätt port väljs. Vi lägger alltså till etiketten traefik.port=8080 för att tala om för Traefik att använda den här porten i stället. Vi ger containern ett namn (Jenkins). Det blir subdomänen.
docker run --name jenkins --label="traefik.port=8080" -d jenkinsFörbered en Traefik-konfiguration
Vi har redan en Jenkins-container som körs, men Traefik kan även användas för containrar som redan körs. Låt oss därför konfigurera och starta Traefik.
Skapa och redigera en traefik.toml som instruerar den att lyssna på Docker-socketen efter ändringar. Traefik konfigureras då om när ändringar sker, till exempel om en container startar eller stoppas.
Delen [web] lägger till en Traefik-webbpanel där vi kan se våra frontends, backends och status. Den tillhandahåller den här panelen på port 8088.
I avsnittet [docker] anger vi sökvägen till docker.sock, domänen vi vill använda och om Traefik ska fortsätta lyssna efter ändringar eller inte.
Vi vill exponera alla containrar som standard, vilket anges med exposedbydefault = true. Den här värden körs inte i Swarm-läge, så vi ställer in swarmmode på 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 = falseStarta Traefik-proxyn
Nu är vi redo att starta Traefik-proxyservern och ange konfigurationsfilen som ett alternativ.
Först laddar vi ner den senaste binärfilen för Traefik här: ladda ner Traefik
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.tomlKlart. Traefik lyssnar på docker.sock efter containrar och ändringar på värden, och gör containrarna tillgängliga för omvärlden.
Lägg till huvuddomänen i din hosts-fil
echo "192.168.1.165 praqma.io" >> /etc/hostsTesta proxyn
Gå nu till Traefiks dashboard på praqma.io:8088 för information om Traefik.
Du ser att vi har en frontend och en backend. Regeln för frontend är: Host:jenkins.praqma.io. Backend använder vår Docker-container för att ta emot trafiken.
Prova nu att besöka Jenkins
öppna http://jenkins.praqma.io
Du bör nu se Jenkins startsida:
Starta Artifactory
Nu startar vi Artifactory och vill att det ska vara tillgängligt via DNS-adressen artifactory.praqma.io.
docker run --name artifactory --label="traefik.port=8080" -d mattgruter/artifactoryLägg till Artifactory i din hosts-fil
echo "192.168.1.165 artifactory.praqma.io" >> /etc/hostsNu ska Traefik upptäcka vår Artifactory-container och automatiskt göra den tillgänglig på http://artifactory.praqma.io.
Du kommer att se att Artifactory har lagts till i dashboarden.
Stoppa Jenkins
Stoppa nu Jenkins-containern medan du tittar på Traefik-konsolen.
docker stop jenkinsNästa gång
Nu kan vi starta Docker-containrar på en enskild host och få dem proxade. Men containrar på en enskild host är inte framtiden. Det är orkestrerare som Swarm och Kubernetes.
I nästa blogginlägg konfigurerar vi Traefik för att ansluta till API-servern (master) i ett Kubernetes-kluster och göra samma sak där. I Kubernetes finns dessutom ett objekt som kallas Ingress och som vi kommer att dra nytta av.
Håll utkik..!
- Cloud
Subscribe to our newsletter
Related blogs