はじめに
Red Hat Ecosystem Catalogに自社製品をOpenShift Containerとして登録する機会がありました。
基本的には公式ガイドの通りですが、実際にやってみてサポートを受ける内容もありましたので、自分も含め今後迷わないようにメモを残します。
Red Hat Technology Partnerカウントの作成
Ecosystem Catalogへの登録にTechnology Partnerのアカウントが必要です。
このガイドの手順で作成します。
最初の画面は、下記のメニューから飛んだ先です。
公開用コンテナイメージの準備
公開するコンテナイメージは、認定要件に準拠する必要があります。
クリアしていない項目があると、後で行う認定テストスイートをパスできません。
各項目への具体的な対応内容を下記に記載します。
- RunAsNonRoot
Dockerfileの"USER"定義で、root以外のユーザを指定して動作するようにする。 - HasModifiedFiles
ベースレイヤーの削除や圧縮、/usr/libなどを上書きをしない。 - HasLicense
ソフトウェアの使用許諾を記載したテキストファイルを、"/licenses"ディレクトリに配置し、フォルダとファイルのオーナーを"preflightuser"にする。 - LayerCountAcceptable
レイヤー数を40未満にする。 - HasNoProhibitedPackages
UBIを使っている限り問題なし? - HasRequiredLabel
Dockerfileに、この要件のラベルを定義します。 - 重要・重大な脆弱性のあるコンポートネントが含まれていない
最新のUBIを使っている限り問題なし?
補足:以降の説明にも影響してきますが、都合によりコンテナを、container-image-amd64、container-image-arm64、のように、アーキテクチャ毎に用意しています。
プロジェクトの作成
Ecosystem Catalogに公開するプロジェクトを作成します。
-
Certified Technology Portalにログインし、Certification projectsのページから新規プロジェクトを作成します。
-
OSはRed Hat UBI、Distribution MethodはRed Hat Container Registryを選択します。
レジストリ情報の設定
レジストリ情報をこのガイド内容に合わせて設定します。
ガイドそのままなので問題は無いと思います。
輸出コンプライアンスアンケートへの回答
米国輸出規制に対する質問があり、回答を記入します。
承認まで時間がかかるため、先行して記入しておくことをお勧めします。
コンテナレジストリへの登録
次に行う認定テストスイートのため、作成したコンテナイメージをパブリックなレジストリ上に配置する必要があります。
ただし、AWS ECR(AWSのコンテナレジストリ)では問題があるためQuay.ioの使用を強く推奨します。
私の環境では、公開まではできるのですが、pullできないという問題が発生しました。
- Quay.ioへの登録&ログイン
これまでに作成したRedHatアカウントでもログインできました。 - リポジトリの作成
後に行うpush時に自動で作成されますので、特に作成不要です。
Webから予め作っておくとも可能です。 - コンテナイメージのPush
複数のバージョン(1.0.0とlatest)と複数のアーキテクチャをタグ付けしてpushするため、スクリプトを作りました。また、マルチアーキテクチャ対応のため、マニフェストの作成を合わせて行います。
変数は適宜設定してください。
#/bin/bash
# Quay.ioにpushするスクリプト
# Quay.ioアクセス設定
QUAYIO_USER="quayio_user"
QUAYIO_PASSWORD="quayio_password"
QUAYIO_REPONAME="quayio_reponame"
# コンテナイメージとアーキテクチャを指定
IMAGE_BASENAME="container-image"
IMAGE_ARCS=("amd64" "arm64")
# pushするタグのバージョンを指定
TAG_VERSIONS=("1.0.0" "latest")
# ログイン
docker login -u ${QUAYIO_USER} -p ${QUAYIO_PASSWORD} quay.io
# バージョン指定分ループ
for TAG_VER in ${TAG_VERSIONS[@]}
do
echo start:${TAG_VER}
# タグ付けしてpush
for ((idx=0;idx<${#IMAGE_ARCS[@]};idx++))
do
docker tag ${IMAGE_BASENAME}-${IMAGE_ARCS[idx]}:latest quay.io/${QUAYIO_USER}/${QUAYIO_REPONAME}:${TAG_VER}-${DGW_IMAGEARCS[idx]}
docker push quay.io/${QUAYIO_USER}/${QUAYIO_REPONAME}:${TAG_VER}-${DGW_IMAGEARCS[idx]}
docker rmi quay.io/${QUAYIO_USER}/${QUAYIO_REPONAME}:${TAG_VER}-${DGW_IMAGEARCS[idx]}
done
# マニフェスト作成
CREATESTR=""
for ((idx=0;idx<${#IMAGE_ARCS[@]};idx++))
do
CREATESTR+=" quay.io/${QUAYIO_USER}/${QUAYIO_REPONAME}:${TAG_VER}-${DGW_IMAGEARCS[idx]}"
done
docker manifest create --amend quay.io/${QUAYIO_USER}/${QUAYIO_REPONAME}:${TAG_VER}${CREATESTR}
# アノテーション
for ((idx=0;idx<${#IMAGE_ARCS[@]};idx++))
do
docker manifest annotate --arch ${DGW_IMAGEARCS[idx]} quay.io/${QUAYIO_USER}/${QUAYIO_REPONAME}:${TAG_VER} \
quay.io/${QUAYIO_USER}/${QUAYIO_REPONAME}:${TAG_VER}-${DGW_IMAGEARCS[idx]}
done
docker manifest push -p quay.io/${QUAYIO_USER}/${QUAYIO_REPONAME}:${TAG_VER}
echo end:${TAG_VER}
done
# ログアウト
docker logout quay.io
認定テストスイートの実施
認定テストをこのガイドに沿って実施します。
認定テストを行うにあたり、下記の事前準備が必要です。
- 認定ユーティリティー(preflight)の取得
RHEL上で、 ココから最新版を取得し展開します。
実行時には必ず最新版を使うことをお勧めします。サーバー側との不整合により、結果がおかしくなることがありました。 - APIトークンの取得
右上のMy AccouuntからMy user profileに飛び、
API KeysのタブからGenerate new keyで作成します。
- プロジェクトIDの取得
URLかProjectのOverviewから取得します。
赤矢印部分に表示される後半の数値です。
事前準備が終わればpreflightを実行します。
変数は適宜置き換えてください。
$./preflight check container quay.io/${QUAYIO_USER}/${QUAYIO_REPONAME}:${TAG_VERSIONS[0]} --submit --pyxis-api-token=${API_TOKEN} --certification-project-id=${PROJECT_ID}
$./preflight check container quay.io/${QUAYIO_USER}/${QUAYIO_REPONAME}:${TAG_VERSIONS[1]} --submit --pyxis-api-token=${API_TOKEN} --certification-project-id=${PROJECT_ID}
コンテナイメージの公開
認定テストスイート(preflight check)のチェックをパスし、チェックリストのタスクをすべて終えるとPublishできるようになります。
と、言いたいところですが、
製品リストの登録がまだの場合は、ココの手順で製品登録を行い、今回のプロジェクトを紐づける必要があります。
最後に
podmanではなくてすみません。。