- Traefik deluje kot dinamični obratni proxy in razrešuje TLS potrdila, medtem ko Portainer ponuja grafični vmesnik za upravljanje Dockerja in Swarma.
- Kombinacija datotek traefik.yml, dynamic.yml in docker-compose.yml vam omogoča definiranje vstopnih točk, varnostne vmesne programske opreme in usmerjanja HTTP/HTTPS na podlagi oznak.
- V samostojnih scenarijih Docker ali Swarm preprosto pridružite storitve omrežju proxy in jih označite, da jih Traefik lahko varno odkrije in razkrije.
- Uporaba Let's Encrypt, namenskih omrežij in osnovne avtentikacije na nadzorni plošči utrjuje robustno okolje za uvajanje več aplikacij na enem strežniku.
Sestavite sodoben sklad z Docker, Traefik in Portainer Trenutno je to eden najlažjih načinov za upravljanje vsebnikov na enem strežniku in izpostavljanje več storitev s HTTPS, ne da bi se pri tem zapletli v konfiguracijo. Lepota tega je v tem, da Traefik deluje kot dinamični obratni proxy, medtem ko Portainer ponuja zelo preprost spletni vmesnik za upravljanje Dockerja in, če želite, tudi Swarma.
V tem članku boste videli, kako namestitev Traefika kot obratnega posrednika pred Portainerja V "klasičnem" scenariju Docker (samostojnem) in v gruči Docker Swarm, kako integrirati TLS (samopodpisan ali Let's Encrypt) in katere konfiguracijske datoteke pridejo v poštev (traefik.yml, dynamic.yml y docker-compose.yml) in nekaj pogostih trikov z vmesno programsko opremo, omrežji in tipičnimi težavami z označevanjem v Traefiku.
Kakšne vloge imajo Docker, Traefik in Portainer v arhitekturi?
Pri tej vrsti nastavitve, Lučki delavec To je osnovna plast, kjer tečejo kontejnerji, Traefik deluje kot obratni proxy in uravnalnik obremenitve ki prejme vse zahteve HTTP/HTTPS na vratih 80 in 443 ter jih posreduje ustreznemu vsebniku, in Portainer ponuja grafični vmesnik za upravljanje slik, vsebnikov, nosilcev podatkov, omrežij in skladov Docker ali Swarm.
Ideja je imeti enega gostitelja z Dockerjem, kjer Traefik se nahaja na "prehodu"poslušajte na vstopnih točkah web (80) y websecure (443), razrešuje TLS potrdila (običajno z Let's Encrypt) in zaradi integracije s ponudnikom Docker samodejno odkrije storitve, ki jih izpostavite, tako da vsebnikom doda oznake.
Po drugi strani pa Portainer deluje kot le še en kontejner, vendar je izpostavljen skozi določena poddomena, na primer portainer.tudominio.com, zaščiten s TLS in po želji za dodatno vmesno programsko opremo za preverjanje pristnosti, ki presega Portainerjeve lastne prijave. Vse to je orkestrirano z docker-compose ki definira Traefika, Portainerja in skupno omrežje tipa proxy.
Ena jasna prednost tega pristopa je, da lahko Uvedite nove storitve preprosto z dodajanjem oznak V vaših vsebnikih: Traefik zazna spremembo v Dockerju, sproti ustvarja usmerjevalnike, storitve in vmesno programsko opremo in v nekaj sekundah imate novo poddomeno ali pot zagnano, ne da bi se ročno dotikali statičnih konfiguracijskih datotek.
Statična konfiguracija Traefika: traefik.yml
Statična konfiguracija Traefika je običajno shranjena v datoteki, kot je traefik.ymlki je nameščen znotraj vsebnika. Tukaj je definiran nadzorna plošča, vstopne točke, ponudniki in razreševalec potrdil Šifrirajmo, med drugim.
Tipična konfiguracija YAML se začne z aktiviranjem API-ja in nadzorne plošče z nečim podobnim api: dashboard: trueTo omogoča dostop do spletnega vmesnika, kjer si lahko ogledate usmerjevalnike, storitve in vmesno programsko opremo. Ta plošča privzeto ni overjena, zato bomo kasneje videli, kako jo zaščititi z osnovno overitvijo iz dinamične konfiguracije.
Nato so definirane vstopne točke. Običajno obstajajo vstopna točka web v pristanišču 80 in druge websecure v 443. V web Samodejna preusmeritev je običajno konfigurirana tako, da websecuretako da se vsak dostop HTTP preusmeri na HTTPS:
Tipičen oris bi vključeval razdelek http.redirections.entryPoint.to: websecure da se prisili preusmeritev in centralizira ves šifriran promet na varni vstopni točki.
za websecure Navedeno je, da je treba uporabiti TLS, in podana je povezava. certResolver (npr letsencrypt), ki bo odgovoren za samodejno upravljanje potrdil. Vse to podpira ACME, ki je protokol, ki ga Let's Encrypt uporablja za izdajanje in obnavljanje potrdil.
V bloku ponudniki Ponudnik Docker je konfiguriran in kaže na vtičnico unix:///var/run/docker.sockz eno ključno možnostjo: exposedByDefault: falseS tem Traefik ne objavi vseh vsebnikov privzeto; samo tiste, ki imajo oznako traefik.enable=trueKonfigurirate lahko tudi ponudnika datotek (file) za nalaganje dodatne dinamične konfiguracije iz, na primer, /configurations/dynamic.yml.
Končno statična datoteka običajno vključuje razdelek certificatesResolverskjer je definiran razreševalec ACME: registracijski e-poštni naslov, datoteka za shranjevanje (običajno acme.json), tip ključa (na primer EC384) in metoda validacije (na primer httpChallenge na vstopni točki webPomembno je, da nastavite pravi e-poštni naslov v tem razdelku, ker ga Let's Encrypt uporablja za obvestila in podaljšanja; če pustite navidezno ali napačno oblikovano vrednost, lahko pri zagonu vsebnika Traefik naletite na napake.
Poleg te konfiguracije YAML obstajajo tudi uvedbe, ki uporabljajo Oblika TOML (traefik.toml)Vendar je logika enaka: razdelijo potrdila razreševalnika (na primer [certificatesResolvers.main.acme]), opredelite izzive (kot so dnsChallenge z provider = "route53") in dodajte privzete možnosti TLS, kot so forzar minVersion = "VersionTLS13" ali konfigurirajte seznam cipherSuites dovoljeno.
Dinamična konfiguracija: vmesna programska oprema, TLS in varnost
Dinamični del Traefika se običajno shrani v datoteko, kot je dynamic.yml, ki ga naloži ponudnik datoteke. Tukaj definirate vmesna programska oprema in možnosti TLS ki ga je mogoče spremeniti brez ponovnega zagona vsebnika Traefik, kar je zelo uporabno za prilagajanje varnosti sproti.
Tipičen primer je na primer ustvarjanje vmesne programske opreme za glave secureHeaderski dodaja pravilnike, povezane s HSTS in obvezno uporabo HTTPS. V YAML lahko najdete parametre, kot so sslRedirect: true, forceSTSHeader: true, stsIncludeSubdomains: true, stsPreload: true in stsSeconds visoko (na primer leto v sekundah). To krepi varnost prometa s strani brskalnika.
Druga pogosta vmesna programska oprema je na primer tista za osnovno avtentikacijo user-auth vrste basicAuth, kjer je seznam uporabnikov deklariran v formatu usuario:hashZgoščena vrednost se običajno generira z htpasswd in je vdelana v datoteko. Ta vmesna programska oprema je običajno povezana z usmerjevalnikom nadzorne plošče Traefik, tako da poleg dostopa HTTPS zahteva uporabniško ime in geslo.
Znotraj iste dinamične konfiguracije je pogosto videti blok tls.options s privzetim profilom (default), kjer so na primer določene podprte šifre in minimalna različica TLS VersionTLS12V nekaterih uvedbah je definiranih več možnosti (na primer profil z imenom tls12 in druge default) za prilagoditev ravni varnosti različnim storitvam, če je potrebno.
V okoljih, kjer je zaželena uporaba TLS tudi interno Med Traefikom in zalednimi storitvami (kot je Portainer) lahko pride do težave, če te storitve nimajo potrdila, ki ga priznava javni overitelj potrdil. Tukaj pride v poštev ta možnost. insecureSkipVerify, ki je konfiguriran pod providers.http.tls ali v ustreznih možnostih TLS omogoča Traefiku, da obide preverjanje potrdil v zaledju. To je uporabno za laboratorijska okolja ali interna samopodpisana potrdila, vendar ga je treba uporabljati previdno, ker olajšuje preverjanje.
Praktična podrobnost: datoteka dynamic.yml Urejati ga je mogoče sproti.Traefik ponovno naloži dinamično konfiguracijo brez ponovnega zagona, tako da lahko dodate ali odstranite vmesno programsko opremo, spremenite varnostne glave ali spremenite osnovno preverjanje pristnosti, ne da bi to vplivalo na razpoložljivost proxyja.
docker-compose s Traefikom in Portainerjem v samostojnem Dockerju
V scenariju golega Dockerja, brez Swarma, je najpogostejša stvar zagon Traefik in Portainer z enim samim docker-compose.yml ki definira tako storitve kot tudi skupno omrežje tipa mostu, imenovano na primer proxy.
Storitev Traefik Običajno uporablja uradno sliko, na primer traefik:latest ali določeno različico, kot je traefik:v3.4Vrata so preslikana. 80 in 443 za spletni promet in v nekaterih primerih vrata 8080 za interni dostop do nadzorne plošče. Dodana je tudi možnost restart: unless-stopped in varnost je okrepljena z security_opt: - no-new-privileges:true da se zmanjša tveganje za povečanje privilegijev znotraj vsebnika.
Glede nosilcev podatkov mora Traefik priklopiti vtičnico Docker samo za branje (/var/run/docker.sock:/var/run/docker.sock:ro) za odkrivanje vsebnikov, statične datoteke traefik.yml in imenik, kamor bo shranjena dinamična konfiguracija (./traefik-data/configurations:/configurationsDatoteka je tudi nameščena. acme.jsonTukaj Traefik shranjuje potrdila, ki jih izda Let's Encrypt. Ta datoteka je ustvarjena na gostitelju in ji so dodeljena dovoljenja. 600 tako da ga lahko bere in piše le ustrezen uporabnik; če pustite vrednost 644, se Traefik običajno pritožuje.
Ključ do Traefikove čarovnije je oznake storitevMed drugim boste našli: traefik.enable=true (da ponudnik Dockerja razkrije to storitev), traefik.docker.network=proxy (označuje, katero omrežje naj Traefik uporablja za komunikacijo z vsebnikom) in usmerjevalnik, kot je traefik.http.routers.traefik-secure, z oznakami, ki definirajo njegovo vstopno točko (websecure), pravilo gostitelja (na primer Host(`traefik.tudominio.com`)), povezana storitev (api@internal) in vmesna programska oprema za preverjanje pristnosti (user-auth@file).
Storitev nosilec v istem docker-compose.yml običajno uporablja portainer/portainer-ce:latest (ali izdajo Enterprise, če imate licenco). Priklopljeni so podobni nosilci podatkov: vtičnica Docker, mapa s podatki (./portainer-data:/data) in pogosto tudi /etc/localtime tako da podeduje časovni pas gostitelja.
Portainerjeve etikete so ga registrirale pri Traefiku: traefik.enable=true, traefik.docker.network=proxyusmerjevalnik te vrste traefik.http.routers.portainer-secure z vstopno točko websecure in pravilo gostitelja, kot je Host(`portainer.tudominio.com`)Poleg tega je storitev, ki jo mora Traefik uporabljati, definirana tako, da kaže na notranja vrata Portainerja, na primer z traefik.http.services.portainer.loadbalancer.server.port=9000.
Z vsem tem v teku, po izstrelitvi docker compose up -d V imeniku stack Traefik prenese slike in ustvari omrežje. proxy Če je deklariran kot zunanji in izpostavi obe plošči v konfiguriranih poddomenah, z Samodejni HTTPS zahvaljujoč Let's EncryptOd takrat naprej je dodajanje novih storitev stvar kloniranja vašega projekta, dodajanja nekaj oznak Traefik in povezave z omrežjem. proxy.
Scenarij Docker Swarm: Portainer in Traefik v gruči
Ko aktivirate Docker roj Slika se nekoliko spremeni, ker so storitve nameščene kot skladi, omrežja pa običajno temeljijo na prekrivnih elementih. Vendar pa je osnovna logika Traefika in Portainerja zelo podobna: Traefik še naprej deluje kot obratni proxy in dinamični iskalnik storitev, Portainer pa lahko deluje tako v samostojnem kot omrežnem načinu. Prevoznik + agent za upravljanje oddaljenih vozlišč znotraj gruče.
V tipični uvedbi Swarm se sklad ustvari, preden se uporabi. dve prekrivni mreži ki ga bo Traefik uporabil za usmerjanje prometa med vozlišči. Poleg tega se ustvari nosilec za shranjevanje podatkov Portainer (na primer) portainer_data) in, če ga potrebujete, enega za acme.json ali imenik, kjer Traefik shranjuje potrdila in konfiguracijo.
El docker-compose.yml (ki se nato razplete z docker stack deploy z uporabo, na primer, -c portainer.yml) običajno definira dve storitvi: Agent za prenosne tovornjake, ki deluje v načinu global na vseh vozliščih Linux in glavna storitev Portainer (CE ali EE), ki običajno ostane v repliciranem načinu z omejitvijo, da se izvaja samo na upravljalnikih.
Agent Portainer priklopi vtičnico Docker in imenik z nosilcem podatkov (/var/lib/docker/volumes) da lahko pregleda vire. Poveže se s prekrivnim omrežjem, ki ga bo na primer delil s Traefikom traefik_publicGlavno storitev Portainer je mogoče konfigurirati za komunikacijo z agentom prek TCP (tcp://tasks.agent:9001) in dejansko je v nekaterih primerih ta ukaz prikazan z --tlsskipverify komentiral, da po potrebi preskoči preverjanje TLS.
Na istem ali drugem skladu se Traefik zažene s ponudnikom Docker v načinu Swarm (swarmMode = true v TOML ali enakovredna možnost v zastavicah), pri čemer se opazujejo označene storitve. Njegova konfiguracija vključuje certificatesResolvers.main.acme za Let's Encrypt, dnsChallenge z dobaviteljem, kot je Pot53 Če želite potrdila preveriti prek DNS-a in bloka tls.options kjer je na primer prisiljen minVersion = "VersionTLS13" za privzeti profil in definiran je eksplicitni seznam cipherSuites za profil TLS 1.2.
Portainerjeve etikete pri Swarmu sledijo isti filozofiji: traefik.enable=trueusmerjevalnik, kot je traefik.http.routers.portainer z Host(`portainer.midominio.com`), traefik.http.routers.portainer.entrypoints=https (o websecure (glede na poimenovanje) in traefik.http.routers.portainer.tls=true da omogočite TLS na tem usmerjevalniku. Poleg tega lahko določite certresolver z traefik.http.routers.portainer.tls.certresolver=main in shemo zaledja, če storitev interno uporablja HTTPS z traefik.http.services.portainer.loadbalancer.server.scheme=https.
V dnevnikih odpravljanja napak Traefik v Swarmu boste videli ustvarjeno konfiguracijo: usmerjevalniki, kot so api y portainerodkrite storitve (na primer portainer en http://10.0.1.12:9000 in storitev traefik (ki kaže na vrata 8080 nadzorne plošče) in če pride do težave s slabo definiranimi oznakami, sporočila, kot so "Imena storitve za usmerjevalnik ni bilo mogoče določiti: preveč storitev"ki običajno kažejo na konflikt ali podvajanje storitev, povezanih z usmerjevalnikom.
Minimalni primer: whoami, poti in TLS s Traefikom
Preden v enačbo vključimo Portainer, je precej praktično preizkusiti Traefik z zelo preprostim zaledjem, kot je slika. traefik/whoamiki vrne informacije o zahtevi. To vam pomaga preveriti, ali je Traefik pravilno konfiguriran in ali pravila usmerjanja delujejo.
Un docker-compose.yml osnovno lahko vključuje storitev traefik s sliko traefik:v3.4, priklop Dockerjevega vtičnika in definiranje zagonskih zastavic kot --providers.docker=true, --providers.docker.exposedbydefault=false, --providers.docker.network=proxy in vstopna točka --entryPoints.web.address=:80Vrata 80 in 8080 se oglašujeta na gostitelju in ustvari se omrežje. proxy ki bo prav tako uporabljal posodo whoami.
Storitev whoami Začne se v istem omrežju in je označen z traefik.enable=trueNato je usmerjevalnik definiran z oznako traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`) in je označeno, da je vaša vstopna točka webČe oddate zahtevo z curl -H "Host: whoami.docker.localhost" http://localhost/Videli boste odgovor z imenom gostitelja, IP-ji, glavami in tako naprej, kar potrjuje, da Traefik pravilno usmerja.
Od tam naprej je preprosto. dodajte usmerjanje po potehNa primer, lahko ustvarite še eno storitev. whoami-api z isto sliko, v istem omrežju, in jo označite s pravilom tipa Host(`whoami.docker.localhost`) && PathPrefix(`/api`)Torej, koren / Pojdi do whoami izvirnik in zahteve za /api jim bo služil whoami-apiTo lahko preverite tako, da pošljete zahteve / že /api z istim gostiteljem.
Za aktiviranje TLS V tem lokalnem okolju je ena od možnosti ustvarjanje samopodpisanega potrdila za domeno. *.docker.localhost z opensslUstvarite imenik certs, ki ga generirate local.key y local.crt, nato pa dodate dinamično datoteko (na primer dynamic/tls.yml) z razdelkom tls: in poti certFile y keyFile ki kaže na te datoteke.
Nato posodobite definicijo storitve Traefik v docker-compose.yml za priklop mape ./certs in mapo ./dynamic znotraj vsebnika aktivirate varni API z --api.dashboard=true, ustvarite vstopno točko websecure (--entryPoints.websecure.address=:443) in tam omogočite TLS z --entryPoints.websecure.http.tls=trueOznačite tudi usmerjevalnik nadzorne plošče in usmerjevalnike whoami da jih uporabijo websecure in imajo tls=true.
Ko bo nastavljeno, boste lahko dostopali https://whoami.docker.localhost/ in na ploščo Traefik s samopodpisanim potrdilom, s čimer sprejmete varnostno opozorilo brskalnika. Ta izkušnja je zelo podobna tisti, ki jo boste kasneje imeli v produkciji z Let's Encrypt, vendar brez zanašanja na javne strežnike DNS.
Najboljše prakse, uvajanje aplikacij in reševanje tipičnih težav
En vzorec, ki se ponavlja v vseh teh primerih, je, da Traefik močno poenostavi uvajanje novih aplikacijKo imate osnovni sklad (Traefik + Portainer + omrežje) proxy (+ potrdila), dodajanje nove storitve se običajno zreducira na:
Klonirajte projekt ali kopirajte svoj docker-compose.yml na strežnik usmerite poddomeno na IP-naslov gostitelja z uporabo zapis A v vašem DNS-u (na primer app.tudominio.com) in nato storitvi dodajte oznake ključev: traefik.enable=true, traefik.docker.network=proxy in usmerjevalnik s pravilom gostitelja za to poddomeno, ki določa varno vstopno točko websecure in storitev s pravilnim notranjim priključkom.
Številni priročniki bi na primer prikazali uvedbo majhne aplikacije FastAPI Ločeno: dodane so štiri oznake, ki zagotavljajo, da se pridruži omrežju proxy v razdelku networks od docker-compose.ymlin po tem, ko to storiš docker compose up -d Aplikacija se samodejno prikaže na nadzorni plošči Traefik z omogočenim TLS. Traefikovo samodejno odkrivanje pomeni, da vam sploh ni treba prilagajati statičnih nastavitev.
Da bi vse potekalo gladko, je pomembno biti pozoren na nekaj podrobnosti: Ne uporabljajte istega identifikatorja usmerjevalnika ponovno V različnih aplikacijah preverite, ali je z vsakim usmerjevalnikom povezana samo ena storitev (da se izognete napaki »preveč storitev«), uporabite dosledna imena omrežij (na primer proxy na vseh skladih, ki jih želite izpostaviti), in če uporabljate Let's Encrypt, se prepričajte, da acme.json Ima dovoljenja 600 in konfiguriran e-poštni naslov je veljaven.
V okoljih Swarm preverite tudi, ali konfiguracija Traefik vključuje ponudnika Docker. swarmMode=true y watch=truein da omejitve storitev (na primer node.role == manager (za Portainer) niso v nasprotju s tem, kje je nameščen Traefik. Dnevniki odpravljanja napak so zelo podrobni, vendar so ključni za odkrivanje težav z usmerjanjem ali TLS.
Skupaj, združite Docker, Traefik in Portainer Omogoča vam, da na enem samem strežniku nastavite popolno lahko orkestracijsko okolje z grafičnimi nadzornimi ploščami, samodejnimi potrdili in zelo hitrim potekom uvajanja, kjer je dodajanje, posodabljanje ali odstranjevanje storitev omejeno na prilagajanje nekaj vrstic YAML in Traefiku omogočite, da opravi umazano delo obratnega proxyinga in TLS.
Vsebina
- Kakšne vloge imajo Docker, Traefik in Portainer v arhitekturi?
- Statična konfiguracija Traefika: traefik.yml
- Dinamična konfiguracija: vmesna programska oprema, TLS in varnost
- docker-compose s Traefikom in Portainerjem v samostojnem Dockerju
- Scenarij Docker Swarm: Portainer in Traefik v gruči
- Minimalni primer: whoami, poti in TLS s Traefikom
- Najboljše prakse, uvajanje aplikacij in reševanje tipičnih težav
