Version 3.1 der Docker-compose.yml-Spezifikation bietet Unterstützung für Geheimnisse .
Ich habe es versucht:
version: '3.1'
services:
a:
image: tutum/hello-world
secret:
password: the_password
b:
image: tutum/hello-world
$ docker-compose up
kehrt zurück:
Unsupported config option for services.secret: 'password'
Wie können wir die Geheimhaltungsfunktion in der Praxis nutzen?
docker-compose
dass Sie bereits Geheimnisse unterstützen? Welchedocker-compose
Version laufen Sie?$ docker-compose --version
Rückgabe:docker-compose version 1.11.0, build 6de1806
Also, ja, es sollte Geheimnisse gemäß den Versionshinweisen unterstützen .Antworten:
Den entsprechenden Abschnitt können Sie der offiziellen Dokumentation entnehmen .
Um Geheimnisse zu nutzen, müssen Sie Ihrer
docker-compose.yml
Datei zwei Dinge hinzufügen . Zunächst einsecrets:
Block der obersten Ebene , der alle Geheimnisse definiert. Dann ein weiterersecrets:
Block unter jedem Dienst, der angibt, welche Geheimnisse der Dienst erhalten soll.Als Beispiel die beiden Arten von Geheimnissen zu schaffen , dass Docker verstehen: externe Geheimnisse und Datei Geheimnisse.
1. Erstellen Sie ein 'externes' Geheimnis mit
docker secret create
Das erste: Um Geheimnisse mit Docker zu nutzen, muss der Knoten, auf dem Sie sich befinden, Teil eines Schwarms sein.
Erstellen Sie als Nächstes ein "externes" Geheimnis:
(Stellen Sie sicher, dass Sie den letzten Strich einfügen
-
. Es ist leicht zu übersehen.)2. Schreiben Sie ein weiteres Geheimnis in eine Datei
3. Erstellen Sie eine
docker-compose.yml
Datei, die beide Geheimnisse verwendetNachdem beide Arten von Geheimnissen erstellt wurden, finden Sie hier die
docker-compose.yml
Datei, in der beide gelesen und in denweb
Dienst geschrieben werden:Docker kann Geheimnisse entweder aus seiner eigenen Datenbank (z. B. mit erstellte Geheimnisse
docker secret create
) oder aus einer Datei lesen . Das Obige zeigt beide Beispiele.4. Stellen Sie Ihren Teststapel bereit
Stellen Sie den Stapel bereit mit:
Dadurch wird eine Instanz des
web
Dienstes mit dem Namen erstelltsecret_test_web
.5. Stellen Sie sicher, dass der vom Dienst erstellte Container beide Geheimnisse enthält
Verwenden Sie
docker exec -ti [container] /bin/sh
diese Option, um zu überprüfen, ob die Geheimnisse vorhanden sind.(Hinweis: Im folgenden
docker exec
Befehl unterscheidet sich derm2jgac...
Teil auf Ihrem Computer. Führen Sie ihn ausdocker ps
, um Ihren Containernamen zu ermitteln.)Wenn alles in Ordnung ist, sollten sich die beiden Geheimnisse, die wir in den Schritten 1 und 2 erstellt haben, in dem
web
Container befinden, der bei der Bereitstellung unseres Stapels erstellt wurde.quelle
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
Ich bin verwirrt! Muss ich einen Schwarm starten, um Docker-Compose mit Geheimnissen verwenden zu können?docker stack deploy
Befehl ist Teil der Swarm-Engine. Ich werde in Schritt 1 eine Zeile hinzufügen, um dies anzuzeigen.Vorausgesetzt, Sie haben einen Dienst
myapp
und eine Geheimdateisecrets.yml
:Erstellen Sie eine Erstellungsdatei:
Stellen Sie mit diesem Befehl ein Geheimnis bereit:
Stellen Sie Ihren Dienst mit diesem Befehl bereit:
Jetzt kann Ihre App unter auf die geheime Datei zugreifen
/run/secrets/secrets_yaml
. Sie können diesen Pfad entweder in Ihrer Anwendung fest codieren oder einen symbolischen Link erstellen.Die andere Frage
Diese Antwort bezieht sich wahrscheinlich auf die Frage "Wie stellen Sie Ihre Geheimnisse Ihrem Docker-Schwarm-Cluster zur Verfügung?".
Die ursprüngliche Frage "Wie verwalten Sie geheime Werte mit Docker Compose?" Impliziert, dass die Docker-Compose-Datei geheime Werte enthält. Das tut es nicht.
Es gibt eine andere Frage: "Wo speichern Sie die kanonische Quelle der
secrets.yml
Datei?" Es liegt an dir. Sie können es in Ihrem Kopf speichern, auf ein Blatt Papier drucken, einen Passwort-Manager verwenden und eine spezielle Geheimdienstanwendung / Datenbank verwenden. Sie können sogar ein Git-Repository verwenden, wenn es selbst sicher gesichert ist. Speichern Sie es natürlich niemals in dem System, das Sie damit sichern :)Ich würde Tresor empfehlen . So speichern Sie ein Geheimnis:
So holen Sie ein Geheimnis ab und legen es in Ihren Hafenschwarm:
Natürlich können Sie Docker-Cluster selbst als eine einzige Quelle der Wahrheit für Ihre Geheimnisse verwenden, aber wenn Ihr Docker-Cluster kaputt geht, haben Sie Ihre Geheimnisse verloren. Stellen Sie also sicher, dass Sie an anderer Stelle ein Backup haben.
Die Frage, die niemand gestellt hat
Die dritte Frage (die niemand gestellt hat) ist, wie Geheimnisse für die Maschinen der Entwickler bereitgestellt werden können. Dies kann erforderlich sein, wenn es einen externen Dienst gibt, der lokal nicht verspottet werden kann, oder eine große Datenbank, die nicht kopiert werden kann.
Auch hier hat Docker (noch) nichts damit zu tun. Es gibt keine Zugriffssteuerungslisten, die angeben, welche Entwickler auf welche Geheimnisse zugreifen können. Es gibt auch keinen Authentifizierungsmechanismus.
Die ideale Lösung scheint folgende zu sein:
docker secret create
Befehlen und führt sie im Terminal aus.Wir müssen noch sehen, ob eine solche Anwendung auftaucht.
quelle
docker secret create
scheint zu erfordern, dass es einen bereits vorhandenen Schwarm gibt? muss ich eine erstellen?./file_based_secret:/run/secrets/my_secret
?Sie können auch angeben ,
secrets
lokal in einer Datei mit gespeichertfile:
insecrets
Schlüsselobjekt. Dann musst du sie nichtdocker secret create
selbst machen, komponiere /docker stack deploy
werde es für dich tun.Referenz: Verfassen der Datei Version 3 Referenz: Geheimnisse
quelle
password
Datei?Ist das der genaue Einzug Ihrer
docker-compose.yml
Datei? Ich denke, sollte unter (dh einem der Dienste) verschachtelt sein , nicht direkt unter Abschnitt.secret
secrets
a
services
quelle
secret
Wörterbuch untera
(und auch auf der gleichen Ebene wieservices
) zu verschachteln und habe das gleiche Ergebnis erzielt.Ich denke das Schlüsselwort ist
secrets
nichtsecret
. Das verstehe ich zumindest aus dem Lesen des Schemas .quelle