Настройка секретов для извлечения контейнеров

Распространённый сценарий — необходимость настройки хост-системы с «секретом извлечения», необходимым для получения контейнерных образов — что включает и саму систему обновлений хоста!

В документации вышестоящего проекта bootc есть раздел, посвящённый секретам в общем, который применим и здесь.

Следующее содержимое относится к собранному образу. При использовании внешнего установщика, такого как Anaconda (Физическое оборудование) или bootc-image-builder, каждая из этих систем должна быть настроена с соответствующими секретами извлечения.

Расположение учётных данных для bootc

Рекомендация для обновлений хоста через bootc — записывать конфигурацию в /etc/ostree/auth.json (что используется совместно с rpm-ostree). С относительно недавнего времени также поддерживается /usr/lib/ostree/auth.json.

Расположение учётных данных для podman

Отсутствие общесистемных учётных данных для podman

Общая концептуальная проблема со всеми доступными в настоящее время расположениями containers-auth, которые принимаются podman, заключается в том, что два расположения находятся в:

  • /run: Это исчезает при перезагрузке, что обычно нежелательно

  • /root: Часть домашнего каталога root, который по умолчанию является локальным изменяемым состоянием

Ведутся обсуждения о добавлении общесистемного расположения для стека контейнеров, но это пока не реализовано. Подробнее в этом pull-запросе.

Объединение учётных данных bootc и podman

Распространённым подходом будет использование одного общего глобального секрета извлечения как для bootc, так и для podman.

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

Этот справочный пример поддерживается в container-auth.

Containerfile
COPY link-podman-credentials.conf /usr/lib/tmpfiles.d/link-podman-credentials.conf
RUN --mount=type=secret,id=creds,required=true cp /run/secrets/creds /usr/lib/container-auth.json && \
    chmod 0600 /usr/lib/container-auth.json && \
    ln -sr /usr/lib/container-auth.json /etc/ostree/auth.json
link-podman-credentials.conf
# Сделать /run/containers/0/auth.json (временный файл во время выполнения)
# символической ссылкой на /usr/lib/container-auth.json (постоянный файл),
# который также является символической ссылкой из /etc/ostree/auth.json.
d /run/containers/0 0755 root root -
L /run/user/0/containers/auth.json - - - - ../../../../usr/lib/container-auth.json