‫W porządku, więc teraz, kiedy przeszliśmy przez sekrety i funkcje, i jak to działa, i tak dalej,
‫spójrzmy na kilka praktycznych rzeczy.
‫Tak więc, mam tu do czynienia z naszym rojem 3-węzłowym, jak wcześniej.
‫Jestem w katalogu
‫z przykładami tajnych 1, który zobaczysz w repozytorium.
‫I wszystko, co mam, to jeden plik tekstowy. W tym pliku tekstowym jest po prostu zwykła nazwa użytkownika, a
‫nawet hasło.
‫Są dwa sposoby na stworzenie sekretu wewnątrz Swarm.
‫A jednym z nich jest nadanie mu pliku, a kolejnym jest przekazanie wartości w wierszu poleceń.
‫Najpierw użyjmy pliku. tworzenie sekretu dokowania. A potem muszę nadać mu nazwę w tajnej bazie danych.
‫I nazwałbym go użytkownikiem psql.
‫Oczywiście nie musi to być ta sama nazwa co plik. Ale zamierzam to tak nazwać.
‫I wtedy... Plukuje identyfikator, podobnie jak w przypadku innych obiektów. I pozwala utworzyć kolejny. Wrzućmy hasło.
‫I tym razem zamierzamy wywołać echo z wiersza poleceń.
‫Jeśli widzisz, co robię, to w rzeczywistości wpisuję hasło w wierszu poleceń za pomocą echa i
‫powtarzam je w komendzie tworzenia.
‫Zwróć też kreskę na końcu, ponieważ to polecenie nakazuje odczytać ze standardowego wejścia. Właśnie to dajemy za pomocą
‫polecenia echo.
‫Teraz powinienem powiedzieć, że oba te mają wady.
‫Pierwszy z nich polega na przechowywaniu hasła na dysku twardym serwera na hoście.
‫I naprawdę nie chcielibyśmy tego robić.
‫Być może używałbyś zdalnego interfejsu API z tego lokalnego wiersza poleceń na swoim komputerze. A następnie przekazać pliki w
‫ten sposób.
‫A w drugim, w rzeczywistości przechodzi do historii naszego pliku Bash dla naszego użytkownika root.
‫Więc technicznie, jeśli ktoś byłby w stanie dostać się do roota, mogliby uzyskać to hasło.
‫Kiedy masz do czynienia z własnymi systemami produkcyjnymi, musisz spojrzeć na różne sposoby, aby ominąć
‫te dwa potencjalne problemy związane z bezpieczeństwem.
‫Tak więc mamy tutaj ... teraz, jeśli zrobię sekrety dockera, zobaczysz, że mam ich obu.
‫Teraz mogę je obejrzeć, ale nigdy nie zobaczę haseł ani prawdziwego sekretu.
‫Pozwolę sobie po prostu zrobić tego użytkownika.
‫Nie dostarczy nam informacji, prawda. Ponieważ gdyby tak łatwo było zdobyć informacje, nie
‫byłby tak naprawdę tajemnicą.
‫Dobrze?
‫Tak więc celem tutaj jest to, że kiedy umieścisz sekret w systemie, jest on przechowywany w bazie danych. A jedyną rzeczą, która będzie miała
‫dostęp do odszyfrowanych sekretów, będą pojemniki i usługi, do których
‫je przypisujemy.
‫Zróbmy to teraz.
‫Mam zamiar utworzyć usługę ręcznie.
‫tworzenie usługi dokowania. Nazwiemy to psql. I zamierzamy to zakodować w tajemnicy. Zasadniczo mówimy, że polecenie
‫create to tajne urządzenie o tej nazwie ...
‫Mogę też użyć identyfikatora sekretu ... i przypisz ją do tej usługi, aby wszystkie kontenery w
‫tej usłudze zobaczyły ten sekret.
‫W porządku.
‫A następnie umieścić użytkownika tam, a następnie muszę zrobić to jeszcze raz, aby uzyskać hasło.
‫W porządku.
‫Odwzorowuje to sekrety usługi, aby pojawiały się jako pliki wewnątrz kontenera.
‫Ale nie informuje bazy danych PostgreSQL, którą tworzymy z tego obrazu,
‫jak korzystać z tych sekretów.
‫Dlatego zwykle musimy coś zrobić z konfiguracją obrazu.
‫W tym przypadku oficjalne obrazy z Docker Hub uzgodniły standard,
‫w którym używa się zmiennych środowiskowych. Ale zamiast podać coś w rodzaju hasła postgresowego, byłoby to trudne do użycia
‫z plikiem.
‫Musielibyśmy, na przykład, wyłuskać plik do zmiennej środowiskowej i to trochę
‫bolało.
‫Więc mają standard gdzie, jeśli podasz plik ... a to byłaby ścieżka ... więc byłoby to tajemnicą, a
‫potem nazwą, prawda? Tak więc pass psql, nazwa tajemnicy.
‫Jeśli to zrobię, jest to właściwie uruchomienie obrazu, który będzie szukał wypełniania tej zmiennej
‫środowiskowej.
‫A jeśli tak, to pobierze ten plik i zapisze go w zmiennej środowiskowej. Rzeczywista zawartość tego pliku.
‫To jest naprawdę łatwy sposób na wykorzystanie tych sekretów znajdujących się w plikach.
‫Ale oznacza to, że obrazy, których używasz, muszą mieć ten standard w miejscu.
‫Możemy zrobić to samo dla użytkownika.
‫Mam nadzieję, że ma to dla ciebie sens. Kiedy utworzę usługę,
‫zrobi ona typową rzecz, którą robi, kiedy wystawia żądanie harmonogramu dla nowego kontenera.
‫Stworzy jedną bazę danych PostgreSQL i przekaże jej zmienne
‫środowiskowe dla lokalizacji tych dwóch sekretów.
‫A potem będzie mapować, w tempfach, to faktycznie będzie mapować w czymś, co wygląda jak pliki.
‫Ale znowu, to naprawdę po prostu system plików RAM lub tmpfs.
‫Zobaczmy, co tam możemy zobaczyć.
‫Tak więc, robię ps psql w usłudze dokowania, a to powinno nam powiedzieć, w jakim węźle działa.
‫Okay, działa na tym węźle.
‫Zróbmy exec, aby zobaczyć, co widzimy wewnątrz kontenera.
‫doker exec -it.
‫A następnie konkretna nazwa kontenera dla tej usługi, a następnie bash.
‫W porządku.
‫Teraz powinniśmy być w stanie zrobić ls w tajemnicy, a zobaczysz, że dostaniemy tam dwa pliki.
‫I jeśli zrobię kota na użytkowniku psql, widzimy wartość. Zadziałało.
‫A jeśli spojrzymy na logi tego psql, wiemy, że to działa. Bo jeśli to nie ... jeśli nie ma tych plików,
‫rzeczywista baza danych będzie nadal odtwarzać się i nie będzie w stanie pracować, ponieważ
‫nie ma hasła i nazwy użytkownika w celu utworzenia bazy danych.
‫Jeśli zrobiłeś ponownie usługę docker ps, to, co zobaczysz, gdyby nie działało poprawnie w scenariuszu bazy danych, jest to, że
‫baza danych byłaby w rzeczywistości nieprawidłowa. I nadal będzie się uruchamiał i zobaczysz
‫tutaj nowe kontenery.
‫Teraz, gdy już to zrobiliśmy, możemy rzeczywiście użyć aktualizacji usługi dokowania,
‫aby usunąć sekret. Aktualizacja usługi dokowania - secret-rm.
‫Istnieje również sekret-dodaj. Ale jeśli usunęłabym jeden z tych
‫sekretów, to co by się stało, przeorganizowałby kontener. Ponieważ sekrety są częścią niezmiennego projektowania usług.
‫Jeśli cokolwiek w kontenerze musi się zmienić w usłudze, usługa nie wejdzie i
‫nie zmieni czegoś wewnątrz kontenera. To faktycznie zatrzyma kontener i ponownie wdroży nowy.
‫Oczywiście nie jest to idealne rozwiązanie dla baz danych. Będziemy musieli opracować inny plan aktualizowania
‫haseł do baz danych.
‫I o tym możemy porozmawiać później.
‫Na razie chcę, abyś wiedział, że możesz je usunąć i dodać dodatkowe do istniejącej usługi.
‫Po prostu odtworzysz pojemnik, kiedy to zrobisz.