🐳 Docker secret – как использовать в Docker Swarm и Docker Compose

Мануал

Docker secrets – это сущности Docker, которые предназначены для хранения конфиденциальной информации, такой как имя пользователя, пароль, SSL-сертификаты и любые защищенные файлы.

Docker Secret был создан и широко использовался в Docker Swarm, а затем был распространен на docker compose начиная с версии 3.

Если вы беспокоились о защите своих конфиденциальных данных, Docker Secret будет одним из решений!

Только представьте, мы никогда не захотим хранить конфигурационный файл со всеми нашими паролями на GitHub/любом репозитории,публичном или даже частном.

В этом руководстве мы рассмотрим различные аспекты настройки и использования секретов Docker.

Прежде чем мы перейдем к практике, вот некоторое введение, как это используется в сервисах docker swarm.

Сначала мы создаем и добавляем секрет в swarm, а затем предоставляем нашим сервисам доступ к необходимым им секретам.

Когда создается сервис (или обновляется), секрет устанавливается в контейнер в каталог /run/secrets.

Теперь ваше приложение имеет доступ к необходимым ему секретам.

Создание секрета

Просто предположим, что ваш swarm уже запущен или для проверки, пожалуйста, выполните команду “docker swarm init”, которая инициирует ваш docker sworm ноде.

Теперь вы можете использовать команду docker secret create, чтобы добавить новый секрет в swarm

Вот базовый пример:

echo "mypassword" | docker secret create mypass -

Теперь давайте воспользуемся командой “docker secret ls”, чтобы подтвердить, что наш секрет был добавлен:

docker secret ls

должно получиться что-то вроде этого:

ID                          NAME     CREATED             UPDATED
rkxav7s9rvnc9d7ct6dhkrsyn   mypass  3 minutes ago        3 minutes ago

Давайте посмотрим, что еще можно сделать c Docker secret, прежде чем мы перейдем к добавлению secret в сервис.

Просмотр секрета Docker

Вы можете использовать команду inspect и для Docker secret:

docker secret inspect secret_name

в нашем случае это будет “mypass”.

Удаление секрета Docker

Вы можете удалить секрет с помощью следующей команды

docker secret rm secret_name

Добавление секрета в службу

Теперь, когда вы добавили секрет в swarm, необходимо предоставить службе доступ к нему.

Это можно сделать при создании или обновлении службы.

Вот пример того, как добавить секрет при создании службы:

docker service create --secret mypass --name secret alpine ping itsecforu.ru

В этом примере я добавляю секрет mypass, который мы создали в предыдущем шаге, в службу, запускающую образ alpine.

🐧 Как обновить Alpine Linux до последней версии

Если служба уже запущена, и мы хотим добавить (или изменить) секрет, можно воспользоваться опцией -secret-add.

docker service update --secret-add mypass existing_service_name

Как это работает в реальном времени

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

Секрет для каждого пароля

В приведенном выше примере я показал, как можно хранить один пароль в секрете.

Это может быть уместно, если вы не управляете большим количеством секретов.

В этом случае вы вручную создаете каждый секрет и добавляете их в соответствующую службу при создании или обновлении.

При использовании этого метода следует учитывать некоторые моменты.

Если у вас много секретов, есть возможность ошибки при ручном управлении, и это может занять много времени.

Секрет для каждой службы

Другим возможным методом может быть хранение всех секретов, необходимых каждой службе, в одном файле – возможно, в json-файле под названием “service.json”.

Теперь вы добавляете один секретный файл для каждой службы, а все пароли хранятся в файле, который может быть быстро прочитан вашим приложением.

Это обеспечивает гораздо более чистый и быстрый способ настройки секретов, а также упрощает работу на уровне приложения.

Но очевидным недостатком является то, что службы часто используют общие секреты, поэтому некоторые конфиденциальные данные могут быть продублированы.

Как Docker Secret может использоваться в Docker Compose:

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

🐳 Управление Docker контейнерами с помощью Docker Compose

Я перешел на docker-compose, потому что хотел использовать секреты.

Каждый сервис сопоставляется с контейнером.

Примечание: секреты не загружаются в окружение контейнера, они монтируются в /run/secrets/.

Вот пример:

Структура файла:

|
|--- docker-compose.yml
|--- mysecret.txt

docker-compose.yml содержит:

version: “3.6”
services:
  my_service:
    image: ubuntu:18.04
    entrypoint: “cat /run/secrets/mysecret”
    secrets:
      – mysecret
secrets:
  mysecret:
    file: ./mysecret.txt

mysecret.txt содержит:

 this is my secret text

Выполните эту команду от имени root, чтобы убедиться, что контейнер имеет доступ к вашему секрету (Docker должен быть запущен и установлен docker-compose):

docker-compose up --build myservice

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

Creating network "secret_default" with the default driver
Pulling myservice (centos:7)...
7: Pulling from library/centos
524b0c1e57f8: Pull complete
Digest: sha256:e9ce0b76f29f942502facd849f3e468232492b259b9d9f076f71b392293f1582
Status: Downloaded newer image for centos:7
Creating secret_myservice_1 ... done
Attaching to secret_myservice_1
myservice_1  | this is my secret text
secret_myservice_1 exited with code 0

см. также:

Добавить комментарий