1. Was ist Docker Secret 1. SzenariodarstellungWir wissen, dass für einige Dienste Passwörter erforderlich sind, beispielsweise für den MySQL-Dienst: Version: '3' Leistungen: Webseite: Bild: WordPress Häfen: -8080:80 Bände: - ./www:/var/www/html Umfeld: WORDPRESS_DB_NAME=WordPress WORDPRESS_DB_HOST: mysql WORDPRESS_DB_PASSWORD: root Netzwerke: - mein Netzwerk hängt ab von: -mysql einsetzen: Modus: repliziert Replikate: 3 Neustartrichtlinie: Bedingung: bei Fehler Verzögerung: 5s Max_Versuche: 3 Konfiguration aktualisieren: Parallelität: 1 Verzögerung: 10s MySQL: Bild: MySQL Umfeld: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: WordPress Bände: -mysql-data:/var/lib/mysql Netzwerke: - mein Netzwerk einsetzen: Modus: global Platzierung: Einschränkungen: - node.role == Manager Bände: MySQL-Daten: Netzwerke: mein Netzwerk: Treiber: Overlay Sie können sehen, dass die beiden Dienstkennwörter in dieser docker-compose.yml im Klartext vorliegen, was sie nicht sehr sicher macht. Was ist also das Docker-Geheimnis und kann es das obige Problem lösen? Docker-GeheimnisWir wissen, dass der Managerknoten die Statuskonsistenz durch die verteilte Speicherdatenbank Raft Database aufrechterhält, die selbst Informationen geheim hält. Daher kann diese Datenbank zum Speichern vertraulicher Informationen wie Kontonummern, Passwörtern usw. verwendet werden und der Zugriff darauf kann dann durch Autorisierung des Dienstes gestattet werden. Auf diese Weise wird verhindert, dass das Passwort im Klartext angezeigt wird. Zusammenfassend lässt sich sagen, dass die Verwaltung von Geheimnissen in einem Geheimnisschwarm durch die folgenden Schritte erfolgt:
2. Erstellung und Verwendung von Docker Secret 1. ErstellungSchauen wir uns zunächst einige erstellte Hilfeanweisungen an: [root@centos-7 ~]# Docker-Geheimnis --Hilfe Verwendung: Docker Secret-Befehl Verwalten von Docker-Geheimnissen Befehle: erstellen Erstellen Sie ein Geheimnis aus einer Datei oder STDIN als Inhalt inspect Detaillierte Informationen zu einem oder mehreren Geheimnissen anzeigen ls Listet Geheimnisse auf rm Entfernen Sie ein oder mehrere Geheimnisse Führen Sie „docker secret COMMAND --help“ aus, um weitere Informationen zu einem Befehl zu erhalten. Der erste Befehl ist der erstellte Befehl. Sehen wir uns an, welche Hilfeinformationen er enthält: [root@centos-7 ~]# Docker-Geheimnis erstellen --help Verwendung: Docker Secret Create [OPTIONEN] SECRET [Datei|-] Erstellen Sie ein Geheimnis aus einer Datei oder STDIN als Inhalt Optionen: -d, --driver string Geheimer Treiber -l, --label Liste Geheime Bezeichnungen --template-driver string Vorlagentreiber Sie sehen, dass das Geheimnis aus einer Datei oder einer Standardausgabe stammen kann. Dann gibt es zwei Möglichkeiten, Geheimnisse zu erstellen:
1. Erstellen auf Basis von Dateien Erstellen Sie zunächst eine Datei zum Speichern des Passworts [root@centos-7 ~]# vim mysql-passwort Wurzel Erstellen Sie dann ein Geheimnis [root@centos-7 ~]# Docker-Geheimnis erstellen MySQL-Pass MySQL-Passwort texcct9ojqcz6n40woe97dd7k mysql-pass ist der Name des Geheimnisses und mysql-password ist die Datei, die wir zum Speichern des Passworts erstellt haben. Nach der Ausführung dieses Befehls wird das Passwort in der Datei in der Raft-Datenbank des Managerknotens in Swarm gespeichert. Aus Sicherheitsgründen können Sie diese Datei nun direkt löschen, da das Passwort bereits in Swarm vorhanden ist. [root@centos-7 ~]# rm -f mysql-passwort Jetzt können Sie die geheime Liste anzeigen: [root@centos-7 ~]# Docker-Geheimnis ls ID NAME TREIBER ERSTELLT AKTUALISIERT texcct9ojqcz6n40woe97dd7k mysql-pass vor 4 Minuten vor 4 Minuten Existiert bereits. 2. Erstellen basierend auf der Befehlszeile [root@centos-7 ~]# echo "root" | Docker-Geheimnis erstellt MySQL-Pass2 - hrtmn5yr3r3k66o39ba91r2e4 [root@centos-7 ~]# Docker-Geheimnis ls ID NAME TREIBER ERSTELLT AKTUALISIERT texcct9ojqcz6n40woe97dd7k mysql-pass vor 6 Minuten vor 6 Minuten hrtmn5yr3r3k66o39ba91r2e4 mysql-pass2 vor 5 Sekunden vor 5 Sekunden Diese Methode ist immer noch sehr einfach, um erfolgreich zu erstellen (II) Sonstige GeschäftstätigkeitenGibt es also noch andere geheime Operationen? [root@centos-7 ~]# Docker-Geheimnis --Hilfe Verwendung: Docker Secret-Befehl Verwalten von Docker-Geheimnissen Befehle: erstellen Erstellen Sie ein Geheimnis aus einer Datei oder STDIN als Inhalt inspect Detaillierte Informationen zu einem oder mehreren Geheimnissen anzeigen ls Listet Geheimnisse auf rm Entfernen Sie ein oder mehrere Geheimnisse Führen Sie „docker secret COMMAND --help“ aus, um weitere Informationen zu einem Befehl zu erhalten. Sie können sehen, dass es neben dem Befehl „Create“ auch die Befehle „Inspect“, „LS“ und „RM“ gibt. 1. inspizieren [root@centos-7 ~]# Docker-Geheimnis inspizieren MySQL-Pass2 [ { "ID": "hrtmn5yr3r3k66o39ba91r2e4", "Version": { "Index": 4061 }, "Erstellt am": "2020-02-07T08:39:25.630341396Z", "Aktualisiert am": "2020-02-07T08:39:25.630341396Z", "Spezifikation": { "Name": "mysql-pass2", "Beschriftungen": {} } } ] Zeigen Sie einige Details des Geheimnisses an 2.rm [root@centos-7 ~]# Docker-Geheimnis rm mysql-pass2 mysql-pass2 [root@centos-7 ~]# Docker-Geheimnis ls ID NAME TREIBER ERSTELLT AKTUALISIERT texcct9ojqcz6n40woe97dd7k mysql-pass vor 12 Minuten vor 12 Minuten Löschen eines Geheimnisses (III) Verwendung von Secret in einem einzelnen Container 1. Geheimnis im Container anzeigen Wir haben ein Geheimnis erstellt. Wie können wir es nach dem Start eines Dienstes für einen bestimmten Dienst autorisieren, damit dieser es sehen kann? Prüfen Sie zunächst, ob der Befehl zum Erstellen des Dienstes ähnliche Befehle oder Parameter enthält: [root@centos-7 ~]# Docker-Dienst erstellen --Hilfe Verwendung: Docker-Dienst erstellen [OPTIONEN] BILD [BEFEHL] [ARG…] Einen neuen Dienst erstellen Optionen: --config config Konfigurationen angeben, die dem Dienst zur Verfügung gestellt werden sollen ... --secret secret Gibt Geheimnisse an, die dem Dienst zugänglich gemacht werden sollen ... ... Es gibt tatsächlich einen solchen Befehl, der dem Dienst beim Erstellen das Geheimnis preisgeben kann. 2. Erstellen Sie einen Dienst [root@centos-7 ~]# Docker-Dienst erstellen --name demo --secret mysql-pass busybox sh -c "while true; mache sleep 3600; fertig" zwgk5w0rpf17hn77axz6cn8di Gesamtfortschritt: 1 von 1 Aufgaben 1/1: Laufen Überprüfen: Dienst konvergiert Überprüfen Sie, auf welchem Knoten der Dienst ausgeführt wird: [root@centos-7 ~]# Docker-Dienst ls ID NAME MODUS REPLIKATE BILD PORTS zwgk5w0rpf17 Demo repliziert 1/1 busybox:latest [root@centos-7 ~]# Docker-Dienst PS-Demo ID NAME BILD KNOTEN GEWÜNSCHTER ZUSTAND AKTUELLER ZUSTAND FEHLER PORTS yvr9lwvg8oca demo.1 busybox:latest localhost.localdomain Läuft Läuft vor 51 Sekunden Sie können sehen, dass dieser Dienst auf dem Knoten des Hosts localhost.localdomain ausgeführt wird. Gehen wir zu diesem Knoten und betreten den Container, um zu sehen, ob wir das Geheimnis anzeigen können: [root@localhost ~]# docker ps CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN 36573adf21f6 busybox:latest "sh -c 'while true; …"vor 4 Minuten Vor 4 Minuten demo.1.yvr9lwvg8ocatym20hdfublhd [root@localhost ~]# docker exec -it 36573adf21f6 /bin/sh /#ls bin dev usw. home proc root ausführen sys tmp usr var / # cd /run/geheimnisse /run/geheimnisse # ls MySQL-Pass /run/secrets # cat mysql-pass Wurzel /run/Geheimnisse # Sie sehen, es ist durchaus machbar. 2. MySQL-Dienst Einzelheiten zum MySQL-Image finden Sie unter https://hub.docker.com/_/mysql. Dort finden Sie auch eine Beschreibung des Geheimnisses: Als Alternative zur Weitergabe sensibler Informationen über Umgebungsvariablen kann _FILE an die zuvor aufgeführten Umgebungsvariablen angehängt werden, wodurch das Init-Skript die Werte dieser Variablen aus im Container vorhandenen Dateien lädt. Dies kann insbesondere zum Laden von Passwörtern aus einem Docker-Geheimnis verwendet werden, das in der Datei /run/secrets/<secret_name> gespeichert ist. Zum Beispiel: $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:tag Derzeit werden nur MYSQL_ROOT_PASSWORD, MYSQL_ROOT_HOST, MYSQL_DATABASE, MYSQL_USER und MYSQL_PASSWORD unterstützt. Wir müssen also ein Dateigeheimnis erstellen, um vertrauliche Informationen der Datenbank zu speichern. Da es bereits zuvor erstellt wurde, muss es hier nicht erneut erstellt werden: [root@centos-7 ~]# Docker-Geheimnis ls ID NAME TREIBER ERSTELLT AKTUALISIERT texcct9ojqcz6n40woe97dd7k mysql-pass vor 4 Stunden vor 4 Stunden Starten Sie den MySQL-Dienst: [root@centos-7 ~]# Docker-Dienst erstellen --name db --secret mysql-pass -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-pass mysql sbpagzqvpwt8ifymavf8o5xmi Gesamtfortschritt: 1 von 1 Aufgaben 1/1: Laufen Überprüfen: Dienst konvergiert Überprüfen Sie, auf welchem Knoten sich der MySQL-Dienst befindet: [root@centos-7 ~]# Docker-Dienst ls ID NAME MODUS REPLIKATE BILD PORTS sbpagzqvpwt8 db repliziert 0/1 mysql:latest [root@centos-7 ~]# Docker-Dienst PS DB ID NAME BILD KNOTEN GEWÜNSCHTER ZUSTAND AKTUELLER ZUSTAND FEHLER PORTS qlmfm6u7lg8u db.1 mysql:latest localhost.localdomain Läuft Beginnt vor 2 Sekunden Geben Sie den Servicecontainer auf dem Worker-Knoten ein, um das Geheimnis anzuzeigen: [root@localhost ~]# docker ps CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN 2ac2a810e931 mysql:latest "docker-entrypoint.s..." vor 3 Minuten Vor 2 Minuten 3306/tcp, 33060/tcp db.1.qlmfm6u7lg8u8i1v2m2c3ls3r [root@localhost ~]# docker exec -it 2ac2a810e931 /bin/sh # cd /run/geheimnisse/ # ls MySQL-Pass # Katze MySQL-Pass Wurzel Nachdem Sie nun das Passwort kennen, können Sie auf die MySQL-Datenbank zugreifen. #mysql -uroot -p Passwort eingeben: Willkommen beim MySQL-Monitor. Befehle enden mit ; oder \g. Ihre MySQL-Verbindungs-ID ist 9 Serverversion: 8.0.19 MySQL Community Server – GPL Copyright (c) 2000, 2020, Oracle und/oder seine Tochtergesellschaften. Alle Rechte vorbehalten. Oracle ist eine eingetragene Marke der Oracle Corporation und/oder ihrer Tochtergesellschaften. Andere Namen können Marken ihrer jeweiligen Eigentümer. Geben Sie „help;“ oder „\h“ ein, um Hilfe zu erhalten. Geben Sie „\c“ ein, um die aktuelle Eingabeanweisung zu löschen. MySQL> (IV) Verwendung von Secret im StackDer Stack verwendet die Datei docker-compose.yml, um den Stack bereitzustellen. Wie definiert man also das Geheimnis in docker-compose.yml? Version: '3' Leistungen: Webseite: Bild: WordPress Häfen: -8080:80 Geheimnisse: -mein-pw Umfeld: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_PASSWORD_FILE: /run/secrets/wordpress-pass Netzwerke: - mein Netzwerk hängt ab von: -mysql einsetzen: Modus: repliziert Replikate: 3 Neustartrichtlinie: Bedingung: bei Fehler Verzögerung: 5s Max_Versuche: 3 Konfiguration aktualisieren: Parallelität: 1 Verzögerung: 10s MySQL: Bild: MySQL Geheimnisse: -mein-pw Umfeld: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql-pass MYSQL_DATABASE: WordPress Bände: -mysql-data:/var/lib/mysql Netzwerke: - mein Netzwerk einsetzen: Modus: global Platzierung: Einschränkungen: - node.role == Manager Bände: MySQL-Daten: Netzwerke: mein Netzwerk: Treiber: Overlay Das Geheimnis wird erstellt, indem WORDPRESS_DB_PASSWORD_FILE und MYSQL_ROOT_PASSWORD_FILE in der Umgebung definiert werden. Natürlich müssen wir die entsprechende geheime Datei erstellen, bevor wir diese docker-compose.yml-Datei ausführen. Anschließend können Sie den Stapel mit dem Befehl „Docker Stack Deploy“ bereitstellen. Dies ist das Ende dieses Artikels über die Verwaltung und Verwendung von Docker Secret. Weitere relevante Docker Secret-Inhalte finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Reines js, um einen Schreibmaschineneffekt zu erzielen
>>: Zusammenfassung der 16 XHTML1.0- und HTML-Kompatibilitätsrichtlinien
Ich bin in letzter Zeit beim Erlernen von Docker ...
Inhaltsverzeichnis 1. Ändern Sie den Port 2375 vo...
In diesem Artikel werden hauptsächlich allgemeine...
Sortierwerkzeug Der Linux-Befehl „sort“ wird zum ...
Nehmen wir ein Benutzerverwaltungssystem an, bei ...
Inhaltsverzeichnis 1. Fehlerphänomen 2. Fehlerana...
In diesem Artikel wird hauptsächlich das Stoppen/...
Container-Autostart Docker bietet einen Neustartr...
Inhaltsverzeichnis 1. Testumgebung 1.1 Hardware u...
Vorwort MySQL ist eine relationale Datenbank mit ...
Plattformbereitstellung 1. JDK installieren Schri...
<br />Die Zugriffsgeschwindigkeit einer Webs...
Sicht Was ist eine Ansicht? Welche Rolle spielt e...
<br />Vorheriges Webdesign-Tutorial: Webdesi...
Um es gleich auf den Punkt zu bringen: Bei manche...