Come usare i segreti della finestra mobile senza un cluster di sciami?


29

Attualmente siamo un'applicazione in esecuzione su un singolo contenitore finestra mobile, l'applicazione ha bisogno di trasmettere tutti i tipi di dati sensibili come variabili di ambiente,

Sto mettendo quelli sul comando di esecuzione in modo che non finiscano nell'immagine e poi su un repository, tuttavia finisco con un comando di esecuzione molto non sicuro,

Ora capisco che esistono segreti docker, tuttavia, come posso usarli senza distribuire un cluster? o c'è un altro modo per proteggere questi dati?

I migliori saluti,


6
Esistono diversi modi per utilizzare i segreti senza lo sciame blog.mikesir87.io/2017/05/…
Aleksandr Aksarin,

Risposte:


6

Non puoi ... Non supporta i segreti senza Swarm. A meno che '' non possa essere '' tu '' Sciame '' usando solo un nodo.

L'altra soluzione sarebbe, penso di usare un software di vault di terze parti come questo:

https://www.vaultproject.io/

Ma poi, per usare i segreti dei tuoi contenitori da Vault, dovrai leggere il documento.

Spero che questo ti porti sulla strada giusta per iniziare.


In realtà ho solo bisogno di iniettare questi segreti durante la creazione dei contenitori, non hanno davvero bisogno di rimanere "segreti" all'interno dei contenitori in esecuzione, quindi credo che avrebbe senso per l'host essere in grado di accedere e utilizzare i segreti quando invoca il docker run command, immagino di poter scrivere uno script con un sacco di sostituzioni e chiamate al vault.
Juan Sebastian,

@JuanSebastian dovresti dare un'occhiata a Docker 'build-args' per quel caso d'uso.
user23390,

@JuanSebastian Potrei sbagliarmi, ma ottenere l'ENV locale ti darebbe cosa c'è dentro quei build-args .... Non sono sicuro .....
resa il

build-argsnon sono inclusi nell'immagine finale, ma sono accessibili solo durante il tempo di creazione dell'immagine. Una soluzione adatta è scrivere i segreti sui file sull'host (con le autorizzazioni appropriate, ovviamente), quindi montarli nel volume nel contenitore della finestra mobile. L'applicazione all'interno del contenitore può quindi leggere i segreti di quei file
Brandon,

22

, puoi usare i segreti se usi un file di composizione . (Non è necessario eseguire uno sciame).

Si utilizza un file di composizione con docker-compose : è presente la documentazione per "segreti" in un file docker-compose.yml .

Sono passato alla docker-compose perché volevo usare i segreti. Sono felice di averlo fatto, sembra molto più pulito. Ogni servizio è mappato su un contenitore. E se mai vuoi passare a eseguire uno sciame invece, sei praticamente già lì.

Nota: i segreti non vengono caricati nell'ambiente del contenitore, sono montati su / run / secrets /

Ecco un esempio:

1) Struttura del progetto:

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

2) contenuto docker-compose.yml:

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) contenuti super_duper_secret.txt:

Whatever you want to write for a secret really.

4) Esegui questo comando dalla radice del progetto per vedere che il contenitore ha accesso al tuo segreto, (Docker deve essere in esecuzione e docker-compose installato):

docker-compose up --build my_service

Dovresti vedere il tuo contenitore in uscita il tuo segreto.


Puoi mostrare un esempio funzionante docker-composedell'uso di un segreto? La documentazione e la mia comprensione dell'implementazione indicano che il segreto non verrà configurato nel contenitore.
BMitch

2
I segreti Docker sono disponibili solo per i servizi di sciame, non per i contenitori autonomi. Per utilizzare questa funzione, è consigliabile adattare il contenitore per l'esecuzione come servizio. I contenitori con stato possono in genere essere eseguiti con una scala 1 senza modificare il codice contenitore. docker
Alwin Kesler

@BMitch Aggiunto un esempio. Spero che ti aiuti! (È passato un po 'di tempo da quando ho lavorato con la finestra mobile e il mio ambiente è ancora un po' più in corso ... ma penso che dovrebbe funzionare. Per favore fatemi sapere se mi sono perso qualcosa!)
Lindsay-Needs-Sleep,

Non posso replicarlo sui miei servizi senza uno sciame ( docker-compose.ymlsu un singolo nodo); quando inizio il contenitore /runcontiene solo un nginx.pide non ci sono Mountsmostrati da docker inspect $container.
giorgiosironi,

2
Ho solo pensato di collegarmi al PR che lo ha aggiunto a plain docker-compose (senza sciame). github.com/docker/compose/pull/4368 È davvero lì e dal codice sembra che la versione minima per il file di composizione sia 3.1 e l'API sia 1.13.0. Il codice è ancora nell'attuale master ( github.com/dnephin/compose/blob/… ), quindi non ci si aspetterebbe una versione massima.
ssnobody,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.