Blog

Docker-konttien välityspalvelu Traefikilla

DEC 19, 2016

Kurkistus palvelujen löytämisen uuteen maailmaan

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 on käänteinen välityspalvelin, joka on erityisen hyödyllinen kontteja käytettäessä. Tässä blogikirjoituksessa tarkastelemme, miten voimme välittää Docker-hostissa toimivan Jenkins-kontin Traefikin kautta ja ottaa käyttöön myös Artifactory-kontin samalla portilla, mutta eri aliverkkotunnuksessa.

Mitä tarvitset

Esimerkissä käytämme paikallista kannettavaasi sekä Jenkinsin ja Artifactoryn esimerkkikontteja. Ne ovat kaksi palvelua, joita asiakkaamme käyttävät usein. Käytämme paikallisia hosteja ja hostnimiä, joten emme tarvitse oikeaa DNS:ää.

Jenkins toimii porteissa 8080 ja 50000. Haluamme tuoda portissa 8080 tarjottavan palvelun saataville välityspalvelimen portin 80 kautta. Haluamme tarjota sen praqma.io-verkkotunnuksen aliverkkotunnuksessa: http://jenkins.praqma.io.

Kannettavassamme jenkins.praqma.io ei osoita omalle koneellemme, joten lisäämme sen hosts-tiedostoon.

echo "192.168.1.165 jenkins.praqma.io" >> /etc/hosts

Korvaa IP-osoite kannettavasi IP-osoitteella.

Käynnistä Jenkins-kontti

Käynnistämme nyt Jenkinsin Docker-kontin. Kontille on annettava label, sillä Traefik valitsee ensimmäisen avoimen portin, ja Jenkinsin tapauksessa se valitsee automaattisesti väärän portin. Siksi Traefikille kannattaa antaa labelit, jotta oikea portti varmasti valitaan. Lisäämme labelin traefik.port=8080, jotta Traefik välittää liikenteen tämän portin kautta. Annamme kontille nimen (Jenkins). Tästä tulee aliverkkotunnus.

docker run --name jenkins --label="traefik.port=8080" -d jenkins

Valmistele Traefik-konfiguraatio

Jenkins-kontti on jo käynnissä, mutta Traefikia voidaan käyttää myös jo käynnissä olevien konttien kanssa. Konfiguroidaan siis Traefik ja käynnistetään se.

Luo ja muokkaa traefik.toml-tiedostoa siten, että se kuuntelee Docker-socketia muutosten varalta. Traefik määrittää itsensä uudelleen, kun muutoksia tapahtuu, esimerkiksi kun kontti käynnistyy tai pysähtyy.

Osio [web] lisää Traefikin verkkohallintapaneelin, jossa näemme frontendit, backendit ja tilan. Hallintapaneeli tarjotaan portissa 8088.

Osiossa [docker] määritämme docker.sockin polun, käytettävän verkkotunnuksen sekä sen, tuleeko Traefikin jatkaa muutosten kuuntelua.

Haluamme tuoda kaikki kontit oletusarvoisesti saataville asetuksella exposedbydefault = true. Tämä host ei toimi Swarm-tilassa, joten asetamme swarmmode-arvoksi 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 = false

Käynnistä Traefik-välityspalvelin

Nyt olemme valmiita käynnistämään Traefik-välityspalvelimen ja antamaan sille konfiguraatiotiedoston parametrina.

Lataa ensin Traefikin uusin binääri täältä: Traefikin lataus

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.toml

Siinä se. Traefik kuuntelee Docker-socketia hostin konttien ja muutosten varalta sekä tarjoaa kontit ulkomaailman käyttöön.

Lisää pääverkkotunnus hosts-tiedostoosi

echo "192.168.1.165 praqma.io" >> /etc/hosts

Testaa välityspalvelin

Siirry nyt Traefikin hallintapaneeliin osoitteessa praqma.io:8088 nähdäksesi Traefikin tiedot.

Traefik consol

Näet, että meillä on frontend ja backend. Frontendin sääntö on: Host:jenkins.praqma.io. Backend käyttää Docker-konttiamme liikenteen vastaanottamiseen.

Kokeile nyt avata Jenkins

avaa http://jenkins.praqma.io

Tämän jälkeen näkyviin pitäisi tulla Jenkinsin aloitussivu:

Jenkins start page

Käynnistä Artifactory

Käynnistämme nyt Artifactoryn ja haluamme sen olevan käytettävissä DNS-osoitteessa artifactory.praqma.io.

docker run --name artifactory --label="traefik.port=8080" -d mattgruter/artifactory

Lisää Artifactory hosts-tiedostoosi

echo "192.168.1.165 artifactory.praqma.io" >> /etc/hosts

Traefikin pitäisi nyt tunnistaa Artifactory-konttimme ja alkaa välittää sitä automaattisesti osoitteessa http://artifactory.praqma.io.

Huomaat, että Artifactory on lisätty hallintapaneeliin.

Traefik consol

Jenkinsin pysäyttäminen

Pysäytä nyt Jenkins-kontti samalla, kun tarkastelet Traefikin konsolia.

docker stop jenkins

Seuraavalla kerralla

Voimme nyt käynnistää Docker-kontteja yhdellä hostilla ja välittää ne proxyn kautta. Yhdellä hostilla toimivat kontit eivät kuitenkaan ole tulevaisuutta. Tulevaisuutta ovat orkestroijat, kuten Swarm ja Kubernetes.

Seuraavassa blogikirjoituksessa määritämme Traefikin muodostamaan yhteyden Kubernetes-klusterin api-serveriin (master) ja tekemään saman tempun siellä. Kubernetesissa hyödynnämme objektia nimeltä Ingress.

Pysy kuulolla..!

  • Cloud

Subscribe to our newsletter