- Traefik toimib dünaamilise pöördproksi rollis ja lahendab TLS-sertifikaate, samas kui Portainer pakub graafilist liidest Dockeri ja Swarmi haldamiseks.
- Failide traefik.yml, dynamic.yml ja docker-compose.yml kombinatsioon võimaldab teil määratleda sisenemispunktid, turbevahendustarkvara ja sildipõhise HTTP/HTTPS-marsruutimise.
- Dockeri eraldiseisva või Swarmi stsenaariumide korral ühendage teenused lihtsalt puhverserveri võrguga ja sildistage need, et Traefik saaks neid turvaliselt avastada ja avaldada.
- Let's Encrypti, spetsiaalsete võrkude ja armatuurlaual oleva elementaarse autentimise kasutamine loob tugeva keskkonna mitme rakenduse juurutamiseks ühel serveril.
Moodsa serveriserveri seadistamine Dockeri, Traefiki ja Portaineriga on praegu üks lihtsamaid viise konteinerite haldamiseks ühel serveril ja mitme teenuse HTTPS-i kaudu kättesaadavaks tegemiseks ilma konfigureerimisega takerdumist vältimata. Selle eeliseks on see, et Traefik toimib dünaamilise pöördproksi rollis, samas kui Portainer pakub väga lihtsat veebiliidest Dockeri ja soovi korral ka Swarmi haldamiseks.
Selles artiklis näete, kuidas Traefiki sobitamine Portaineri ees oleva pöördproksiks Nii "klassikalise" Dockeri (eraldiseisva) stsenaariumi kui ka Docker Swarmi klastri puhul, kuidas integreerida TLS-i (iseallkirjastatud või Let's Encrypt) ja millised konfiguratsioonifailid mängu tulevad (traefik.yml, dynamic.yml y docker-compose.yml) ja mõned levinud nipid vahevara, võrkude ja tüüpiliste sildistusprobleemidega Traefikus.
Milline roll on Dockeril, Traefikul ja Portaineril arhitektuuris?
Seda tüüpi seadistuses on Docker baaskiht, kus konteinerid töötavad, Traefik toimib pöördproksi ja koormuse tasakaalustajana , mis võtab vastu kõik HTTP/HTTPS-päringud portidel 80 ja 443 ning saadab need vastavale konteinerile, ning Portainer pakub graafilist liidest piltide, konteinerite, köidete, võrkude ja Dockeri või Swarmi pinude haldamiseks.
Idee on omada ühte Dockeriga hosti, kus Traefik asub "väravas"kuulake sisenemispunktides web (80) y websecure (443), lahendab TLS-sertifikaadid (tavaliselt Let's Encryptiga) ja tänu integratsioonile Dockeri pakkujaga avastab automaatselt teie avaldatud teenused, lisades konteineritele silte.
Teisest küljest töötab Portainer nagu lihtsalt järjekordne konteiner, kuid on läbi selle paljastatud. näiteks konkreetne alamdomeen portainer.tudominio.com, kaitstud TLS-iga ja soovi korral täiendava autentimisvahendustarkvara taga, mis ulatub Portaineri enda sisselogimisest kaugemale. Kõik see on korraldatud a-ga docker-kompositsiooni mis defineerib Traefiki, Portainerit ja tüüpilise võrgustiku proxy.
Selle lähenemisviisi selge eelis on see, et saate uusi teenuseid juurutada lihtsalt konteineritele silte lisades : Traefik tuvastab Dockeris muudatused, loob koheselt ruuterid, teenused ja vahevara ning sekunditega on teil uus alamdomeen või marsruut töökorras ilma staatilisi konfiguratsioonifaile käsitsi puudutamata.
Traefik staatiline konfiguratsioon: traefik.yml
Traefiku staatiline konfiguratsioon salvestatakse tavaliselt sellisesse faili nagu traefik.ymlmis on paigaldatud konteineri sisse. Siin on see defineeritud armatuurlaud, sisenemispunktid, pakkujad ja sertifikaatide lahendaja Krüpteerime muuhulgas.
Tüüpiline YAML-i seadistamine algab API ja juhtpaneeli aktiveerimisega millegi sellisega nagu api: dashboard: trueSee võimaldab juurdepääsu veebiliidesele, kus saate vaadata ruutereid, teenuseid ja vahetarkvara. See paneel pole vaikimisi autentitud, seega vaatame hiljem, kuidas seda dünaamilisest konfiguratsioonist põhiautentimisega kaitsta.
Seejärel defineeritakse sisenemispunktid. Tavaliselt on neid sisenemispunkt web sadamas 80 ja veel üks websecure 443is. Aastal web Automaatne ümbersuunamine on tavaliselt konfigureeritud nii, et websecurenii et iga HTTP-juurdepääs suunatakse ümber HTTPS-ile:
Tüüpiline ülevaade sisaldaks osa http.redirections.entryPoint.to: websecure et sundida seda ümbersuunamist ja koondada kogu krüpteeritud liiklus turvalisse sisenemispunkti.
et websecure On märgitud, et tuleks kasutada TLS-i ja link on lisatud. sertifikaadilahendaja (näiteks letsencrypt), mis vastutab sertifikaatide automaatse haldamise eest. Kõike seda toetab ACME, mis on protokoll, mida Let's Encrypt kasutab sertifikaatide väljastamiseks ja uuendamiseks.
Plokis pakkujad Dockeri pakkuja on konfigureeritud ja osutab soklile unix:///var/run/docker.sockühe peamise valikuga: exposedByDefault: falseSellega ei avalda Traefik vaikimisi kõiki konteinereid; ainult neid, millel on silt traefik.enable=trueSamuti saate konfigureerida failipakkuja (file) täiendava dünaamilise konfiguratsiooni laadimiseks näiteks /configurations/dynamic.yml.
Lõpuks sisaldab staatiline fail tavaliselt jaotist certificatesResolverskus ACME lahendaja on defineeritud: registreerimis-e-post, salvestusfail (tavaliselt acme.json), võtme tüüp (näiteks EC384) ja valideerimismeetod (näiteks httpChallenge sisenemispunktis webOn oluline, et loo päris e-post selles jaotises, kuna Let's Encrypt kasutab seda teadete ja uuenduste jaoks; kui jätate näiva või valesti vormindatud väärtuse, võib Traefik konteineri käivitamisel tekkida vigu.
Lisaks sellele YAML-i konfiguratsioonile on olemas ka juurutusi, mis kasutavad TOML-vorming (traefik.toml)Aga loogika on sama: nad jagavad sektsiooni lahendaja sertifikaate (näiteks [certificatesResolvers.main.acme]), määratleda väljakutsed (näiteks dnsChallenge koos provider = "route53") ja lisage TLS-i vaikesuvandid, näiteks jõud minVersion = "VersionTLS13" või konfigureerige loend cipherSuites lubatud.
Dünaamiline konfiguratsioon: vahevara, TLS ja turvalisus
Traefiki dünaamiline osa läheb tavaliselt faili, näiteks dynamic.yml, laaditud failipakkuja poolt. Siin defineerite vahevara ja TLS-i valikud mida saab muuta ilma Traefik konteinerit taaskäivitamata, mis on turvalisuse koheseks kohandamiseks väga kasulik.
Tüüpiline juhtum on näiteks päise vahevara loomine secureHeadersmis lisab HSTS-iga seotud poliitikad ja HTTPS-i kohustusliku kasutamise. YAML-is võite leida parameetreid, näiteks sslRedirect: true, forceSTSHeader: true, stsIncludeSubdomains: true, stsPreload: true ja stsSeconds kõrge (näiteks aasta sekundites). See tugevdab liikluse turvalisust brauseri poolelt.
Teine levinud vahevara on näiteks elementaarse autentimise tarkvara. user-auth tüüpi basicAuth, kus kasutajate loend deklareeritakse vormingus usuario:hashRäsi genereeritakse tavaliselt koos htpasswd ja on faili sisse põimitud. See vahevara on tavaliselt seotud Traefik armatuurlaua ruuteriga, nii et lisaks HTTPS-juurdepääsule nõuab see ka kasutajanime ja parooli.
Sama dünaamilise konfiguratsiooni sees on tavaline näha plokki tls.options vaikeprofiiliga (default), kus on määratud toetatud šifrid ja minimaalne TLS-i versioon, näiteks VersionTLS12Mõnes juurutuses on määratletud mitu valikut (näiteks profiil nimega tls12 ja veel üks default) vajadusel turvataseme kohandamiseks erinevatele teenustele.
Keskkondades, kus soovitakse kasutada TLS ka sisemiselt Traefiku ja taustteenuste (nt Portainer) vahel võib tekkida probleem, kui neil teenustel puudub avaliku sertifitseerimisasutuse poolt tunnustatud sertifikaat. Siin tulebki see valik mängu. insecureSkipVerify, mis on konfigureeritud jaotises providers.http.tls Või sobivate TLS-valikute korral lubab see Traefikul mööda hiilida taustsüsteemi sertifikaatide valideerimisest. See on kasulik laborikeskkondade või sisemiste iseallkirjastatud sertifikaatide puhul, kuid seda tuleks kasutada ettevaatlikult, kuna see leevendab kontrollimist.
Praktiline detail: fail dynamic.yml Seda saab lennult redigeerida.Traefik laadib dünaamilise konfiguratsiooni uuesti ilma taaskäivitamist nõudmata, nii et saate lisada või eemaldada vahetarkvara, muuta turvapäiseid või muuta põhiautentimist ilma puhverserveri saadavust mõjutamata.
docker-compose koos Traefiki ja Portaineriga Dockeri eraldiseisvas keskkonnas
Paljas Dockeri stsenaariumis, ilma Swarmita, on kõige tavalisem asi käivitamine Traefik ja Portainer üheainsa docker-compose.yml mis defineerib nii teenused kui ka jagatud sillatüüpi võrgu, mida nimetatakse näiteks proxy.
Teenus Traefik Tavaliselt kasutatakse näiteks ametlikku pilti. traefik:latest või konkreetne versioon, näiteks traefik:v3.4Pordid on kaardistatud. 80 ja 443 veebiliikluse jaoks ja mõnes näites port 8080 juhtpaneeli sisemiseks kuvamiseks. Lisaks on see valik lisatud restart: unless-stopped ja turvalisust tugevdatakse security_opt: - no-new-privileges:true et vähendada konteineri sees privileegide eskaleerumise ohtu.
Köidete osas peab Traefik ühendama kirjutuskaitstud Dockeri sokli (/var/run/docker.sock:/var/run/docker.sock:ro) konteinerite avastamiseks, staatiline fail traefik.yml ja kataloog, kuhu dünaamiline konfiguratsioon salvestatakse (./traefik-data/configurations:/configurationsFail on ka paigaldatud. acme.jsonSiia salvestab Traefik Let's Encrypti väljastatud sertifikaadid. See fail luuakse hostis ja sellele antakse õigused. 600 nii et ainult vastav kasutaja saab seda lugeda ja kirjutada; kui jätate selle 644-ga, kurdab Traefik tavaliselt.
Traefiki maagia kasutamise võti on teenindussildidMuuhulgas leiad siit: traefik.enable=true (nii et Dockeri pakkuja seda teenust avalikustaks), traefik.docker.network=proxy (näitab, millist võrku peaks Traefik konteineriga suhtlemiseks kasutama) ja ruuterit, näiteks traefik.http.routers.traefik-secure, siltidega, mis määravad selle sisenemispunkti (websecure), hosti reegel (näiteks Host(`traefik.tudominio.com`)), seotud teenus (api@internal) ja autentimisvahendustarkvara (user-auth@file).
Teenus Portiner samas docker-compose.yml üldiselt kasutab portainer/portainer-ce:latest (või Enterprise'i väljaanne, kui teil on litsents). Sarnased köited on ühendatud: Dockeri sokkel, andmekaust (./portainer-data:/data) ja sageli ka /etc/localtime nii et see pärib hosti ajavööndi.
Portaineri sildid registreerivad selle Traefikuga: traefik.enable=true, traefik.docker.network=proxytüüpi ruuter traefik.http.routers.portainer-secure sisenemispunktiga websecure ja hosti reegel nagu Host(`portainer.tudominio.com`)Lisaks on defineeritud teenus, mida Traefik peaks kasutama, osutades Portaineri sisemisele pordile, näiteks koos traefik.http.services.portainer.loadbalancer.server.port=9000.
Kõige selle juures, pärast käivitamist docker compose up -d Stack-kataloogis laadib Traefik pildid alla ja loob võrgu. proxy Kui see on deklareeritud välisena ja kuvab mõlemad paneelid konfigureeritud alamdomeenides, siis Automaatne HTTPS tänu Let's EncryptileSellest hetkest alates on uute teenuste lisamine lihtsalt projekti kloonimine, mõne Traefik-sildi lisamine ja võrguga ühendamine. proxy.
Docker Swarmi stsenaarium: Portainer ja Traefik klastris
Docker Swarmi aktiveerimisel asjad veidi muutuvad, kuna teenused juurutatakse pinudena ja võrgud on tavaliselt kihilised. Traefiki ja Portaineri alusloogika on aga väga sarnane: Traefik toimib jätkuvalt pöördproksi ja dünaamilise teenuste avastajana ning Portainer saab klastri kaugsõlmede haldamiseks töötada nii eraldiseisvas režiimis kui ka Portainer + agent režiimis.
Tüüpilises Swarmi juurutuses luuakse pinu enne selle rakendamist. kaks kattevõrku mida Traefik kasutab liikluse suunamiseks sõlmede vahel. Lisaks luuakse maht Portaineri andmete säilitamiseks (näiteks) portainer_data) ja kui vaja, siis üks acme.json või kataloog, kuhu Traefik sertifikaate ja konfiguratsiooni salvestab.
El docker-compose.yml (mis seejärel avaneb koos docker stack deploy kasutades näiteks -c portainer.yml) defineerib tavaliselt kaks teenust: Portainer agent, mis töötab režiimis global kõigil Linuxi sõlmedel ja peamine Portainer teenus (CE või EE), mis tavaliselt jääb replikeeritud režiimi piiranguga, et see töötaks ainult haldurites.
Portaineri agent ühendab Dockeri sokli ja köitekataloogi (/var/lib/docker/volumes) ressursside kontrollimiseks. See loob ühenduse pealisvõrguga, mida jagatakse näiteks Traefikiga. traefik_publicPeamise Portaineri teenuse saab konfigureerida agendiga suhtlema TCP kaudu (tcp://tasks.agent:9001) ja tegelikult on see käsk mõnes näites näidatud koos --tlsskipverify kommenteeris, et vajadusel TLS-i kinnitus vahele jätta.
Samal või teisel pinul käivitub Traefik Dockeri pakkujaga Swarm-režiimis (swarmMode = true TOML-is või samaväärne valik lippudes), jälgides sildistatud teenuseid. Selle konfiguratsioon sisaldab certificatesResolvers.main.acme Let's Encrypti jaoks dnsChallenge sellise tarnijaga nagu Marsruut53 Kui soovite sertifikaate DNS-i abil valideerida ja plokk tls.options kus see on näiteks sunnitud minVersion = "VersionTLS13" vaikeprofiili jaoks ja on määratletud selgesõnaline loend cipherSuites TLS 1.2 profiili jaoks.
Portaineri plaadifirmad Swarmis järgivad sama filosoofiat: traefik.enable=trueruuter nagu traefik.http.routers.portainer koos Host(`portainer.midominio.com`), traefik.http.routers.portainer.entrypoints=https (o websecure (nimetuse järgi) ja traefik.http.routers.portainer.tls=true et lubada TLS sellel ruuteril. Lisaks saate määrata sertresolver koos traefik.http.routers.portainer.tls.certresolver=main ja taustasüsteemi skeem, kui teenus räägib sisemiselt HTTPS-i traefik.http.services.portainer.loadbalancer.server.scheme=https.
Swarmi Traefiki silumislogides näete genereeritud konfiguratsiooni: ruuterid nagu api y portaineravastatud teenused (näiteks portainer en http://10.0.1.12:9000 ja teenus traefik (osutab armatuurlaua pordile 8080) ja kui on probleeme halvasti määratletud siltidega, kuvatakse selliseid teateid nagu "Ruuteri teenusenime ei õnnestunud määratleda: liiga palju teenuseid"mis tavaliselt näitavad ruuteriga seotud teenuste konflikti või dubleerimist.
Minimaalne näide: whoami, marsruudid ja TLS koos Traefikuga
Enne Portaineri võrrandisse toomist on üsna praktiline proovida Traefikut väga lihtsa taustaprogrammiga, näiteks pildiga. traefik/whoamimis tagastab päringu kohta teavet. See aitab teil kontrollida, kas Traefik on õigesti konfigureeritud ja kas marsruutimisreeglid toimivad.
Un docker-compose.yml põhiteenus võib sisaldada traefik koos pildiga traefik:v3.4, Dockeri sokli paigaldamine ja alglaadimislipude määratlemine järgmiselt --providers.docker=true, --providers.docker.exposedbydefault=false, --providers.docker.network=proxy ja sisenemispunkt --entryPoints.web.address=:80Pordid 80 ja 8080 reklaamitakse hostis ning luuakse võrk. proxy mis kasutab ka konteinerit whoami.
Teenus whoami See algab samast võrgust ja on tähistatud tähega traefik.enable=trueSeejärel defineeritakse ruuter sildiga traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`) ja on märgitud, et teie sisenemispunkt on webKui esitate päringu koos curl -H "Host: whoami.docker.localhost" http://localhost/Näete vastust hostinime, IP-aadresside, päiste jms-ga, mis kinnitab, et Traefik marsruutib õigesti.
Sealt edasi on kõik lihtne. lisa marsruutimine teede kaupaNäiteks saate luua teise teenuse. whoami-api sama pildiga, samas võrgus ja märgista see reegliga, mis on tüüpi Host(`whoami.docker.localhost`) && PathPrefix(`/api`)Seega juur / minema whoami originaal ja taotlused /api teenindab neid whoami-apiSeda saate kontrollida, esitades päringuid / ya /api sama peremehega.
Aktiveerimiseks TLS Selles kohalikus keskkonnas on üks võimalus domeeni jaoks iseallkirjastatud sertifikaadi genereerimine. *.docker.localhost koos opensslSa lood kataloogi certs, genereerite local.key y local.crtja seejärel lisate dünaamilise faili (näiteks dynamic/tls.yml) koos sektsiooniga tls: ja marsruudid certFile y keyFile osutades neile failidele.
Järgmisena värskendate Traefik teenuse definitsiooni docker-compose.yml kausta paigaldamiseks ./certs ja kaust ./dynamic konteineri sees aktiveerite turvalise API --api.dashboard=true, lood sisenemispunkti websecure (--entryPoints.websecure.address=:443) ja lubage seal TLS --entryPoints.websecure.http.tls=trueSamuti märgistate armatuurlaua ruuteri ja ruuterid whoami et nad saaksid seda kasutada websecure ja neil on tls=true.
Kui see on üleval, pääsete ligi https://whoami.docker.localhost/ ja Traefiki paneelile iseallkirjastatud sertifikaadiga, aktsepteerides brauseri turvahoiatust. See kogemus on väga sarnane sellele, mis teil hiljem Let's Encryptiga tootmiskeskkonnas on, kuid ilma avalike DNS-serveriteta.
Parimad tavad, rakenduste juurutamine ja tüüpiliste probleemide lahendamine
Üks muster, mis kõigis neis näidetes kordub, on see, et Traefik lihtsustab oluliselt uute rakenduste juurutamistKui baaspakk (Traefik + Portainer + võrgustik) on olemas, proxy (+ sertifikaadid), uue teenuse lisamine taandub tavaliselt järgmisele:
Kloonige projekt või kopeerige oma docker-compose.yml serverisse suunake alamdomeen hosti IP-aadressile, kasutades rekord A teie DNS-is (näiteks app.tudominio.com) ja seejärel lisage teenusele võtmesildid: traefik.enable=true, traefik.docker.network=proxy ja ruuter, millel on selle alamdomeeni jaoks hosti reegel, mis määrab turvalise sisenemispunkti websecure ja teenus õige sisemise pordiga.
Paljud õpetused näitaksid näiteks väikese rakenduse juurutamist FastAPI Eraldatud: lisatakse neli silti, mis tagavad võrguga liitumise. proxy jaotises networks kohta docker-compose.ymlja pärast tegemist docker compose up -d Rakendus kuvatakse Traefiki armatuurlaual automaatselt lubatud TLS-iga. Traefiki automaatne avastamine tähendab, et te ei pea isegi selle staatilisi seadeid muutma.
Selleks, et kõik sujuks, on oluline pöörata tähelepanu mõnele detailile: Ärge kasutage sama ruuteri identifikaatorit uuesti Kontrollige erinevates rakendustes, et iga ruuteriga oleks seotud ainult üks teenus (vältides viga „liiga palju teenuseid”) ja kasutage ühtseid võrgunimesid (näiteks proxy kõigil pinudel, mida soovite paljastada) ja kui kasutate Let's Encrypti, veenduge, et acme.json Sellel on õigused 600 ja konfigureeritud e-posti aadress on kehtiv.
Swarmi keskkondades kontrollige ka, et Traefiku konfiguratsioon sisaldaks Dockeri pakkujat. swarmMode=true y watch=trueja et teenuste piirangud (näiteks node.role == manager (Portaineri puhul) ei ole vastuolus Traefiki juurutamise kohaga. Silumislogid on väga pikad, kuid on marsruutimise või TLS-i probleemide leidmisel üliolulised.
Dockeri, Traefiku ja Portaineri kombineerimisel saate luua ühele serverile täieliku kergekaalulise orkestreerimiskeskkonna, millel on graafilised juhtpaneelid, automaatsed sertifikaadid ja väga kiire juurutamisvoog, kus teenuste lisamine, värskendamine või eemaldamine piirdub YAML-i mõne rea muutmisega ja Traefiku laseb teha pöördproksi ja TLS-i räpase töö.
