Перейти к содержанию

Создание и синхронизация приватного репозитория Боцман

Введение

Когда используется создание внутреннего репозитория:

  1. Организация внутреннего защищенного хранилища компонентов платформы “Боцман” для последующей установки “Боцман” в закрытом контуре без доступа к сети Интернет.

  2. Организация локального защищенного хранилища компонентов платформы “Боцман” при нестабильном подключении к сети Интернет.

  3. По причине внутренних правил и политик информационной безопасности.

  4. Для ускорения процесса установки платформы “Боцман”.

В примере используется легковесный docker registry (https://hub.docker.com/_/registry)

Заметка

Если вы планируете использовать уже существующий registry на базе harbor, artifactory или иных продуктов, пожалуйста, обратитесь к их официальной документации по их настройке.

Варианты исполнения

  1. Registry находится в двух сетях.

    1. Закрытая и доступная для вычислительных мощностей платформы "Боцман".

    2. Открытая с доступом к сети Интернет. Возможно ограниченно доступная сеть Интернет с доступом только до публичного registry платформы "Боцман".

  2. Registry находится в двух сетях.

    1. Закрытая и доступная для вычислительных мощностей платформы "Боцман".

    2. Открытая с доступом к сети Интернет через Прокси с доступом только до публичного registry платформы "Боцман".

  3. Registry находится в двух сетях.

    1. Закрытая и доступная для вычислительных мощностей платформы "Боцман".

    2. Открытая с доступом к сети Интернет. Возможно ограниченно доступная сеть Интернет с доступом только до публичного registry платформы "Боцман" в определенные часы только для синхронизации.

  4. Registry находится только в закрытой зоне, а пакеты в него загружаются через отчуждаемые носители. Предварительно все пакеты должны быть размещены на отчуждаемом носители на устройстве с доступом к сети Интернет.

Технические требования

Описание параметров

Имя параметра Описание
OS Astra Linux, RED OS, Ubuntu
vCPU 2
RAM 8GB
DISK SPACE OS Не менее 30GB
DISK SPACE DATA Не менее 100GB
Networking Не менее 300Мb/s для доступа с серверов куда будет устанавливаться "Боцман"

Шаг 1. Настройка SSL сертификатов

Пример использования самоподписанных сертификатов

Выполните команду создания директории /data/certs на хосте, выделенном под роль registry:

mkdir -p /data/certs

Выполните команду перехода в директорию /data/certs:

cd /data/certs

Выполните команду генерации приватного ключа:

openssl genrsa 1024 > registry.key
Где название файла - это имя хоста или домена. В примере указан registry

Выполните команду выдачи права доступа на файл registry.key:

chmod 400 registry.key

Выполните создание конфигурационного файла san.cnf выпуска сертификата

Пример:

[req]
default_bits  = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
countryName = RU
stateOrProvinceName = N/A
localityName = N/A
organizationName = Self-signed certificate
commonName = 120.0.0.1: Self-signed certificate

[req_ext]
subjectAltName = @alt_names

[v3_req]
subjectAltName = @alt_names

[alt_names]
IP.1 = registry ip

Где registry ip - ip адрес хоста с ролью registry, который будет доступен с АРМ

Выполните команду генерации сертификата:

openssl req -new -x509 -nodes -sha256 -days 365 -key registry.key -out registry.crt -config san.cnf

Результатом выполнения команды должен стать файл: registry.crt

Выполните команду запуска registry с поддержкой терминирования TLS соединений (https):

docker run -d -p 443:5000 --name registry-tls  -v /data/certs:/certs -v /data/certs:/certs  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt -e REGISTRY_HTTP_TLS_KEY=/certs/registry.key  registry:2.8.3

Шаг 2. Добавление на АРМ сертификата в список доверенных

Выполните команду создания каталога на хосте с ролью АРМ:

mkdir -p /etc/docker/certs.d/registry:443/

Выполните команду, чтобы поместить содержимое файла registry.crt с хоста registry в файл:

/etc/docker/certs.d/registry:443/ca.crt на хосте с ролью АРМ

Выполните команду аутентификации на АРМ в новом докере registry:

docker login registry

Результатом выполнения команды должна стать строка: Login Succeeded

Шаг 3. Настройка скрипта зеркалирования

В архиве поставки дистрибутива bootsman предоставлено:

  • Скрипт mirror.sh
  • Пример настроек .env.example
  • Файл с списком docker-образов VERSION_BOOTSMAN.yaml

Внимание!

В файле VERSION_BOOTSMAN.yaml, входящих в состав дистрибутива "Боцман" указаны необходимые docker-образы и их версии для зеркалирования. Данные файлы используются скриптом mirror.sh и должны располагаться рядом с ним.

Сделайте копию .env.example c именем .env:

cp .env.example .env

Откройте файл конфигурации .env для редактирования
Далее нужно заполнить его в соответствии с вашей инфраструктурой:

BOOTSMAN_REGISTRY_URL="harbor.bootsman.host" (1)
BOOTSMAN_REGISTRY_SUBPATH="bootsman-nimbus/common-artifacts" (2)
BOOTSMAN_REGISTRY_USERNAME='' (3)
BOOTSMAN_REGISTRY_PASSWORD='' (4)


MIRROR_REGISTRY_URL="registry.example.ru" (5)
MIRROR_REGISTRY_SUBPATH="example/sub/path" (6)
MIRROR_REGISTRY_USERNAME='' (7)
MIRROR_REGISTRY_PASSWORD='' (8)

MIRROR_FORCE=false (9)

MULTI_ARCH=false (10)
  1. Для копирования docker-образов из нашего хранилища используйте: harbor.bootsman.host
    Возможно копирование из других docker-хранилищ
  2. Путь до docker-образов внутри хранилища, используйте: bootsman-nimbus/common-artifacts.
    Поддерживается только "плоское" хранение
  3. Имя пользователя для авторизации в источник docker-образов.
    Для доступа в harbor.bootsman.host можно получить из лицензии:
    export LICENSE=ZzSGquD8GWb2zthw7XJR
    jq -R 'split(".") | .[1] | @base64d | fromjson' <<< "$LICENSE" | jq .harborUser
    
    Используйте одинарные кавычки.
  4. Пароль пользователя для авторизации в источник docker-образов.
    Для доступа в harbor.bootsman.host используйте лицензию в качестве пароля
  5. Доменное имя вашего хранилища docker-образов
  6. Путь до docker-образов внутри вашего хранилища.
    Поддерживается только "плоское" хранение
  7. Имя пользователя для авторизации в ваше хранилище docker-образов
  8. Пароль пользователя для авторизации в ваше хранилище docker-образов
  9. Нужно ли перезаписывать образы в вашем хранилище docker-образов
  10. Экспериментальный параметр, оставьте значение false

Шаг 4. Запуск первичного зеркалирования

Требуемое ПО


Для работы скрипта вам потребуется docker-клиент и yq
В случае отсутствия yq, будет произведена его установка

Выполните команду предоставления прав доступа на запуск скрипта:

chmod +x mirror.sh

Выполните команду запуска зеркалирования репозитория:

(1)./mirror.sh VERSION_BOOTSMAN.yaml
  1. VERSION_BOOTSMAN.yaml - Список docker-образов для конкретной версии

Шаг 5. Запуск зеркалирования по расписанию

Для ежедневного зеркалирования и обновления содержимого репозитория, добавьте исполнение команды mirror.sh в crontab

Выполните команду редактирвания crontab (можно командой crontab -e) и добавьте строку:

@daily /полный/путь/до/mirror.sh VERSION_BOOTSMAN.yaml

или используйте удобное вам расписание синхронизации в соответствии с crontab нотацией.

Дополнительно

В случаях, когда синхронизация репозиториев запускается с этой же машины (mirror.sh) и внешние registry доступны только через корпоративный прокси, то необходимо в файле:
/etc/docker/daemon.json
добавить конфигурацию прокси:

{
  "proxies": {
    "http-proxy": "http://proxy.example.com:3128",
    "https-proxy": "https://proxy.example.com:3129",
    "no-proxy": "*.test.example.com,.example.org,127.0.0.0/8"
  }
}