こんにちは、ISVパートナー担当SAの森須です。
今回は新しいコンテナ認定ツールPreflightについてご紹介します。
ツールの説明に入る前にRed Hatが提供する技術認定について簡単に説明しておきます。 プラットフォームに関連するソフトウェア技術認定としてRed Hat Enterprise Linux software certification、Red Hat Container Certification、Red Hat OpenShift Certification、Red Hat OpenStack Platform Certificationが提供されており、技術認定を取得することでISVパートナーは下記のベネフィットを得ることができます。 ISVパートナー様、ISVパートナー候補の皆様ぜひRed Hatの技術認定取得のご検討頂けますと幸いです。
- 一度構築すれば、ベアメタル、仮想化、パブリックおよびプライベートのクラウドインフラストラクチャ全体に展開でき、可搬性の高い製品を提供することができます。
- Red Hatの専門知識を新しい製品開発で活用して、リスクを低減しながらイノベーションに時間をかけることができます。
- Red HatとTSANet上での共同サポート体制を構築することにより、顧客からの信頼を高めることができます。
- Red Hatエコシステムカタログへの掲載とプロモーションを通じて、市場での認知向上と顧客の需要を掘り起こすことが出来ます。
それでは本題に入ります。
今回ご紹介するPreflightは主にRed Hat Container CertificationとRed Hat OpenShift Certificationの取得プロセスの中で使用されるセルフテストツールとなります。
先ずはなぜ新しいツールが開発されたのか?何が変わったのか?について説明します。
What’s new?
- パートナーエクスペリエンスを向上させるために、2022年4月25日に従来の認定スキャンシステムはPreflightに置き換わります。
- Preflightをダウンロードし、お持ちのコンピューターで認定テストを実行できます。必要なのは、Red Hat Enterprise Linux(RHEL)オペレーティングシステムと、認証するコンテナイメージへのアクセスだけです。新しいツールを使用すると、最終的な認証スキャンのためにイメージをRed Hatに送信する前に、コンテナーテストを実行し結果を確認することができます。また、事前に既知のセキュリティの脆弱性についてイメージをチェックすることが出来ます。
- 自分のデバイスでコンテナテストを実施する主な利点の1つは、結果をリアルタイムで確認できることです。結果をRed Hatに正式に送信する前に、イメージを修正または変更することが容易になります。これにより、時間、およびリソースが節約され、効率的に認定テストプロセスを進めることが出来ます。
- CI / CD(継続的インテグレーション、配信、および展開)ワークフローに認定テストを統合することが可能になります。この統合を構築にするために、Preflightを使用すると、独自の環境でコンテナーをテストでき、認証パイプラインとテストの可視性と制御が向上します。
次は、Preflightを実行するための環境と準備についてです。
- テスト対象のコンテナイメージをアップロードするためのコンテナレジストリ(Quay.ioなど)
- Podmanを使用可能なRedHatEnterpriseLinux環境
- PartnerConnectオンラインポータルのアカウントおよびコンテナイメージ認定プロジェクトの作成
- 公式の認定ドキュメントにある要件と手順の理解
次は、インストールです。
インストールする前にpreflightに必要な下記ソフトウェアがインストール済みでパスが通っていることを確認してください。
- v1.14.0以降のOperatorSDK
- v4.7.19以降のOpenShiftクライアント
確認が取れましたら、各アーキテクチャごとにビルド済みのバイナリが用意されていますので、ダウンロードしてパスが通った場所へコピーしてください。
インストールは以上で完了です。
次に、コンテナイメージを作成してpreflightで確認してみます。 以下がpreflightでのテストとその準備の流れになります。
- podman loginコマンドでコンテナリポジトリにログイン
- 作業ディレクトリを作成し、ディレクトリ内にDockerfileとライセンスファイルを作成
- 作業ディレクトリ内でpodman buildコマンド実行しUBIをベースイメージとしたコンテナイメージをビルド
- podman push コマンドでコンテナイメージを指定したコンテナリポジトリへアップロード
- preflight check container コマンドで指定したコンテナリポジトリからイメージを取得してテストを実行
以下は上記で説明したコマンドの実行例です
# podman login quay.io/preflight-test
作業ディレクトリを作成し、ディレクトリ内にDockerfileとライセンスファイルを作成。
空ファイルでライセンスファイルを作るとテストをパスできないので注意してください。
作成したDockerfileの例
RUN useradd preflightuser
COPY --chown=preflightuser:preflightuser example-license.txt /licenses/
LABEL name="preflight test image" \
vendor="preflight test vendor" \
version="1" \
release="1" \
summary="testing the preflight tool" \
description="test the preflight tool"
USER preflightuser
# podman build -t quay.io/preflight-test/test-ubi:test02 .
# podman push quay.io/preflight-test/test-ubi:test02
# preflight check container quay.io/preflight-test/test-ubi:test02
最後にPreflightでテストされる項目について説明します。
- LayerCountAcceptable コンテナイメージの階層が40レイヤー未満であることを確認します。
階層数はpodman historyコマンドで確認できます。 - HasNoProhibitedPackages コンテナイメージにRHELカーネルパッケージが含まれていないことを確認します。
- HasRequiredLabel コンテナイメージに指定されたラベルが設定されていることを確認します。
設定方法についてはDockerfileの例を参考にしてください。 - RunAsNonRoot コンテナーがrootユーザーとして実行されていないことを確認します。
- BasedOnUbi UBIがベースイメージとして使用されていることを確認します。
- HasModifiedFiles コンフィグファイルなど変更が認められているもの以外が変更されていないことを確認します。
- HasLicense コンテナイメージに「ライセンス」ディレクトリが含まれていることを確認します。
設定方法についてはDockerfileの例を参考にしてください。 - HasUniqueTag コンテナイメージには「latest」以外のタグが付いていることを確認します。
今回はここまでとなります。
次回はPreflightでオペレーターバンドルをチェックする方法を説明します。