‫În regulă, acum că am trecut prin secretele și trăsăturile și cum funcționează și toate acestea, să
‫vedem de fapt câteva practici.
‫Deci, ceea ce am aici este că am pregătit coloana noastră cu 3 noduri ca înainte.
‫Sunt într-un eșantion de
‫eșantioane 1, pe care îl veți vedea în repo.
‫Și tot ce am acolo este un fișier text. Și în acel fișier text este doar un nume de utilizator simplu, nici
‫măcar o parolă.
‫Există două moduri în care putem crea un secret în interiorul lui Swarm.
‫Și unul dintre ele este să-i dați un fișier, iar altul trebuie să dea o valoare la linia de comandă.
‫Deci, să folosim mai întâi fișierul. docker secret crea. Și apoi trebuie să-i dau un nume în baza de date secretă.
‫Și o voi numi psql utilizator.
‫Nu trebuie să fie același nume ca fișierul, evident. Dar o să spun asta.
‫Și apoi... Acesta scutură ID-ul, ca și pentru alte obiecte. Și vă permite să creați alta. Să punem de fapt
‫parola.
‫Și de data asta vom revedea de la linia de comandă.
‫Dacă vedeți ce fac, de fapt, scriu o parolă în linia de comandă cu ecou și
‫o recitesc în comanda de creare.
‫Și observați linia de la capăt, pentru că asta spune comenzii să citească din intrarea standard. Ceea ce îi oferim cu
‫comanda ecou.
‫Acum, ar trebui să spun că ambele au dezavantaje.
‫Prima, de fapt, stocați parola pe hard diskul serverului de pe gazdă.
‫Și nu am vrea să facem asta.
‫Deci, probabil că veți folosi API-ul la distanță de la acea linie de comandă locală pe mașina dvs. Apoi treceți dosarele în
‫felul acesta.
‫Și, în al doilea, mergem de fapt în istoria fișierului nostru Bash pentru utilizatorul nostru root.
‫Deci, atunci, din punct de vedere tehnic, dacă cineva ar putea intra în rădăcină, ei ar putea să scoată această parolă.
‫Când aveți de-a face cu propriile sisteme de producție, va trebui să vă uitați în diferite moduri pentru
‫a afla aceste două probleme de securitate potențiale.
‫Deci, ceea ce avem aici este ... Acum, dacă fac un secrete de docare, puteți vedea că am amândoi acolo.
‫Acum, le pot inspecta, dar nu voi vedea parolele sau secretul real.
‫Deci, permiteți-mi să fac doar utilizatorul.
‫Nu ne va da informațiile, nu-i așa? Pentru că dacă ar fi fost ușor să obțineți informația, acest
‫secret nu ar fi fost într-adevăr.
‫Dreapta?
‫Deci, scopul aici este că odată ce ați pus secretul în sistem, acesta este stocat în baza de date. Și singurul lucru care va avea
‫acces la secretele decriptate vor fi containerele și serviciile pe care
‫le atribuim.
‫Asa ca sa facem asta acum.
‫Voi crea un serviciu manual.
‫serviciul de docker crea. O voi numi psql. Și o să facem un secret. Practic, spunem asta, creeaza comanda
‫ia acest secret numit acest nume special ...
‫Pot folosi și ID-ul secretului ... și alocați-o acestui serviciu, astfel încât toate containerele din acest
‫serviciu să vadă acest secret.
‫In regula.
‫Apoi puneți utilizatorul acolo și apoi trebuie să o fac din nou pentru parolă.
‫Bine.
‫Deci, acest lucru hărțește secretele serviciului, astfel încât acestea să apară ca fișiere în interiorul containerului.
‫Dar nu spune baza de date postgres pe care o creăm din această
‫imagine cum să folosim aceste secrete.
‫Deci, de obicei, trebuie să facem ceva cu configurația imaginii.
‫Și în acest caz, imaginile oficiale de la Docker Hub s-au stabilit pe un
‫standard în care utilizați variabile de mediu. Dar, în loc să treacă ceva de genul parolei postgres, ar fi greu de folosit
‫cu un fișier.
‫Ar fi trebuit, de fapt, să aruncăm dosarul în variabila de mediu și asta e
‫puțină durere.
‫Deci, ei au standardul în care, dacă specificați un fișier ... și asta ar fi calea ... așa că se vor face secrete,
‫și apoi numele, nu? Asadar, psql trece, numele secretului.
‫Dacă fac acest lucru, asta este de fapt la pornirea imaginii care va căuta ca această variabilă de mediu să
‫fie completă.
‫Și dacă este, atunci va trage fișierul în el și va fi stocat în variabila de mediu. Conținutul real al acelui
‫fișier.
‫Acesta este un mod foarte simplu de a consuma aceste secrete care se află în fișiere.
‫Dar aceasta înseamnă că imaginile pe care le folosiți trebuie să aibă acest standard în vigoare.
‫Putem face același lucru și pentru utilizator.
‫Sperăm că acest lucru are sens pentru tine. Când creez serviciul, acesta
‫va face ceea ce face tipic când emite o cerere de programare pentru un nou container.
‫Va crea o bază de date Postgres și o va transmite
‫variabilelor de mediu pentru locațiile celor două secrete.
‫Și apoi o să hărțuiască, într-un tempfs, este de fapt o hartă în ceea ce arată fișierele.
‫Dar din nou, este chiar un sistem de fișiere RAM sau un tmpfs.
‫Să vedem ce vedem acolo.
‫Deci, fac un serviciu de docking ps psl și asta ar trebui să ne spună ce nod pe care rulează.
‫Bine, se execută pe acest nod.
‫Să facem un exec pentru a vedea ce vedem în interiorul containerului.
‫docker exec -it.
‫Și apoi numele specific containerului pentru acel serviciu, apoi bash.
‫In regula.
‫Acum ar trebui să fim capabili să facem un ls pe secrete și să vedem că avem cele două fișiere acolo.
‫Și dacă fac o pisică pe un utilizator psql, vom vedea valoarea. A mers.
‫Și dacă ne uităm la jurnalele acelui psql, știm de fapt că funcționează. Pentru că dacă nu ... dacă nu avea acele fișiere,
‫baza de date actuală s-ar păstra recreativă și nu ar fi capabilă să funcționeze deoarece nu avea
‫o parolă și un nume de utilizator pentru a crea baza de date.
‫Dacă ați reușit din nou serviciul de service docker, ceea ce ați vedea dacă nu funcționa corect într-un scenariu de baze de date, este că
‫baza de date ar fi de fapt defectă. Și va continua să reînceapă și veți vedea
‫noi containere create aici.
‫Deci, acum că l-am repartizat acolo, putem folosi o actualizare a serviciului docker
‫pentru a elimina secretul. Deci, actualizarea serviciului docker --secret-rm.
‫Există și secret-add. Dar dacă am elimina unul dintre aceste
‫secrete, ce s-ar întâmpla, ar fi redistribuit containerul. Deoarece secretele fac parte din designul imuabil al serviciilor.
‫Dacă ceva din container trebuie să se schimbe pentru serviciu, serviciul nu va intra și nu
‫va schimba ceva în interiorul recipientului. Acesta va opri containerul și va redepta unul nou.
‫Evident, acest lucru nu este ideal pentru bazele de date. Așadar, va trebui să găsim un plan diferit pentru modul
‫în care vom actualiza parolele bazei de date.
‫Și despre asta putem vorbi mai târziu.
‫Pentru moment, vreau doar să știți că le puteți elimina și puteți adăuga altele suplimentare unui serviciu existent.
‫Este doar de gând să recreeze container atunci când o faci.