Detaillierte Erläuterung der Verwaltung und Verwendung von Docker Secrets

Detaillierte Erläuterung der Verwaltung und Verwendung von Docker Secrets

1. Was ist Docker Secret

1. Szenariodarstellung

Wir 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-Geheimnis

Wir 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:

  • Das Geheimnis liegt in der Raft-Datenbank des Swarm Manager-Knotens
  • Ein Geheimnis kann einem Dienst zugewiesen werden, und dann kann der Dienst das Geheimnis sehen
  • Im Container sehen die Geheimnisse wie Dateien aus, in Wirklichkeit handelt es sich jedoch um Speicher.

2. Erstellung und Verwendung von Docker Secret

1. Erstellung

Schauen 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:

  • Dateibasierte Erstellung
  • Über die Befehlszeile 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ätigkeiten

Gibt 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 Stack

Der 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:
  • So verwalten Sie Benutzer und Gruppen beim Ausführen von Docker
  • Detaillierte Erläuterung der Docker-Datenvolumenverwaltung
  • Detaillierte Erläuterung der Container-Datenmengen und der Datenverwaltung in Docker
  • Detaillierte Erläuterung der Docker Volume-Berechtigungsverwaltung
  • Detaillierte Erläuterung von Docker unter Verwendung von Linux iptables und Schnittstellen zur Verwaltung von Containernetzwerken
  • Detaillierte Erläuterung zum benannten Volume der Docker-Datenverwaltung
  • Detaillierte Erläuterung des Aufbaus und der Schnittstellenverwaltung des Docker Private Warehouse
  • Detaillierte Erklärung zum Erstellen und Verwalten von Docker-Clustern
  • Eine kurze Diskussion über die Docker-Grundlagen: Datenverwaltung
  • Docker-Grundlagen Datenmanagement lernen
  • Detaillierte Erläuterung des Docker-Datenmanagements (Datenvolumes und Datenvolume-Container)
  • Netzwerkmanagement und Netzwerkisolationsimplementierung von Docker-Containern

<<:  Reines js, um einen Schreibmaschineneffekt zu erzielen

>>:  Zusammenfassung der 16 XHTML1.0- und HTML-Kompatibilitätsrichtlinien

Artikel empfehlen

Implementierung des Docker-Verpackungsimages und Konfigurationsänderung

Ich bin in letzter Zeit beim Erlernen von Docker ...

Implementierung der One-Click-TLS-Verschlüsselung für die Docker-Remote-API

Inhaltsverzeichnis 1. Ändern Sie den Port 2375 vo...

Tiefgreifendes Verständnis der CSS @font-face-Leistungsoptimierung

In diesem Artikel werden hauptsächlich allgemeine...

Detaillierte Erklärung der Linux-Befehle sort, uniq, tr tools

Sortierwerkzeug Der Linux-Befehl „sort“ wird zum ...

Lösung für den Fehler beim Kompilieren des LVGL-Emulators unter Linux

Inhaltsverzeichnis 1. Fehlerphänomen 2. Fehlerana...

Docker stop stoppt/remove löscht alle Container

In diesem Artikel wird hauptsächlich das Stoppen/...

So implementieren Sie den Selbststart eines Docker-Containers

Container-Autostart Docker bietet einen Neustartr...

Details zum Vergleich der MySQL-Datenkomprimierungsleistung

Inhaltsverzeichnis 1. Testumgebung 1.1 Hardware u...

So installieren Sie JDK und Mysql auf dem Linux-System Ubuntu 18.04

Plattformbereitstellung 1. JDK installieren Schri...

Eine kurze Diskussion über MySql-Ansichten, Trigger und gespeicherte Prozeduren

Sicht Was ist eine Ansicht? Welche Rolle spielt e...

Webdesign-Tutorial (4): Über Materialien und Ausdrücke

<br />Vorheriges Webdesign-Tutorial: Webdesi...

Verwenden Sie reines CSS, um einen Scroll-Schatteneffekt zu erzielen

Um es gleich auf den Punkt zu bringen: Bei manche...