Сборка образов контейнеров компонента IAM Proxy#
Ограничения#
При сборке образов компонентов IAM Proxy рекомендуется использовать "чистые" базовые образы ОС (без предустановленного дополнительного ПО). Рекомендуется использовать следующие образы, как базовые при сборке:
rhel8;ubi8;alt-sp8;sberlinux8.
В базовых образах должна быть возможность использовать пакетный менеджер yum или apt, и возможность ими в инфраструктуре
сборки установить пакеты (и все их зависимости):
unzip;gettext;python3;openssl;java-1.8.0-openjdk-headless;java-11-openjdk-headless;ivykisglibc-langpack-en(только для rhel);glibc-langpack-ru(только для rhel);python3-module-pip(только для altlinux);python3-module-setuptools(только для altlinux);libnsl.so.1,libivykis.so.0,libssl10,libnet2(только для altlinux);
Примечание: Для RHEL8 и SberLinux8 все необходимые пакеты и зависимости можно получить, подключив репозитории: baseos, appstream, EPEL.
В базовых образах должна быть возможность использовать пакетный менеджер pip, и возможность им в инфраструктуре сборки
установить пакеты (и все их зависимости): j2cli[yaml]
Сборка образов при помощи Platform V DevOps Tools#
Сборку образов и их выгрузку в репозиторий хранения docker-образов можно выполнить при объединении дистрибутивов
утилитой Platform V DevOps Tools Merger. Для корректной сборки необходимо в конфигурацию Merger добавить
сопоставление имен базовых образов из Dockerfile дистрибутива, с базовыми образами доступными в инфраструктуре, где
производится сборка. При этом используемые базовые образы должны позволять устанавливать пакеты пакетным менеджером(yum,
apt, pip), и содержать внутри:
либо уже установленные требуемые для IAM Proxy пакеты;
либо настроенные репозитории пакетов, доступных в инфраструктуре сборки ( смотрите раздел Сборка базового образа контейнера для IAM Proxy);
либо задать в параметрах
Mergerнастройки пакетных менеджеров на репозитории пакетов, доступных в инфраструктуре сборки (смотрите подраздел "Настройки пакетных менеджеров в параметрах Merger").
Настройка соответствия базовых образов#
В файле настройки Merger (merger.yml) добавить/заменить соответствия в параметре base_image_mapping:
docker:
registry: # координаты реджистри для сборки и загрузки докер-образов
url: https://registry.mycompany.ru
creds: tuz_cd_auth
# путь для загрузки докер-образов
registry_path: platform-v/iam
# маппинг базовых образов
base_image_mapping:
- from: ".*openjdk-11.*"
to: registry.mycompany.ru/base/redhat/ubi/openjdk-11:latest
- from: .*ubi8:.*
to: registry.mycompany.ru/base/redhat/ubi/ubi8:latest
Примечание: Более подробное описание настройки Merger смотрите в документации продукта
Platform V DevOps Tools.
Настройки пакетных менеджеров в параметрах Merger#
В настройках Merger необходимо настроить расширения, которые будут формировать файлы конфигурации пакетных менеджеров,
для этого файле merger.yml добавить:
extensions:
- stage: 'Rebuild_docker' # наименование шага, для которого включается точка расширения
phase: 'before' # этап шага, на котором включается точка расширения
cmd:
- "ls -la $WORKSPACE/solution/auth-bin-*/package/bh/*/packages"
# добавляем репо с пакетами RHEL8
- |
for dir in $WORKSPACE/solution/auth-bin-*/package/bh/*/packages ; do
echo -e '
[RHEL8-baseos]
name=RHEL8-baseos
baseurl=http://registry.mycompany.ru/trusted_repo/rhel/el8/8.4-rhel-8-for-x86_64-baseos-eus-rpms/
gpgcheck=0
enabled=1
[RHEL8-appstream]
name=RHEL8-appstream
baseurl=http://registry.mycompany.ru/trusted_repo/rhel/el8/8.4-rhel-8-for-x86_64-appstream-eus-rpms/
gpgcheck=0
enabled=1
[RHEL8-EPEL]
name=RHEL8-EPEL
baseurl=http://registry.mycompany.ru/trusted_repo/rhel/el8/rhel-extras/EPEL8/
gpgcheck=0
enabled=1
'>$dir/mirror_rhel8_in_dmz.repo
done
# добавляем репо с пакетами питона
- |
for dir in $WORKSPACE/solution/auth-bin-*/package/bh/*/packages ; do
echo -e '
[global]
index_url=https://token:xxxxxxxxxxxxxxxxxxxxxxxxxx@osc.mycompany.ru/osc/repo/pypi/simple
trusted_host=osc.mycompany.ru
default_timeout=200
'>$dir/pip.conf
done
Примечания
Выше указан пример для настройки yum в RHEL8.
При использовании в базовом образе apt, необходимо в примере вместо
mirror_rhel8_in_dmz.repoзадатьmirror_altlinux_in_dmz.list(altlinuxзаменяется на ID ОС из базового образа).
Сборка образов стандартными средствами (без использования инструментов Platform V DevOps Tools)#
Для сборки образа можно использовать скрипт makeDockerImage.sh входящий в состав
дистрибутива (proxy/platformauth-proxy.zip/Docker/makeDockerImage.sh). Данный скрипт по сути запускает по очереди:
docker build ...docker tag ...docker push ...
Распаковать архив
proxy/platformauth-proxy.zipс компонентом прокси в отдельный каталог, на сервере где есть установленныйdockerи есть доступ к репозиториям используемым пакетным менеджером в базовом образе (yum, apt, …) , и к репозиториям пакетов python (pip simple)Перейти в каталог Docker, в том месте куда распаковали ранее архив, и запустить
makeDockerImage.shс указанием в параметрах репозитория для выгрузки образа, и параметров для сборки (дляdocker build)
Параметры сборки#
./makeDockerImage.sh [docker_registry_for_push] [params_for_docker_build ...]
При запуске сборки необходимо будет первым параметром задать репозиторий для выгрузки, а далее указать параметры
для docker build (с ключом --build-arg):
BASE_IMAGE- базовый образ, на котором будет собран IAM Proxy (поддерживаются RHEL8, UBI8, Альт 8 СП) (по умолчанию используетсяubi8)MIRROR_REPO_FILE- ссылка на url, который по http отдает конфиг-файл yum\apt для настроек получения пакетов (по умолчанию используются репозитории из каталога сборкиpackages/*.repo)MIRROR_PIP- ссылка на репозиторий пакетов для python (pip-simple, по умолчанию используются репозиторий из каталога сборкиpackages/pip.conf)
Примечание: При получении данных о репозитории из URL в MIRROR_REPO_FILE или из каталога packages, все репозитории
полученные из базового образа будут предварительно отключены. Если не задан MIRROR_REPO_FILE и нет файлов в
каталоге packages, то репозитории будут использованы из базового образа.
Примеры сборки на разных базовых образах#
Пример под RHEL8:
./makeDockerImage.sh registry.mycompany.ru/platform-v/iam \
--build-arg BASE_IMAGE=registry.mycompany.ru/base/redhat/rhel8:latest \
--build-arg MIRROR_REPO_FILE=http://mirror.mycompany.ru/rhel/conf/mirror_rhel8.repo \
--build-arg MIRROR_PIP=https://token:XXXXXXXXXXXXXXXXXX@osc.mycompany.ru/repo/pypi/simple
Пример под ОС RHEL UBI8:
cat > ../packages/mirror_rhel8.repo <<EOF
[RHEL8-baseos]
name=RHEL8-baseos
baseurl=http://registry.mycompany.ru/repo/rhel8/rhel-8-for-x86_64-baseos-rpms/
gpgcheck=0
enabled=1
[RHEL8-appstream]
name=RHEL8-appstream
baseurl=http://registry.mycompany.ru/repo/rhel8/rhel-8-for-x86_64-appstream-rpms/
gpgcheck=0
enabled=1
[RHEL8-EPEL]
name=RHEL8-EPEL
baseurl=http://registry.mycompany.ru/trusted_repo/rhel/el8/rhel-extras/EPEL8/
gpgcheck=0
enabled=1
EOF
./makeDockerImage.sh registry.mycompany.ru/platform-v/iam \
--build-arg BASE_IMAGE=registry.mycompany.ru/registry_redhat_io/ubi8/ubi8:latest \
--build-arg MIRROR_PIP=https://token:4f9b1b78ad43xxxx7887@mycompany.sw.sbc.space/osc/repo/pypi/simple
Пример под Альт 8 СП(где alt8.mirror.mycompany.ru - пример хоста репозитория пакетов Альт 8 СП):
cat > ../packages/mirror_altlinux8.list <<EOF
rpm [cert8] http://alt8.mirror.mycompany.ru/ c9f2/branch/x86_64 classic
rpm [cert8] http://alt8.mirror.mycompany.ru/ c9f2/branch/x86_64-i586 classic
rpm [cert8] http://alt8.mirror.mycompany.ru/ c9f2/branch/noarch classic
EOF
./makeDockerImage.sh registry.mycompany.ru/platform-v/iam \
--build-arg BASE_IMAGE=mycompany.ru/mycompany-base/gostech/alt-sp8/clean:v0.5.15 \
--build-arg MIRROR_PIP=https://token:XXXXXXXXXXXXXXX@osc.mycompany.ru/osc/repo/pypi/simple
Пример под SberLinux:
cat > ../packages/mirror_sberlinux8.repo <<EOF
[SberLinux8-baseos]
name=SberLinux8-baseos
baseurl=http://registry.mycompany.ru/repo/sberlinux8/sberlinux-8-for-x86_64-baseos-rpms/
gpgcheck=0
enabled=1
[SberLinux8-appstream]
name=SberLinux8-appstream
baseurl=http://registry.mycompany.ru/repo/sberlinux8/sberlinux-8-for-x86_64-appstream-rpms/
gpgcheck=0
enabled=1
[SberLinux8-EPEL]
name=SberLinux8-EPEL
baseurl=http://registry.mycompany.ru/repo/rhel-extras/EPEL8/
gpgcheck=0
enabled=1
EOF
./makeDockerImage.sh registry.mycompany.ru/platform-v/iam \
--build-arg BASE_IMAGE=registry.mycompany.ru/repo/sberlinux8/sberlinux8:latest \
--build-arg MIRROR_PIP=https://token:XXXXXXXXXXXXXXXXXXX@osc.mycompany.ru/osc/repo/pypi/simple