2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenShiftAdvent Calendar 2023

Day 22

RedHatエコシステムカタログへのコンテナアプリケーション登録手順のメモ

Last updated at Posted at 2023-12-25

はじめに

Red Hat Ecosystem Catalogに自社製品をOpenShift Containerとして登録する機会がありました。
基本的には公式ガイドの通りですが、実際にやってみてサポートを受ける内容もありましたので、自分も含め今後迷わないようにメモを残します。

Red Hat Technology Partnerカウントの作成

Ecosystem Catalogへの登録にTechnology Partnerのアカウントが必要です。
このガイドの手順で作成します。
最初の画面は、下記のメニューから飛んだ先です。
image.png

公開用コンテナイメージの準備

公開するコンテナイメージは、認定要件に準拠する必要があります。
クリアしていない項目があると、後で行う認定テストスイートをパスできません。
各項目への具体的な対応内容を下記に記載します。

  • 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のページから新規プロジェクトを作成します。
    image.png
    image.png

  • プラットフォームはRed Hat OpenShift、Container imageを選択します。
    image.png
    image.png

  • OSはRed Hat UBI、Distribution MethodはRed Hat Container Registryを選択します。
    image.png

レジストリ情報の設定

レジストリ情報をこのガイド内容に合わせて設定します。
ガイドそのままなので問題は無いと思います。

輸出コンプライアンスアンケートへの回答

米国輸出規制に対する質問があり、回答を記入します。
承認まで時間がかかるため、先行して記入しておくことをお勧めします。

コンテナレジストリへの登録

次に行う認定テストスイートのため、作成したコンテナイメージをパブリックなレジストリ上に配置する必要があります。
ただし、AWS ECR(AWSのコンテナレジストリ)では問題があるためQuay.ioの使用を強く推奨します。
私の環境では、公開まではできるのですが、pullできないという問題が発生しました。

  • Quay.ioへの登録&ログイン
    これまでに作成したRedHatアカウントでもログインできました。
  • リポジトリの作成
    後に行うpush時に自動で作成されますので、特に作成不要です。
    Webから予め作っておくとも可能です。
  • コンテナイメージのPush
    複数のバージョン(1.0.0とlatest)と複数のアーキテクチャをタグ付けしてpushするため、スクリプトを作りました。また、マルチアーキテクチャ対応のため、マニフェストの作成を合わせて行います。
    変数は適宜設定してください。
push_quayio.sh
#/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
  • Pushしたコンテナイメージを確認
    Quay.ioのコンソールで、コンテナイメージがpushできていることを確認します。
    image.png

認定テストスイートの実施

認定テストをこのガイドに沿って実施します。
認定テストを行うにあたり、下記の事前準備が必要です。

  • 認定ユーティリティー(preflight)の取得
    RHEL上で、 ココから最新版を取得し展開します。
    実行時には必ず最新版を使うことをお勧めします。サーバー側との不整合により、結果がおかしくなることがありました。
  • APIトークンの取得
    右上のMy AccouuntからMy user profileに飛び、
    image.png
    API KeysのタブからGenerate new keyで作成します。
    image.png
  • プロジェクトIDの取得
    URLかProjectのOverviewから取得します。
    赤矢印部分に表示される後半の数値です。
    image.png

事前準備が終われば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できるようになります。
image.png

と、言いたいところですが、
製品リストの登録がまだの場合は、ココの手順で製品登録を行い、今回のプロジェクトを紐づける必要があります。

最後に

podmanではなくてすみません。。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?