‫Also gut, nachdem wir uns nun mit den Geheimnissen und Funktionen befasst haben und wie es funktioniert und so weiter, schauen
‫wir uns nun einige praktische Aspekte an.
‫Also, was ich hier habe, ich habe unseren 3-Knoten-Schwarm wie zuvor eingerichtet.
‫Ich bin in einem
‫geheimen Beispiel 1-Verzeichnis, das Sie im Repo sehen werden.
‫Und alles, was ich dort habe, ist eine Textdatei. Und in dieser Textdatei ist nur ein einfacher Benutzername, nicht einmal tatsächlich
‫ein Passwort.
‫Es gibt zwei Möglichkeiten, wie wir tatsächlich ein Geheimnis in Swarm erschaffen können.
‫Und einer von ihnen ist es, ihm eine Datei zu geben, und ein anderer ist es, einen Wert in der Befehlszeile zu übergeben.
‫Verwenden wir also zuerst die Datei. Docker Geheimnis erstellen. Und dann muss ich ihm einen Namen in der geheimen Datenbank geben.
‫Und ich werde es Psql-Benutzer nennen.
‫Es muss natürlich nicht derselbe Name wie die Datei sein. Aber ich werde es einfach so nennen.
‫Und dann... Die ID wird wie bei anderen Objekten zurückgespuckt. Und lassen Sie uns einen anderen erstellen. Lassen Sie uns das
‫Passwort eingeben.
‫Und dieses Mal werden wir es von der Kommandozeile aus wiedergeben.
‫Wenn Sie sehen, was ich tue, gebe ich tatsächlich ein Passwort in die Befehlszeile mit echo ein und
‫gebe es in den Erstellungsbefehl ein.
‫Und beachte den Bindestrich am Ende, denn das bedeutet, dass der Befehl von der Standardeingabe gelesen werden muss. Welches ist, was wir es mit
‫dem Echo-Befehl geben.
‫Nun sollte ich sagen, dass beide Nachteile haben.
‫Zum einen speichern Sie das Kennwort tatsächlich auf der Festplatte des Servers auf dem Host.
‫Und das würden wir wirklich nicht wollen.
‫Vielleicht würden Sie die Remote-API von dieser lokalen Befehlszeile auf Ihrem Computer aus verwenden. Und dann die Dateien auf diese
‫Weise übergeben.
‫Und in der zweiten geht es tatsächlich um die Geschichte unserer Bash-Datei für unseren Root-Benutzer.
‫Wenn also jemand in der Lage wäre, in root einzusteigen, könnte er dieses Passwort tatsächlich herausbekommen.
‫Wenn Sie mit Ihren eigenen Produktionssystemen arbeiten, müssen Sie verschiedene Möglichkeiten prüfen, um
‫diese beiden potenziellen Sicherheitsprobleme zu umgehen.
‫Also, was wir hier haben, ist ... Wenn ich jetzt ein Docker-Geheimnis hinterlasse, kann man sehen, dass ich beide drin habe.
‫Jetzt kann ich sie tatsächlich überprüfen, aber ich werde nie die Passwörter oder das eigentliche Geheimnis sehen.
‫Also, lass mich einfach den User machen.
‫Es wird uns nicht die Informationen geben, richtig. Denn wenn es so einfach wäre, an die Informationen zu kommen,
‫wäre es nicht wirklich so geheim.
‫Richtig?
‫Das Ziel hier ist also, dass, sobald Sie das Geheimnis in das System eingegeben haben, es in der Datenbank gespeichert wird. Und das einzige, was Zugriff auf
‫die entschlüsselten Geheimnisse haben wird, sind die Container und Services, denen
‫wir sie zuweisen.
‫Also machen wir das jetzt.
‫Ich werde einen Dienst manuell erstellen.
‫Docker-Service erstellen. Ich nenne es psql. Und wir werden das Geheimnis darauf abbilden. Grundsätzlich sagen wir, dass dieser Befehl
‫create dieses Geheimnis namens dieses bestimmten Namens annimmt ...
‫Ich kann auch die ID des Geheimnisses verwenden ... und weisen Sie es diesem Dienst zu, damit alle Container in
‫diesem Dienst dieses Geheimnis sehen.
‫Gut.
‫Geben Sie dann den Benutzer ein und ich muss ihn erneut für das Kennwort eingeben.
‫Okay.
‫Dadurch werden die Geheimnisse dem Dienst zugeordnet, sodass sie als Dateien im Container angezeigt werden.
‫Der Postgres-Datenbank, die wir aus diesem Bild erstellen, wird jedoch nicht mitgeteilt,
‫wie diese Geheimnisse verwendet werden sollen.
‫Normalerweise müssen wir also etwas mit der Konfiguration des Images anfangen.
‫In diesem Fall haben sich die offiziellen Images von Docker Hub auf einen
‫Standard festgelegt, in dem Sie Umgebungsvariablen verwenden. Aber anstatt vielleicht so etwas wie ein Postgres-Passwort weiterzugeben, wäre es schwierig, es mit einer
‫Datei zu verwenden.
‫Wir müssten die Datei tatsächlich in die Umgebungsvariable verschieben, und das ist ein
‫bisschen mühsam.
‫Sie haben also den Standard, wo, wenn Sie eine Datei angeben ... und das wäre der Weg ... Also würde es Geheimnisse geben und
‫dann den Namen, oder? Also psql pass, der Name des Geheimnisses.
‫Wenn ich das mache, ist dies tatsächlich der Start des Images, das nach dem Ausfüllen dieser Umgebungsvariablen
‫sucht.
‫Ist dies der Fall, wird diese Datei abgerufen und in der Umgebungsvariablen gespeichert. Der tatsächliche Inhalt dieser
‫Datei.
‫Dies ist eine sehr einfache Möglichkeit, die in den Dateien enthaltenen Geheimnisse zu verbrauchen.
‫Dies bedeutet jedoch, dass für die verwendeten Bilder dieser Standard festgelegt sein muss.
‫Das Gleiche können wir auch für den Benutzer tun.
‫Hoffentlich macht das für Sie Sinn. Wenn ich den Service
‫erstelle, wird er wie gewohnt ausgeführt, wenn eine Planungsanforderung für einen neuen Container ausgegeben wird.
‫Es wird eine Postgres-Datenbank erstellt und die Umgebungsvariablen für
‫die Speicherorte dieser beiden Geheimnisse übergeben.
‫Und dann wird es in einem tempfs abgebildet, es wird tatsächlich in Dateien abgebildet, die aussehen.
‫Aber es ist wirklich nur ein RAM-Dateisystem oder ein tmpfs.
‫Lassen Sie uns sehen, was wir dort sehen können.
‫Also mache ich einen Docker-Dienst ps psql, und das sollte uns sagen, auf welchem Knoten es läuft.
‫Okay, es läuft auf diesem Knoten.
‫Lassen Sie uns eine Exekutive machen, um zu sehen, was wir im Container sehen können.
‫docker exec -it.
‫Und dann den spezifischen Containernamen für diesen Dienst und dann die Bash.
‫Gut.
‫Jetzt sollten wir in der Lage sein, ein ls über Laufgeheimnisse zu machen, und Sie werden sehen, dass wir die beiden Dateien dort erhalten.
‫Und wenn ich eine Katze auf psql-Benutzer mache, sehen wir den Wert. Es funktionierte.
‫Und wenn wir uns die Protokolle dieser psql ansehen, wissen wir tatsächlich, dass es funktioniert. Denn wenn es nicht so wäre ... Wenn diese Dateien nicht vorhanden
‫wären, würde sich die eigentliche Datenbank von selbst neu erstellen und nicht mehr funktionieren, da
‫zum Erstellen der Datenbank kein Kennwort und kein Benutzername vorhanden wären.
‫Wenn Sie den Docker-Dienst ps erneut ausführen würden, würden Sie feststellen, dass die Datenbank in
‫einem Datenbankszenario nicht ordnungsgemäß funktioniert. Und es würde immer wieder neu starten und Sie würden sehen,
‫dass hier neue Container erstellt werden.
‫Nun, da wir es dort tatsächlich zugewiesen haben, können wir tatsächlich ein Docker-Service-Update verwenden,
‫um das Geheimnis zu entfernen. Also, Docker-Service-Update --secret-rm.
‫Es gibt auch Secret-Add. Aber wenn ich eines dieser Geheimnisse
‫entfernen würde, würde es den Container neu bereitstellen. Weil Geheimnisse ein Teil der unveränderlichen Gestaltung von Diensten sind.
‫Wenn sich etwas im Container für den Dienst ändern muss, wird der Dienst nicht hineingehen
‫und etwas im Container ändern. Tatsächlich wird der Container angehalten und ein neuer bereitgestellt.
‫Offensichtlich ist das nicht ideal für Datenbanken. Wir müssen uns also einen anderen Plan
‫ausdenken, wie wir Datenbankkennwörter aktualisieren.
‫Darüber können wir später sprechen.
‫Im Moment möchte ich Ihnen nur mitteilen, dass Sie sie entfernen und einem vorhandenen Dienst weitere hinzufügen können.
‫Es wird nur den Container neu erstellen, wenn Sie es tun.