Wie verwende ich Docker-Geheimnisse ohne einen Schwarm-Cluster?

29

Gegenwärtig sind wir eine laufende Anwendung auf einem einzigen Docker-Container. Die Anwendung benötigt alle Arten von vertraulichen Daten, um als Umgebungsvariablen übergeben zu werden.

Ich setze diese in den Befehl run, damit sie nicht im Image und dann in einem Repository landen. Am Ende erhalte ich jedoch einen sehr unsicheren Befehl run.

Jetzt verstehe ich, dass Docker-Geheimnisse existieren, aber wie kann ich sie verwenden, ohne einen Cluster bereitzustellen? Oder gibt es eine andere Möglichkeit, diese Daten zu sichern?

Freundliche Grüße,

Juan Sebastian
quelle
6
Es gibt mehrere Möglichkeiten, um Geheimnisse ohne Schwarm zu nutzen blog.mikesir87.io/2017/05/…
Aleksandr Aksarin

Antworten:

6

Sie können nicht ... Es unterstützt keine Geheimnisse ohne Swarm. Es sei denn, Sie schwärmen mit nur einem Knoten.

Die andere Lösung wäre, denke ich, eine Vault-Software von Drittanbietern wie diese zu verwenden:

https://www.vaultproject.io/

Um die Geheimnisse in Ihren Containern von Vault zu nutzen, müssten Sie jedoch das Dokument lesen.

Hoffe, dies bringt dich auf den richtigen Weg, um anzufangen.

Ausbeute
quelle
Eigentlich muss ich diese Geheimnisse nur beim Erstellen der Container einschleusen, sie müssen nicht wirklich "geheim" in den laufenden Containern bleiben. Ich denke, es wäre sinnvoll, wenn der Host beim Aufrufen von auf die Geheimnisse zugreifen und sie verwenden kann Docker-Befehl ausführen, ich denke, ich kann ein Skript mit einer Reihe von Ersetzungen und Aufrufen zu Tresor schreiben.
Juan Sebastian
@ JuanSebastian Sie sollten Docker 'build-args' für diesen Anwendungsfall überprüfen.
user23390
@JuanSebastian ich falsch sein könnte, aber die lokale ENV bekommen würden Sie geben , was in thoses build-args ist .... Nicht sicher .....
ergeben
build-argssind nicht im endgültigen Image enthalten, können aber nur während der Image-Erstellung aufgerufen werden. Eine geeignete Lösung besteht darin, die Geheimnisse in Dateien auf dem Host zu schreiben (natürlich mit den entsprechenden Berechtigungen) und sie dann auf dem Volume in Ihren Docker-Container zu laden. Ihre Anwendung im Container kann dann die Geheimnisse aus diesen Dateien lesen
Brandon
22

Ja , Sie können Geheimnisse verwenden, wenn Sie eine Compose-Datei verwenden . (Du musst keinen Schwarm rennen).

Sie verwenden eine Compose-Datei mit Docker-Compose : In einer Docker-Compose.yml-Datei ist Dokumentation für "Geheimnisse" enthalten .

Ich wechselte zu Docker-Compose, weil ich Geheimnisse verwenden wollte. Ich bin froh, dass ich es getan habe, es scheint viel sauberer zu sein. Jeder Dienst wird einem Container zugeordnet. Und wenn Sie einmal auf das Laufen eines Schwarms umsteigen möchten, sind Sie im Grunde schon da.

Hinweis: Geheimnisse werden nicht in die Umgebung des Containers geladen, sondern in / run / secrets / eingebunden.

Hier ist ein Beispiel:

1) Projektstruktur:

|
|---    docker-compose.yml
|---    super_duper_secret.txt

2) docker-compose.yml Inhalt:

version: "3.6"

services:

  my_service:
    image: centos:7
    entrypoint: "cat /run/secrets/my_secret"
    secrets:
      - my_secret

secrets:
  my_secret:
    file: ./super_duper_secret.txt

3) super_duper_secret.txt Inhalt:

Whatever you want to write for a secret really.

4) Führen Sie diesen Befehl im Stammverzeichnis des Projekts aus, um festzustellen, ob der Container Zugriff auf Ihr Geheimnis hat. (Docker muss ausgeführt werden und docker-compose muss installiert sein.)

docker-compose up --build my_service

Sie sollten sehen, dass Ihr Container Ihr Geheimnis ausgibt.

Lindsay-braucht-Schlaf
quelle
Können Sie ein funktionierendes Beispiel für die docker-composeVerwendung eines Geheimnisses zeigen? Die Dokumentation und mein Verständnis der Implementierung zeigen, dass das Geheimnis nicht im Container konfiguriert wird.
BMitch
2
Docker-Geheimnisse sind nur für Schwarmdienste verfügbar, nicht für eigenständige Container. Um diese Funktion zu verwenden, sollten Sie Ihren Container so anpassen, dass er als Dienst ausgeführt wird. Stateful Container können normalerweise mit einer Skala von 1 ausgeführt werden, ohne den Containercode zu ändern. Hafenarbeiter
Alwin Kesler
@BMitch Ein Beispiel hinzugefügt. Hoffe es hilft dir! (Es ist schon eine Weile her, dass ich mit Docker gearbeitet habe und in meiner Umgebung ist einiges mehr los ... aber ich denke, das sollte funktionieren. Bitte lassen Sie mich wissen, wenn ich etwas verpasst habe!)
Lindsay-Needs-Sleep
Ich kann dies auf meinen Diensten nicht ohne einen Schwarm ( docker-compose.ymlauf einem einzelnen Knoten) replizieren . beim starten /runenthält der container nur ein nginx.pidund es werden keine durch Mountsangezeigt docker inspect $container.
Giorgiosironi
2
Ich dachte nur, ich würde auf die PR verlinken, die dies hinzugefügt hat, um einfach Docker zu komponieren (ohne Schwarm). github.com/docker/compose/pull/4368 Es ist wirklich da und vom Code aus sieht es so aus, als ob die Mindestversion für die Compose-Datei 3.1 und die API 1.13.0 ist. Der Code befindet sich immer noch im aktuellen Master ( github.com/dnephin/compose/blob/… ), daher würde ich keine Max-Version erwarten.
SSNOBODY