Як користуватися секретами докер без кластеру рій?


29

В даний час ми маємо запущену програму на одному контейнері докера, програмі потрібні всілякі конфіденційні дані, щоб передаватись як змінні середовища,

Я ставлю їх на команду run, щоб вони не опинилися на зображенні, а потім у сховищі, однак я закінчую дуже незахищеною командою run,

Тепер я розумію, що секрети докера існують, однак, як я можу їх використовувати, не розгортаючи кластер? чи є інший спосіб захистити ці дані?

З повагою,


6
Існує кілька способів використання секретів без рою blog.mikesir87.io/2017/05/…
Олександр Аксарін

Відповіді:


6

Ви не можете ... Він не підтримує таємниці без Рою. Якщо '' може бути '' ви '' рой '', використовуючи лише один вузол.

Іншим рішенням буде, я думаю, використовувати стороннє програмне забезпечення для сховищ, як це:

https://www.vaultproject.io/

Але потім, щоб використовувати секрети у ваших контейнерах з Vault, вам потрібно буде прочитати документ.

Сподіваємось, це приведе вас до правильного шляху для початку.


Насправді мені просто потрібно вводити ці секрети під час створення контейнерів, вони насправді не повинні залишатися "секретними" всередині запущених контейнерів, тому я здогадуюсь, що хост має сенс мати доступ до та використовувати секрети під час виклику команда запуску докера, я думаю, я можу написати сценарій з купою замін і викликів до сховища.
Хуан Себастьян

@JuanSebastian, ви повинні перевірити Docker 'build-args' для цього випадку використання.
user23390

@JuanSebastian Я можу помилятися, але отримання місцевого ENV дасть вам те, що знаходиться у тісі build-args .... Не впевнений .....
вихід

build-argsне включаються до кінцевого зображення, але до них можна отримати доступ лише під час створення зображення. Підходящим рішенням є написання секретів у файли на хості (звичайно, з відповідними дозволами), а потім їх об'ємне встановлення у ваш контейнер докера. Потім ваша програма всередині контейнера може прочитати секрети цих файлів
Брендон,

22

Так , ви можете використовувати секрети, якщо використовуєте композиційний файл . (Вам не потрібно бігти рій).

Ви використовуєте композиційний файл з docker-compose : у файлі docker-compose.yml є документація для "секретів" .

Я перейшов на докер-композицію, бо хотів використовувати секрети. Я щасливий, що зробив це, здається, набагато чистіше. Кожна служба відображає контейнер. І якщо ви хочете замість цього перейти на біг рою, ви в основному вже є.

Примітка: секрети не завантажуються в середовище контейнера, вони монтуються до / run / secrets /

Ось приклад:

1) Структура проекту:

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

2) вміст 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) вміст super_duper_secret.txt:

Whatever you want to write for a secret really.

4) Запустіть цю команду з кореня проекту, щоб побачити, що контейнер має доступ до вашої таємниці (Докер повинен бути запущений, а докер-композиція встановлена):

docker-compose up --build my_service

Ви повинні побачити, як ваш контейнер видає свій секрет.


Чи можете ви показати робочий приклад docker-composeвикористання секрету? Документація та моє розуміння реалізації вказують на те, що секрет не буде налаштований у контейнері.
BMitch

2
Секрети докера доступні лише для рійових служб, а не для самостійних контейнерів. Щоб скористатися цією функцією, розгляньте можливість адаптувати контейнер до служби. Контейнери, що знаходяться у стані, зазвичай можуть працювати із шкалою 1, не змінюючи код контейнера. докер
Альвін Кеслер

@BMitch Додав приклад. Сподіваюся, це допоможе вам! (Минуло час, коли я працював з докером, і в моєму середовищі відбувається дещо більше ... але я думаю, що це має спрацювати. Будь ласка, дайте мені знати, якщо я щось пропустив!)
Ліндсей-Потреби-Сон

Я не можу повторити це на своїх послугах без рій ( docker-compose.ymlна одному вузлі); коли я запускаю, контейнер /runмістить тільки nginx.pidі не Mountsпоказаний docker inspect $container.
giorgiosironi

2
Я просто подумав, що я посилаюся на піар, який додав це до простого докер-композиту (без рою). github.com/docker/compose/pull/4368 Це дійсно є там, і з коду, схоже, що мінімальна версія для композиційного файлу становить 3,1, а API - 1,13,0. Код все ще знаходиться в поточному головному ( github.com/dnephin/compose/blob/… ), тому не слід очікувати максимальної версії.
ssnobody
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.