Jak korzystać z tajemnic dokerów bez klastra roju?

29

Obecnie jesteśmy uruchomioną aplikacją na pojedynczym kontenerze dokowanym, aplikacja potrzebuje różnego rodzaju poufnych danych, aby były przekazywane jako zmienne środowiskowe,

Umieszczam je w poleceniu uruchomienia, aby nie kończyły się na obrazie, a następnie w repozytorium, jednak otrzymuję bardzo niezabezpieczone polecenie uruchamiania,

Teraz rozumiem, że istnieją tajemnice dokerów, ale jak mogę ich używać bez wdrażania klastra? czy jest jakiś inny sposób zabezpieczenia tych danych?

Z poważaniem,

Juan Sebastian
źródło
6
Istnieje kilka sposobów korzystania z tajemnic bez roju blog.mikesir87.io/2017/05/…
Aleksandr Aksarin

Odpowiedzi:

6

Nie możesz ... To nie obsługuje tajemnic bez Roju. Chyba że „może” być „rojem” za pomocą tylko jednego węzła.

Innym rozwiązaniem byłoby, jak sądzę, użycie oprogramowania skarbca innej firmy, takiego jak to:

https://www.vaultproject.io/

Ale aby użyć sekretów w swoich kontenerach z Vault, musisz przeczytać dokument.

Mam nadzieję, że doprowadzi Cię to do właściwej ścieżki, aby rozpocząć.

wydajność
źródło
Właściwie po prostu muszę wprowadzić te sekrety podczas tworzenia kontenerów, tak naprawdę nie muszą one pozostać „tajne” w uruchomionych kontenerach, więc sądzę, że miałoby sens, aby gospodarz mógł uzyskać dostęp i korzystać z sekretów podczas wywoływania polecenie uruchamiania dokera, myślę, że mogę napisać skrypt z wieloma zamiennikami i wywołaniami do repozytorium.
Juan Sebastian
@JuanSebastian powinieneś sprawdzić Docker 'build-args' dla tego przypadku użycia.
user23390,
@JuanSebastian Mogę się mylić, ale uzyskanie lokalnej ENV dałoby ci to, co jest w tych build-argsach ... Nie jestem pewien .....
wydajność
build-argsnie są uwzględnione w ostatecznym obrazie, ale można uzyskać do nich dostęp tylko podczas kompilacji obrazu. Odpowiednim rozwiązaniem jest zapisanie sekretów do plików na hoście (oczywiście z odpowiednimi uprawnieniami), a następnie zamontowanie ich w wolumenie w kontenerze dokera. Twoja aplikacja w kontenerze może następnie odczytać sekrety z tych plików
Brandon
22

Tak , możesz użyć tajemnic, jeśli używasz pliku redagowania . (Nie musisz biegać w roju).

Używasz pliku komponowania z dokerem-komponuj : w pliku docker-compose.yml znajduje się dokumentacja dotycząca „sekretów” .

Przerzuciłem się na komponowanie dokerów, ponieważ chciałem używać sekretów. Cieszę się, że to zrobiłem, wydaje się znacznie czystsze. Każda usługa jest mapowana do kontenera. A jeśli kiedykolwiek chcesz zamiast tego przejść do roju, to po prostu już tam jesteś.

Uwaga: Sekrety nie są ładowane do środowiska kontenera, są montowane w / run / secrets /

Oto przykład:

1) Struktura projektu:

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

2) zawartość 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) zawartość super_duper_secret.txt:

Whatever you want to write for a secret really.

4) Uruchom to polecenie z katalogu głównego projektu, aby sprawdzić, czy kontener ma dostęp do Twojego klucza tajnego (Docker musi być uruchomiony, a komponent dokujący-zainstalowany):

docker-compose up --build my_service

Powinieneś zobaczyć swój kontener wyprowadzający swój sekret.

Lindsay-Needs-Sleep
źródło
Czy możesz pokazać działający przykład docker-composeużycia tajemnicy? Dokumentacja i moje zrozumienie implementacji wskazują, że sekret nie zostanie skonfigurowany w kontenerze.
BMitch
2
Sekrety dokerów są dostępne tylko dla służb roju, a nie dla pojedynczych kontenerów. Aby użyć tej funkcji, rozważ dostosowanie kontenera do działania jako usługa. Kontenery stanowe mogą zwykle działać w skali 1 bez zmiany kodu kontenera. doker
Alwin Kesler
@BMitch Dodano przykład. Mam nadzieję, że to ci pomoże! (Minęło trochę czasu, odkąd pracowałem z dokerem, a moje środowisko działa o wiele więcej ... ale myślę, że to powinno działać. Daj mi znać, jeśli coś przeoczyłem!)
Lindsay-Needs-Sleep
Nie mogę replikować tego w moich usługach bez roju ( docker-compose.ymlw jednym węźle); kiedy zaczynam, kontener /runzawiera tylko nginx.pidi nie ma Mountsich docker inspect $container.
giorgiosironi
2
Pomyślałem, że powiążę z PR, który dodał to do zwykłego komponowania dokera (bez roju). github.com/docker/compose/pull/4368 Naprawdę tam jest i na podstawie kodu wygląda na to, że minimalna wersja pliku tworzenia to 3.1, a API to 1.13.0. Kod jest nadal w bieżącym master ( github.com/dnephin/compose/blob/… ), więc nie spodziewałbym się wersji maksymalnej.
ssnobody