Как использовать секреты докера без скопления роя?

29

В настоящее время мы работаем с приложением в одном док-контейнере, приложению нужны все виды конфиденциальных данных, которые должны передаваться как переменные среды,

Я помещаю их в команду запуска, чтобы они не попадали в образ, а затем в репозиторий, однако я получаю очень небезопасную команду запуска,

Теперь я понимаю, что секреты докеров существуют, однако, как я могу использовать их без развертывания кластера? или есть ли другой способ обезопасить эти данные?

С уважением,

Хуан Себастьян
источник
6
Есть несколько способов использовать секреты без роя blog.mikesir87.io/2017/05/…
Александр

Ответы:

6

Вы не можете ... Это не поддерживает секреты без Роя. Если только вы не можете быть «Роем», используя только один узел.

Другое решение было бы, я думаю, использовать стороннее программное обеспечение хранилища, как этот:

https://www.vaultproject.io/

Но затем, чтобы использовать секреты в ваших контейнерах из Убежища, вам нужно прочитать документ.

Надеюсь, что это приведет вас к правильному пути, чтобы начать.

Уступать
источник
На самом деле мне просто нужно ввести эти секреты при создании контейнеров, они не должны оставаться «секретными» внутри запущенных контейнеров, поэтому я думаю, что для хоста было бы целесообразно иметь доступ и использовать секреты при вызове Команда docker run, я думаю, я могу написать скрипт с кучей замен и обращений к хранилищу.
Хуан Себастьян
@JuanSebastian вы должны проверить Docker 'build-args' для этого варианта использования.
user23390
@JuanSebastian Я могу ошибаться, но получение местного ENV даст вам то, что находится внутри этих build-args .... Не уверен .....
выход
build-argsне включены в окончательное изображение, но могут быть доступны только во время сборки изображения. Подходящее решение - записать секреты в файлы на хосте (разумеется, с соответствующими разрешениями), а затем смонтировать их в свой докер-контейнер. Ваше приложение внутри контейнера может затем прочитать секреты из этих файлов
Брэндон
22

Да , вы можете использовать секреты, если вы используете композитный файл . (Вам не нужно запускать рой).

Вы используете файл compose с docker-compose : в файле docker-compose.yml есть документация для «секретов» .

Я переключился на docker-compose, потому что хотел использовать секреты. Я счастлив, что сделал, это кажется намного более чистым. Каждый сервис отображается в контейнер. И если вы когда-нибудь захотите переключиться на запуск роя, вы уже там.

Примечание: секреты не загружаются в среду контейнера, они монтируются в / 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 и установлен docker-compose):

docker-compose up --build my_service

Вы должны увидеть, как ваш контейнер выводит ваш секрет.

Линдсей-потребности-сна
источник
Можете ли вы показать рабочий пример docker-composeиспользования секрета? Документация и мое понимание реализации указывают, что секрет не будет настроен в контейнере.
BMitch
2
Секреты докеров доступны только для роящихся служб, а не для автономных контейнеров. Чтобы использовать эту функцию, рассмотрите возможность адаптации своего контейнера для запуска в качестве службы. Контейнеры с состоянием обычно могут работать с масштабом 1 без изменения кода контейнера. Докер
Алвин Кеслер
@BMitch Добавил пример. Надеюсь, это поможет вам! (Прошло некоторое время с тех пор, как я работал с докером, и в моей среде немного больше продолжалось ... но я думаю, что это должно сработать. Пожалуйста, дайте мне знать, если я что-то пропустил!)
Линдсей-Потребности-Сон
Я не могу повторить это на моих сервисах без роя ( docker-compose.ymlна одном узле); когда я запускаю контейнер /runтолько содержит nginx.pidи не Mountsпоказывается docker inspect $container.
Георгиосирони
2
Просто подумал, что я бы связался с пиарщиком, который добавил это в простой docker-compose (без роя). github.com/docker/compose/pull/4368 Это действительно там, и из кода это выглядит как минимальная версия для составления файла 3.1, а API 1.13.0. Код все еще находится в текущей версии ( github.com/dnephin/compose/blob/… ), поэтому не стоит ожидать максимальной версии.
ssnobody