概念実証 (実稼働以外) 向けの Red Hat Quay のデプロイ

Red Hat Quay 3.5

Red Hat Quay のデプロイ

概要

Red Hat Quay の使用開始

序文

Red Hat Quay は、コンテナーイメージをビルドし、セキュリティー保護し、これを提供するためのエンタープライズ品質のレジストリーです。この手順では、概念実証用 (非実稼働)目的で Red Hat Quay をデプロイする方法を説明します。

第1章 概要

Red Hat Quay の機能には以下が含まれます。

  • 高可用性
  • Geo-replication
  • リポジトリーのミラーリング
  • Docker v2、スキーマ 2 (multiarch) のサポート
  • 継続的インテグレーション
  • Clair によるセキュリティースキャン
  • カスタムログのローテーション
  • ダウンタイムなしのガベージコレクション
  • 24 時間年中無休のサポート

Red Hat Quay は以下のサポートを提供します。

  • 複数の認証およびアクセス方法
  • 複数のストレージバックエンド
  • Quay、Clair、およびストレージバックエンドのカスタム証明書
  • アプリケーションレジストリー
  • コンテナーイメージの複数の異なるタイプ

1.1. アーキテクチャー

Red Hat Quay は、内外の多数のコアコンポーネントで構成されます。

1.1.1. 内部コンポーネント

  • Quay(コンテナーレジストリー): Pod の複数のコンポーネントで構成される Quay コンテナーをサービスとして実行します。
  • Clair: コンテナーイメージで脆弱性の有無をスキャンし、修正を提案します。

1.1.2. 外部コンポーネント

  • データベース: Red Hat Quay で、プライマリーメタデータストレージとして使用されます。これはイメージストレージ用ではないことに注意してください。
  • Redis (key-value ストア): ライブビルダーログおよび Red Hat Quay チュートリアルを保存します。
  • クラウドストレージ: サポートされるデプロイメントでは、以下のストレージタイプのいずれかを使用する必要があります。

    • パブリッククラウドストレージ: パブリッククラウド環境では、Amazon Web Services の Amazon S3 や Google Cloud の Google Cloud Storage などのクラウドプロバイダーのオブジェクトストレージを使用する必要があります。
    • プライベートクラウドストレージ: プライベートクラウドでは、Ceph RADOS や OpenStack Swift などの S3 または Swift 準拠のオブジェクトストアが必要です。
警告

実稼働環境の設定に「ローカルマウントされたディレクトリー」のストレージエンジンを使用しないでください。マウントされた NFS ボリュームはサポートされません。ローカルストレージは Red Hat Quay のテスト専用のインストールに使用されることが意図されています。

第2章 Red Hat Quay の使用開始

Red Hat Quay レジストリーは、以下の仕様を使用して、単一のマシン (物理または仮想) で実稼働以外の目的でデプロイできます。

2.1. 前提条件

  • Red Hat Enterprise Linux (RHEL): ダウンロードページから最新の Red Hat Enterprise Linux 8 サーバーメディアを取得し、 Red Hat Enterprise Linux 8 の製品ドキュメンテーションにあるインストール手順に従います。
  • 有効な Red Hat サブスクリプション: 有効な Red Hat Enterprise Linux 8 サーバーのサブスクリプションを設定します。
  • CPU: 2 つ以上の仮想 CPU
  • RAM: 4GB 以上
  • ディスク領域: 必要なディスク領域は、レジストリーのストレージのニーズによって異なります。テストシステムには、約 30 GB のディスク領域があれば十分です (以下は内訳です)。

    • オペレーティングシステム (Red Hat Enterprise Linux Server) 用に少なくとも 10GB のディスク領域
    • 10GB 以上: docker ストレージ用のディスク容量 (3 つのコンテナーを実行するために必要)
    • Quay ローカルストレージ用に少なくとも 10 GB のディスク領域。CEPH またはその他のローカルストレージではさらにメモリーが必要となる可能性があることに注意してください。

サイジングについての詳細は Quay 3.x Sizing Guidlines を参照してください。

2.1.1. podman の使用

本書では、コンテナーを作成し、デプロイするために podman を使用します。システムに podman がインストールされていない場合は、同等の docker コマンドを使用できる必要があります。podman および関連技術の詳細は、『Building, running, and managing Linux containers on Red Hat Enterprise Linux 8』を参照してください。

2.2. Red Hat Enterprise Linux サーバーの設定

2.2.1. RHEL サーバーのインストールおよび登録

  1. 最新の RHEL 8 サーバーをインストールします。最小インストール(シェルアクセスのみ) を実行するか、または「Server plus GUI」(デスクトップが必要な場合) を実行できます。
  2. How to register and subscribe a system…​」で説明されているように RHEL サーバーシステムを登録し、これをサブスクライブします。
  3. 以下のコマンドを使用して、システムを登録し、利用可能なサブスクリプションを一覧表示します。利用可能な RHEL サーバーサブスクリプションを選択し、プール ID に割り当て、最新のソフトウェアにアップグレードします。

    # subscription-manager register --username=<user_name> --password=<password>
    # subscription-manager refresh
    # subscription-manager list --available
    # subscription-manager attach --pool=<pool_id>
    # yum update -y

2.2.2. podman のインストール

  • podman を、システムにインストールされていない場合はインストールします。

    $ sudo yum install -y podman
  • または、コンテナーソフトウェアパッケージの完全なセットをプルする container-tools モジュールをインストールできます。

    $ sudo yum module install -y container-tools

2.2.3. レジストリー認証

  • Red Hat Container Registry Authentication」で説明されているように、Quay コンテナーをプルできるように、registry.redhat.io に対して認証をセットアップします。これは、イメージが quay.io でホストされる以前の Red Hat Quay リリースとは異なることに注意してください。

    以下のコマンドを使用してレジストリーにログインできます。

    $ sudo podman login registry.redhat.io
    Username: <username>
    Password: <password>

2.2.4. ファイアウォールの設定

  • システムでファイアウォールを実行している場合は、Red Hat Quay へのアクセスが許可されるルールを追加する必要がある場合があります。必要なコマンドは、マップされたポートによって異なります。以下に例を示します。

    $ firewall-cmd --permanent --add-port=80/tcp
    $ firewall-cmd --permanent --add-port=443/tcp
    $ firewall-cmd --permanent --add-port=5432/tcp
    $ firewall-cmd --permanent --add-port=5433/tcp
    $ firewall-cmd --permanent --add-port=6379/tcp
    $ firewall-cmd --reload

2.2.5. IP アドレスおよび命名サービス

Red Hat Quay でコンポーネントのコンテナーを設定し、それらが相互に通信できるようにする方法は多数あります。

  • コンテナーの IP アドレスの使用: podman inspect でコンテナーの IP アドレスを判別してから、接続文字列を指定する際に設定ツールでこれらの値を使用します。以下は例になります。

    $ sudo podman inspect -f "{{.NetworkSettings.IPAddress}}" postgresql-quay

    この方法は、コンテナーの IP アドレスが再起動後に変更されるためにホストの再起動の影響を受けます。

  • 命名サービスの使用: (通常は IP アドレスの変更が生じる) コンテナーの再起動後もデプロイメントを維持する必要がある場合は、命名サービスを実装できます。たとえば、dnsname プラグインは、コンテナーが名前で相互を解決できるように使用されます。
  • ホストネットワークの使用: podman run コマンドを --net=host オプションを使用して使用してから、アドレスを設定に指定する際にホストでコンテナーのポートを使用できます。このオプションを使用すると 2 つのコンテナーが同じポートを使用しようとする場合にポートの競合が生じるため、このオプションは推奨されません。
  • ポートマッピングの設定: ポートマッピングを使用してホストでポートを公開し、これらのポートをホスト IP アドレスまたはホスト名と組み合わせて使用できます。

本書では、ポートマッピングを使用し、ホストシステムの静的 IP アドレスを使用することを前提としています。このデプロイメントでは、システムの IP アドレス 192.168.1.112quay-server.example.com を使用し、/etc/hosts ファイルでこの情報を設定します。

$ cat /etc/hosts
...
192.168.1.112   quay-server.example.com
コンポーネントポートマッピングアドレス

Quay

-p 80:8080 -p 443:8443

http://quay-server.example.com

Postgres for Quay

-p 5432:5432

quay-server.example.com:5432

Redis

-p 6379:6379

quay-server.example.com:6379

Postgres for Clair V4

-p 5433:5432

quay-server.example.com:5433

Clair V4

-p 8081:8080

http://quay-server.example.com:8081

2.3. データベースの設定

Quay にはメタデータを格納するためのデータベースが必要です。Postgres は本書全体で使用され、高可用性設定での使用が推奨されています。また、以下で説明されている設定と同様の方法で MySQL を使用できます。

2.3.1. Postgres のセットアップ

この概念実証のシナリオでは、ローカルファイルシステムのディレクトリーを使用してデータベースデータを永続化します。

  1. ここでは $QUAY 変数で示されるインストールフォルダーで、データベースデータのディレクトリーを作成し、パーミッションを適切に設定します。

    $ mkdir -p $QUAY/postgres-quay
    $ setfacl -m u:26:-wx $QUAY/postgres-quay
  2. データベースデータのボリューム定義と共にユーザー名、パスワード、データベース名、ポートを指定して、podman run を使用して Postgres コンテナーを起動します。

    $ sudo podman run -d --rm --name postgresql-quay \
      -e POSTGRESQL_USER=quayuser \
      -e POSTGRESQL_PASSWORD=quaypass \
      -e POSTGRESQL_DATABASE=quay \
      -e POSTGRESQL_ADMIN_PASSWORD=adminpass \
      -p 5432:5432 \
      -v $QUAY/postgres-quay:/var/lib/pgsql/data:Z \
      registry.redhat.io/rhel8/postgresql-10:1
  3. Quay で必要な Postgres pg_trgm モジュールがインストールされていることを確認します。

    $ sudo podman exec -it postgresql-quay /bin/bash -c 'echo "CREATE EXTENSION IF NOT EXISTS pg_trgm" | psql -d quay -U postgres'

2.4. Redis の設定

Redis は、ライブビルダーログおよび Red Hat Quay チュートリアル用に Quay によって使用される key-value ストアです。

2.4.1. Redis のセットアップ

  • ポートとパスワードを指定して、podman run を使用して Redis を起動します。

    $ sudo podman run -d --rm --name redis \
      -p 6379:6379 \
      -e REDIS_PASSWORD=strongpassword \
      registry.redhat.io/rhel8/redis-5:1

2.5. Red Hat Quay の設定

Red Hat Quay サービスを実行する前に、レジストリー設定、データベース、および Redis 接続パラメーターを含むすべてのコンポーネントの詳細を示す設定ファイルを生成する必要があります。

  1. 設定ファイルを生成するには、文字列 secret などのパスワードを指定して、config モードで Quay コンテナーを実行します。

    $ sudo podman run --rm -it --name quay_config -p 80:8080 -p 443:8443 registry.redhat.io/quay/quay-rhel8:v3.5.4 config secret
  2. ブラウザーを使用して、http://quay-server.example.com で設定ツールのユーザーインターフェースにアクセスします。本書では、quay-server.example.com ホスト名を /etc/hosts ファイルに設定していることに留意してください。
  3. ユーザー名 quayconfig およびパスワード secret (または上記の podman run コマンドで指定した値) を使用してログインします。

2.5.1. Red Hat Quay のセットアップ

設定エディターで、以下の情報を入力します。

  • 基本設定
  • サーバー設定
  • データベース
  • Redis

2.5.1.1. 基本設定

基本的な設定設定で、レジストリーのタイトルおよびレジストリーの短いタイトルフィールドに入力します。デフォルト値が設定されていれば、そのデフォルト値を使用できます。

2.5.1.2. サーバー設定

レジストリーにアクセスできるネットワーク上の場所について HTTP ホストおよびポートを指定します。本書の手順に従っている場合は、quay-server.example.com を入力します。

2.5.1.3. データベース

データベースセクションで、Red Hat Quay がメタデータを保存するために使用するデータベースの接続の詳細を指定します。本書の手順に従って概念実証用のシステムをデプロイする場合は、以下の値を入力します。

  • Database Type: Postgres
  • Database Server: quay-server.example.com:5432
  • Username: quayuser
  • Password: quaypass
  • Database Name: quay

2.5.1.4. Redis

Redis のキー/値ストアは、リアルタイムイベントとビルドログを保存するために使用されます。本書の手順に従って概念実証用のシステムをデプロイする場合は、以下の値を入力します。

  • Redis Hostname: quay-server.example.com
  • Redis port: 6379 (default)
  • Redis password: strongpassword

2.5.2. 設定の検証およびダウンロード

すべての必須フィールドが設定されたら、 Validate Configuration Changes ボタンを選択して、設定を検証します。エラーが報告される場合、すべての必須フィールドが有効となり、Red Hat Quay がデータベースおよび Redis サーバーに接続できるまで、設定の編集を継続します。

設定が有効である場合、configuration ファイルをダウンロードします。設定エディターを実行している Quay コンテナーを停止します。

2.6. Red Hat Quay のデプロイ

2.6.1. 前提条件

  • Quay データベースおよび Redis サーバーが実行中である。
  • 有効な設定バンドルを生成している。
  • 設定エディターの実行に使用した Quay コンテナーを停止している。

2.6.2. 設定フォルダーの準備

  • 設定バンドルを展開し、Quay がこれを使用できるようにします。

    $ mkdir $QUAY/config
    $ cp ~/Downloads/quay-config.tar.gz $QUAY/config
    $ cd $QUAY/config
    $ tar xvf quay-config.tar.gz

2.6.3. イメージデータ用のローカルストレージの準備

  • この概念実証用のデプロイメントでは、ローカルファイルシステムを使用してレジストリーイメージを保存します。

    $ mkdir $QUAY/storage
    $ setfacl -m u:1001:-wx $QUAY/storage

2.6.4. Red Hat Quay 設定のデプロイ

  • podman run を使用して Quay コンテナーを起動します。設定データ用の適切なボリュームを指定し、イメージデータのローカルストレージを指定します。

    $ sudo podman run -d --rm -p 80:8080 -p 443:8443  \
       --name=quay \
       -v $QUAY/config:/conf/stack:Z \
       -v $QUAY/storage:/datastorage:Z \
       registry.redhat.io/quay/quay-rhel8:v3.5.4

2.7. Red Hat Quay の使用

以下の手順を実行すると、ユーザーインターフェースを使用して、新しい組織およびリポジトリーを作成し、既存のリポジトリーを検索および参照できます。手順 3 の後に、コマンドラインインターフェースを使用してレジストリーと対話し、イメージのプルおよびプッシュを実行できます。

  1. ブラウザーを使用して、http://quay-server.example.com で Red Hat Quay レジストリーのユーザーインターフェースにアクセスします (quay-server.example.com/etc/hosts ファイルのホスト名として設定していることを前提とします)。
  2. Create Account をクリックし、ユーザーを追加します (例: quayadmin とパスワード password)。
  3. コマンドラインで、レジストリーにログインします。

    $ sudo podman login --tls-verify=false quay-server.example.com
    Username: quayadmin
    Password: password
    Login Succeeded!

2.7.1. イメージのプッシュおよびプル

  1. Red Hat Quay レジストリーを使用したイメージのプッシュおよびプルをテストするには、まず外部レジストリーからサンプルイメージをプルします。

    $ sudo podman pull busybox
    Trying to pull docker.io/library/busybox...
    Getting image source signatures
    Copying blob 4c892f00285e done
    Copying config 22667f5368 done
    Writing manifest to image destination
    Storing signatures
    22667f53682a2920948d19c7133ab1c9c3f745805c14125859d20cede07f11f9
  2. podman images コマンドを使用して、ローカルコピーを表示します。

    $ sudo podman images
    REPOSITORY                          TAG      IMAGE ID       CREATED         SIZE
    docker.io/library/busybox           latest   22667f53682a   14 hours ago    1.45 MB
    ...
  3. このイメージにタグを付け、これを Red Hat Quay レジストリーにプッシュできるようにします。

    $ sudo podman tag docker.io/library/busybox quay-server.example.com/quayadmin/busybox:test
  4. 次に、イメージを Red Hat Quay レジストリーにプッシュします。この手順の後に、ブラウザーを使用して、リポジトリーでタグ付けされたイメージを確認できます。

    $ sudo podman push --tls-verify=false quay-server.example.com/quayadmin/busybox:test
    Getting image source signatures
    Copying blob 6b245f040973 done
    Copying config 22667f5368 done
    Writing manifest to image destination
    Storing signatures
  5. コマンドラインでイメージへのアクセスをテストするには、最初にイメージのローカルコピーを削除します。

    $ sudo podman rmi quay-server.example.com/quayadmin/busybox:test
    Untagged: quay-server.example.com/quayadmin/busybox:test
  6. 今度は Red Hat Quay レジストリーからイメージを再度プルします。

    $ sudo podman pull --tls-verify=false quay-server.example.com/quayadmin/busybox:test
    Trying to pull quay-server.example.com/quayadmin/busybox:test...
    Getting image source signatures
    Copying blob 6ef22a7134ba [--------------------------------------] 0.0b / 0.0b
    Copying config 22667f5368 done
    Writing manifest to image destination
    Storing signatures
    22667f53682a2920948d19c7133ab1c9c3f745805c14125859d20cede07f11f9

第3章 Red Hat Quay の高度なデプロイメント

3.1. SSL を使用した Red Hat Quay への接続の保護

3.1.1. SSL の使用について

自己署名証明書で Red Hat Quay を設定するには、認証局 (CA) を作成し、必要なキーおよび証明書ファイルを生成する必要があります。

以下の例では、/etc/hosts ファイルにエントリーを追加するなど、DNS または別の命名メカニズムを使用してサーバーホスト名 quay-server.example.com を設定していることを前提としています。

$ cat /etc/hosts
...
192.168.1.112   quay-server.example.com

3.1.2. 認証局を作成し、証明書に署名します。

この手順の最後に、証明書ファイルと、ssl.cert および ssl.key という名前のプライマリーキーファイルがあります。

3.1.2.1. 認証局の作成

  1. ルート CA キーを生成します。

    $ openssl genrsa -out rootCA.key 2048
  2. ルート CA 証明書を生成します。

    $ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
  3. サーバーのホスト名など、証明書の要求に組み込まれる情報を入力します。以下に例を示します。

    Country Name (2 letter code) [XX]:IE
    State or Province Name (full name) []:GALWAY
    Locality Name (eg, city) [Default City]:GALWAY
    Organization Name (eg, company) [Default Company Ltd]:QUAY
    Organizational Unit Name (eg, section) []:DOCS
    Common Name (eg, your name or your server's hostname) []:quay-server.example.com

3.1.2.2. 証明書に署名します。

  1. サーバーキーを生成します。

    $ openssl genrsa -out ssl.key 2048
  2. 署名要求を生成します。

    $ openssl req -new -key ssl.key -out ssl.csr
  3. サーバーのホスト名など、証明書の要求に組み込まれる情報を入力します。以下に例を示します。

    Country Name (2 letter code) [XX]:IE
    State or Province Name (full name) []:GALWAY
    Locality Name (eg, city) [Default City]:GALWAY
    Organization Name (eg, company) [Default Company Ltd]:QUAY
    Organizational Unit Name (eg, section) []:DOCS
    Common Name (eg, your name or your server's hostname) []:quay-server.example.com
  4. 以下のようにサーバーのホスト名を指定して、設定ファイルの openssl.cnf を作成します。

    opensssl.cnf

    [req]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = quay-server.example.com
    IP.1 = 192.168.1.112

  5. 設定ファイルを使用して、証明書 ssl.cert を生成します。

    $ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnf

3.1.3. UI を使用した SSL の設定

このセクションでは、Quay UI を使用して SSL を設定します。コマンドラインインターフェースを使用して SSL を設定するには、以下のセクションを参照してください。

  1. Quay コンテナーを設定モードで起動します。

    $ sudo podman run --rm -it --name quay_config -p 80:8080 -p 443:8443 registry.redhat.io/quay/quay-rhel8:v3.5.4 config secret
  2. Server Configuration セクションで、TLS に Red Hat Quay handle TLS を選択します。先に作成した証明書ファイルとプライベートキーファイルをアップロードし、証明書の作成時に Server Hostname が使用された値と一致することを確認します。更新された設定の検証およびダウンロード
  3. Quay コンテナーを停止し、レジストリーを再起動します。

    $ sudo podman rm -f quay
    $ sudo podman run -d --rm -p 80:8080 -p 443:8443 \
    --name=quay \
    -v $QUAY/config:/conf/stack:Z \
    -v $QUAY/storage:/datastorage:Z \
    registry.redhat.io/quay/quay-rhel8:v3.5.4

3.1.4. コマンドラインを使用した SSL の設定

別のオプションとして、コマンドラインインターフェースを使用できます。

  1. 証明書ファイルとプライマリーキーファイルを設定ディレクトリーにコピーして、それぞれ ssl.certssl.key という名前が付けられていることを確認します。

    $ cp ~/ssl.cert $QUAY/config
    $ cp ~/ssl.key $QUAY/config
    $ cd $QUAY/config
  2. config.yaml ファイルを編集し、Quay で TLS を処理できるように指定します。

    config.yaml

    ...
    SERVER_HOSTNAME: quay-server.example.com
    ...
    PREFERRED_URL_SCHEME: https
    ...

  3. Quay コンテナーを停止し、レジストリーを再起動します。

    $ sudo podman rm -f quay
    $ sudo podman run -d --rm -p 80:8080 -p 443:8443 \
      --name=quay \
      -v $QUAY/config:/conf/stack:Z \
      -v $QUAY/storage:/datastorage:Z \
      registry.redhat.io/quay/quay-rhel8:v3.5.4

3.1.5. コマンドラインを使用した SSL 設定のテスト

  • podman login コマンドを使用して、SSL が有効にされている Quay レジストリーへのログインを試みます。

    $ sudo podman login quay-server.example.com
    Username: quayadmin
    Password:
    
    Error: error authenticating creds for "quay-server.example.com": error pinging docker registry quay-server.example.com: Get "https://quay-server.example.com/v2/": x509: certificate signed by unknown authority
  • Podman は自己署名証明書を信頼しません。回避策として、--tls-verify オプションを使用します。

    $ sudo podman login --tls-verify=false quay-server.example.com
    Username: quayadmin
    Password:
    
    Login Succeeded!

ルート認証局 (CA) を信頼するように Podman を設定する方法は、後続のセクションで説明します。

3.1.6. ブラウザーを使用した SSL 設定のテスト

Quay レジストリーへのアクセスを試みると (この場合は https://quay-server.example.com)、ブラウザーは潜在的なリスクについて警告します。

Potential risk

画面にログインすると、ブラウザーは接続が安全ではないことを通知します。

Connection not secure

ルート認証局 (CA) を信頼するようにシステムを設定する方法は、後続のセクションで説明します。

3.1.7. 認証局を信頼するように podman を設定する

Podman は、/etc/containers/certs.d/ および /etc/docker/certs.d/ の 2 つのパスを使用して CA ファイルを見つけます。

  • ルート CA ファイルをこれらの場所のいずれかにコピーし、サーバーのホスト名によって判別されるパスを使用して、ca.crt ファイルに名前を付けます。

    $ sudo cp rootCA.pem /etc/containers/certs.d/quay-server.example.com/ca.crt
  • または、Docker を使用している場合は、ルート CA ファイルを同等の Docker ディレクトリーにコピーします。

    $ sudo cp rootCA.pem /etc/docker/certs.d/quay-server.example.com/ca.crt

レジストリーにログインする際に、--tls-verify=false オプションを使用する必要がなくなります。

$ sudo podman login quay-server.example.com

Username: quayadmin
Password:
Login Succeeded!

3.1.8. 認証局を信頼するようにシステムを設定する

  1. ルート CA ファイルを統合されたシステム全体のトラストストアにコピーします。

    $ sudo cp rootCA.pem /etc/pki/ca-trust/source/anchors/
  2. システム全体のトラストストア設定を更新します。

    $ sudo update-ca-trust extract
  3. trust list コマンドを使用して、Quay サーバーが設定されていることを確認できます。

    $ trust list | grep quay
        label: quay-server.example.com

    https://quay-server.example.com でレジストリーを参照すると、接続が安全であることを示すロックアイコンが表示されます。

    Connection not secure

  4. システム全体の信頼からルート CA を削除するには、ファイルを削除し、設定を更新します。

    $ sudo rm /etc/pki/ca-trust/source/anchors/rootCA.pem
    $ sudo update-ca-trust extract
    $ trust list | grep quay
    $

詳細は、RHEL 8 のドキュメントの共有システム証明書の使用について参照してください。

3.2. Quay スーパーユーザー

superuser は、以下を実行する機能を含む拡張された特権を持つ Quay ユーザーアカウントです。

  • ユーザーの管理
  • 組織の管理
  • サービスキーの管理
  • 変更ログの表示
  • 使用状況ログのクエリー
  • グローバルに表示されるユーザーメッセージの作成

3.2.1. UI を使用したスーパーユーザーの Quay への追加

本セクションでは、Quay UI を使用してスーパーユーザーを追加する方法を説明します。コマンドラインインターフェースを使用してスーパーユーザーを追加するには、以下のセクションを参照してください。

  1. Quay コンテナーを接続モードで起動し、既存の設定をボリュームとして読み込みます。

    $ sudo podman run --rm -it --name quay_config \
      -p 8080:8080 \
      -p 443:8443 \
      -v $QUAY/config:/conf/stack:Z \
      registry.redhat.io/quay/quay-rhel8:v3.5.4 config secret
  2. UI の Access Settings セクションで、Super Users フィールドにユーザーの名前(この例では quayadmin) を入力し、Add をクリックします。
  3. configuration ファイルを検証し、ダウンロードしてから、設定モードで実行されている Quay コンテナーを終了します。config.yaml ファイルを設定ディレクトリーに展開し、Quay コンテナーをレジストリーモードで再起動します。

    $ sudo podman rm -f quay
    $ sudo podman run -d --rm -p 80:8080 -p 443:8443 \
    --name=quay \
    -v $QUAY/config:/conf/stack:Z \
    -v $QUAY/storage:/datastorage:Z \
    registry.redhat.io/quay/quay-rhel8:v3.5.4

3.2.2. スーパーユーザーを追加するための config.yaml ファイルの設定

config.yaml ファイルを直接編集してスーパーユーザーを追加することもできます。スーパーユーザーアカウントの一覧は、SUPER_USERS フィールドの配列として保存されます。

  • コンテナーレジストリーが実行中の場合はこれを停止し、SUPER_USERS 配列を config.yaml ファイルに追加します。

    $QUAY/config/config.yaml

    SERVER_HOSTNAME: quay-server.example.com
    SETUP_COMPLETE: true
    SUPER_USERS:
      - quayadmin
    ...

3.2.3. Super User Admin パネルへのアクセス

  1. Quay レジストリーを再起動します。

    $ sudo podman rm -f quay
    $ sudo podman run -d --rm -p 80:8080 -p 443:8443 \
    --name=quay \
    -v $QUAY/config:/conf/stack:Z \
    -v $QUAY/storage:/datastorage:Z \
    registry.redhat.io/quay/quay-rhel8:v3.5.4
  2. Super User Admin パネルにアクセスするには、UI の右上にある現在のユーザーの名前またはアバターをクリックします。ユーザーがスーパーユーザーとして追加されている場合は、Super User Admin Panel というドロップダウンリストに、追加のアイテムが表示されます。

    Super User Admin Panel

3.2.3.1. グローバルに表示されるユーザーメッセージの作成

Superuser Admin Panel を使用すると、組織の NormalWarning、または Error メッセージを作成できます。

  1. UI の右上でユーザー名をクリックします。Super User Admin Panel を選択します。
  2. Red Hat Quay Management ページの、左側のペインで Globally visible user messages をクリックします。
  3. Create Message をクリックし、NormalWarning、および Error メッセージタイプを含むドロップダウンメニューを表示します。

    Creating a new messsage

  4. メッセージの入力は、Click to set message を選択してから、Create Message をクリックして実行します。

メッセージの削除には、Options をクリックし、続いて Delete Message をクリックします。

3.3. リポジトリーのミラーリング

3.3.1. リポジトリーのミラーリング

Red Hat Quay リポジトリーミラーリングを使用すると、外部コンテナーレジストリー(または別のローカルレジストリー)から Red Hat Quay クラスターにイメージをミラーリングできます。リポジトリーミラーリングを使用すると、リポジトリー名とタグに基づいてイメージを Red Hat Quay に同期できます。

リポジトリーミラーリングが有効にされた Red Hat Quay クラスターから、以下を実行できます。

  • 外部レジストリーからミラーリングするリポジトリーを選択する。
  • 外部レジストリーにアクセスするための認証情報を追加する。
  • 同期する特定のコンテナーイメージリポジトリー名とタグを特定する。
  • リポジトリーが同期される間隔を設定する。
  • 同期の現在の状態を確認する。

ミラーリング機能を使用するには、以下を行う必要があります。

  • Red Hat Quay 設定でのリポジトリーミラーリングの有効化
  • リポジトリーミラーリングワーカーを実行します。
  • ミラーリングされたリポジトリーの作成

すべてのリポジトリーミラーリング設定は、設定ツール UI または Quay API を使用して実行できます。

3.3.2. 設定 UI のミラーリング

  1. 設定モードで Quay コンテナーを起動し、Enable Repository Mirroring チェックボックスを選択します。HTTPS 通信を必要とし、ミラーリング時に証明書を検証する必要がある場合は、HTTPS を選択し、証明書の検証のチェックボックスを選択します。

    Enable mirroring and require HTTPS and verified certificates

  2. configuration を検証し、ダウンロードしてから、更新された設定ファイルを使用してレジストリーモードで Quay を再起動します。

3.3.3. ミラーリングワーカー

  • リポジトリーのミラーリングワーカーを実行するには、repomirror オプションを指定して Quay Pod を起動します。

    $ sudo podman run -d --name mirroring-worker \
      -v $QUAY/config:/conf/stack:Z \
      registry.redhat.io/quay/quay-rhel8:v3.5.4 repomirror
  • 証明書 /root/ca.crt を使用して TLS 通信を設定している場合、以下の例ではミラーリングワーカーの起動方法を示します。

    $ sudo podman run -d --name mirroring-worker \
      -v $QUAY/config:/conf/stack:Z \
      -v /root/ca.crt:/etc/pki/ca-trust/source/anchors/ca.crt \
      registry.redhat.io/quay/quay-rhel8:v3.5.4 repomirror

3.3.4. ミラーリングされたリポジトリーの作成

以下のセクションで説明する手順は、Red Hat Quay クラスターの設定でリポジトリーのミラーリングが有効にされており、リポジトリーミラーリングワーカーをデプロイしていることを前提としています。

外部コンテナーレジストリーからリポジトリーをミラーリングする場合は、新しいプライベートリポジトリーを作成します。通常、ターゲットリポジトリーと同じ名前が使用されます(例: quay-rhel8)。

Create new Red Hat Quay repo

3.3.4.1. リポジトリーのミラーリングの設定

  1. Settings タブで、Repository State を Mirror に設定します。

    Create a new Red Hat Quay repo mirror

  2. Mirror タブで、タグ、スケジューリング、およびアクセス情報と共に外部レジストリーに接続するための情報を入力します。

    Repository mirroring

  3. 必要に応じて、以下のフィールドに詳細を入力します。

    • Registry Location: ミラーリングする外部リポジトリー (例: registry.redhat.io/quay/quay-rhel8)。
    • Tags: このフィールドは必須です。個別のタグまたはタグパターンのコンマ区切りの一覧を入力できます。(詳細は、「タグパターン」のセクションを参照してください)。

      注記

      Quay がリモートリポジトリーのタグの一覧を取得するには、以下のいずれかの要件を満たす必要があります。

      • 「latest」タグのあるイメージがリモートリポジトリー OR に存在している必要があります
      • パターンの一致のない少なくとも 1 つの明示的なタグが、指定するタグの一覧に存在する必要があります。
    • Start Date: ミラーリングが開始する日付。現在の日時がデフォルトで使用されます。
    • Sync Interval: デフォルトで 24 時間ごとの同期に設定されます。これは時間または日に基づいて変更できます。
    • Robot User: 新しい robot アカウントを作成するか、または既存の robot アカウントを選択してミラーリングを実行します。
    • Username: ミラーリングするリポジトリーを保持する外部レジストリーにアクセスするためのユーザー名。
    • Password: ユーザー名に関連付けられたパスワード。パスワードにはエスケープ文字 (\) を必要とする文字を含めることができないことに注意してください。

3.3.4.2. 詳細設定

  • Advanced Settings セクションで、必要な場合は TLS およびプロキシーを設定します。
  • Verify TLS: ターゲットリモートレジストリーと通信する際に、HTTPS が必要であり、証明書を検証する必要がある場合にこのボックスにチェックを付けます。
  • HTTP Proxy: リモートサイトへのアクセスに必要な HTTP プロキシーサーバーを特定します (必要な場合)。
  • HTTP Proxy: リモートサイトへのアクセスに必要な HTTPS プロキシーサーバーを特定します (必要な場合)。
  • No Proxy: プロキシーを必要としない場所の一覧。

3.3.4.3. 今すぐ同期する

  • 即時にミラーリング操作を実行するには、リポジトリーの Mirroring タブで Sync Now ボタンを押します。ログは、Usage Logs タブで利用できます。

    Usage logs

    ミラーリングが完了すると、イメージは Tags タブに表示されます。

    Repository mirroring tags

    以下は、完了した「Repository Mirroring」画面の例です。

    Repository mirroring details

3.3.5. タグパターンのミラーリング

前述のように、少なくとも 1 つのタグを明示的に入力する (タグパターンではない) か、または、タグの「latest」がリモートリポジトリーに存在する必要があります。(タグ「latest」はタグの一覧に指定されていない限り同期されません)。これは、Quay でミラーリングに使用する指定の一覧との比較用にリモートリポジトリーでタグ一覧を取得するために必要です。

3.3.5.1. パターン構文

Pattern

説明

*

すべての文字に一致します。

?

任意の 1 文字に一致します。

[seq]

seq の任意の文字と一致します。

[!sEQ]

seq にない文字と一致します。

3.3.5.2. タグパターンの例

パターン例

一致例

v3*

v32、v3.1、v3.2、v3.2-4beta、v3.3

v3.*

v3.1、v3.2、v3.2-4beta

v3.?

v3.1、v3.2、v3.3

v3.[12]

v3.1、v3.2

v3.[12]*

v3.1、v3.2、v3.2-4beta

v3.[!1]*

v3.2、v3.2-4beta、v3.3

3.4. コンテナーの再起動

--restart オプションは podman で完全にサポートされていないため、「Podman を使用したコンテナーの systemd へのポート 」で説明されているように、podman を systemd サービスとして設定できます。

3.4.1. Podman での systemd ユニットファイルの使用

デフォルトで、Podman は既存のコンテナーまたは Pod のユニットファイルを生成します。podman generate systemd --new コマンドを使用して、追加の移植可能な systemd ユニットファイルを生成できます。--new フラグは、Podman に対し、コンテナーの作成、起動、および削除を行うユニットファイルを生成するように指示します。

  1. 以下のように、実行中の Red Hat Quay レジストリーから systemd ユニットファイルを作成します。

    $ sudo podman generate systemd --new --files --name redis
    $ sudo podman generate systemd --new --files --name postgresql-quay
    $ sudo podman generate systemd --new --files --name quay
    $ sudo podman generate systemd --new --files --name postgresql-clairv4
    $ sudo podman generate systemd --new --files --name clairv4
  2. root ユーザーとしてインストールするために、/usr/lib/systemd/system にユニットファイルをコピーします。

    $ sudo cp -Z container-redis.service /usr/lib/systemd/system
    $ sudo cp -Z container-postgresql-quay.service /usr/lib/systemd/system
    $ sudo cp -Z container-quay.service /usr/lib/systemd/system
    $ sudo cp -Z container-postgresql-clairv4.service /usr/lib/systemd/system
    $ sudo cp -Z container-clairv4.service /usr/lib/systemd/system
  3. systemd マネージャーの設定を再読み込みするには、次のコマンドを実行します。

    $ sudo systemctl daemon-reload
  4. サービスを有効にし、システムの起動時に起動します。

    $ sudo systemctl enable --now container-redis.service
    $ sudo systemctl enable --now container-postgresql-quay.service
    $ sudo systemctl enable --now container-quay.service
    $ sudo systemctl enable --now container-postgresql-clairv4.service
    $ sudo systemctl enable --now container-clairv4.service

3.4.2. サービスの起動、停止、およびステータスのチェック

  1. Quay コンポーネントのステータスを確認します。

    $ sudo systemctl status container-redis.service
    $ sudo systemctl status container-postgresql-quay.service
    $ sudo systemctl status container-quay.service
    $ sudo systemctl status container-postgresql-clairv4.service
    $ sudo systemctl status container-clairv4.service
  2. Quay コンポーネントサービスを停止するには、以下を実行します。

    $ sudo systemctl stop container-redis.service
    $ sudo systemctl stop container-postgresql-quay.service
    $ sudo systemctl stop container-quay.service
    $ sudo systemctl stop container-postgresql-clairv4.service
    $ sudo systemctl stop container-clairv4.service
  3. Quay コンポーネントサービスを開始するには、以下を実行します。

    $ sudo systemctl start container-redis.service
    $ sudo systemctl start container-postgresql-quay.service
    $ sudo systemctl start container-quay.service
    $ sudo systemctl start container-postgresql-clairv4.service
    $ sudo systemctl start container-clairv4.service

3.4.3. 再起動後の再起動のテスト

サービスを設定して有効にしたら、システムを再起動します。システムを再起動したら、podman ps を使用して Quay コンポーネントのすべてのコンテナーが再起動されていることを確認します。

$ sudo podman ps -a
CONTAINER ID  IMAGE                                       COMMAND         CREATED         STATUS             PORTS                   NAMES
4e87c7889246  registry.redhat.io/rhel8/postgresql-10:1    run-postgresql  19 seconds ago  Up 18 seconds ago  0.0.0.0:5432->5432/tcp  postgresql-quay
b8fbac1920d4  registry.redhat.io/rhel8/redis-5:1          run-redis       19 seconds ago  Up 18 seconds ago  0.0.0.0:6379->6379/tcp  redis
d959d5bf7a24  registry.redhat.io/rhel8/postgresql-10:1    run-postgresql  18 seconds ago  Up 18 seconds ago  0.0.0.0:5433->5432/tcp  postgresql-clairv4
e75ff8651dbd  registry.redhat.io/quay/clair-rhel8:v3.4.0                  18 seconds ago  Up 17 seconds ago  0.0.0.0:8081->8080/tcp  clairv4

この場合、Quay コンテナー自体は起動できませんでした。これは、セキュリティースキャンが Quay で有効にされている場合に、起動時に Clair への接続を試みるためです。ただし、Clair は初期化を完了せず、接続を受け入れることができないため、結果として Quay はすぐに終了します。この問題に対処するには、以下のセクションにあるように、Quay サービスを Clair サービスの依存関係を持つように設定する必要があります。

3.4.4. Clair の Quay の依存関係の設定

Quay の systemd サービスファイルで、After=container-clairv4.service を設定して、[Unit] セクションに Clair サービスの依存関係を設定します。Clair コンテナーの初期化する時間を指定するには、[Service] セクションに遅延を追加します (RestartSec=30)。以下は、Clair の依存関係を設定した後に変更された Quay ファイルの例です。

/usr/lib/systemd/system/container-quay.service

# container-quay.service
# autogenerated by Podman 2.0.5
# Tue Feb 16 17:02:26 GMT 2021

[Unit]
Description=Podman container-quay.service
Documentation=man:podman-generate-systemd(1)
Wants=network.target
After=container-clairv4.service

[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure
RestartSec=30
ExecStartPre=/bin/rm -f %t/container-quay.pid %t/container-quay.ctr-id
ExecStart=/usr/bin/podman run --conmon-pidfile %t/container-quay.pid --cidfile %t/container-quay.ctr-id --cgroups=no-conmon -d --rm -p 8080:8080 --name=quay -v /home/user1/quay/config:/conf/stack:Z -v /home/user1/quay/storage:/datastorage:Z registry.redhat.io/quay/quay-rhel8:v3.4.0
ExecStop=/usr/bin/podman stop --ignore --cidfile %t/container-quay.ctr-id -t 10
ExecStopPost=/usr/bin/podman rm --ignore -f --cidfile %t/container-quay.ctr-id
PIDFile=%t/container-quay.pid
KillMode=none
Type=forking

[Install]
WantedBy=multi-user.target default.target

Quay サービス設定を更新したら、サーバーを再起動し、podman ps をすぐに実行します。

$ sudo podman ps -a
CONTAINER ID  IMAGE                                       COMMAND         CREATED         STATUS             PORTS                   NAMES
4e87c7889246  registry.redhat.io/rhel8/postgresql-10:1    run-postgresql  29 seconds ago  Up 28 seconds ago  0.0.0.0:5432->5432/tcp  postgresql-quay
b8fbac1920d4  registry.redhat.io/rhel8/redis-5:1          run-redis       29 seconds ago  Up 28 seconds ago  0.0.0.0:6379->6379/tcp  redis
d959d5bf7a24  registry.redhat.io/rhel8/postgresql-10:1    run-postgresql  28 seconds ago  Up 28 seconds ago  0.0.0.0:5433->5432/tcp  postgresql-clairv4
e75ff8651dbd  registry.redhat.io/quay/clair-rhel8:v3.4.0                  28 seconds ago  Up 27 seconds ago  0.0.0.0:8081->8080/tcp  clairv4

最初は Quay コンテナーは利用できませんが、RestartSec の遅延の期限が切れると、起動するはずです。

$ sudo podman ps -a
CONTAINER ID  IMAGE                                       COMMAND         CREATED         STATUS             PORTS                   NAMES
4e87c7889246  registry.redhat.io/rhel8/postgresql-10:1    run-postgresql  35 seconds ago  Up 34 seconds ago  0.0.0.0:5432->5432/tcp  postgresql-quay
ab9f0e6ad7c3  registry.redhat.io/quay/quay-rhel8:v3.4.0   registry        3 seconds ago   Up 2 seconds ago   0.0.0.0:8080->8080/tcp  quay
b8fbac1920d4  registry.redhat.io/rhel8/redis-5:1          run-redis       35 seconds ago  Up 34 seconds ago  0.0.0.0:6379->6379/tcp  redis
d959d5bf7a24  registry.redhat.io/rhel8/postgresql-10:1    run-postgresql  34 seconds ago  Up 34 seconds ago  0.0.0.0:5433->5432/tcp  postgresql-clairv4
e75ff8651dbd  registry.redhat.io/quay/clair-rhel8:v3.4.0                  34 seconds ago  Up 33 seconds ago  0.0.0.0:8081->8080/tcp  clairv4

Quay コンテナーの CREATED フィールドには、サービス定義に設定されるように作成時間に 30 秒の差異が示されます。

quay-server.example.com で Red Hat Quay レジストリーにログインし、すべてが正常に再起動されていることを確認します。

3.5. Helm OCI サポートおよび Red Hat Quay

Red Hat Quay などのコンテナーレジストリーは、当初は Docker イメージ形式でコンテナーイメージをサポートするように設計されています。Docker 以外で追加のランタイムの使用をプロモートするために、コンテナーランタイムとイメージ形式に関連する標準化を提供するために Open Container Initiative (OCI) が作成されました。ほとんどのコンテナーレジストリーは、Docker イメージマニフェスト V2、Schema 2 形式をベースとして OCI 標準化をサポートします。

コンテナーイメージのほかにも、個別のアプリケーションだけでなく、Kubernetes プラットフォームを全体としてサポートする各種のアーティファクトが新たに出現しました。これらは、アプリケーションのデプロイメントを支援するセキュリティーおよびガバナンスの Open Policy Agent (OPA) ポリシーから Helm チャートおよび Operator に及びます。

Red Hat Quay は、コンテナーイメージを格納するだけでなく、コンテナーの管理を支援するツールのエコシステム全体をサポートするプライベートコンテナーレジストリーです。Red Hat Quay 3.5 のリリースでは、OCI ベースのアーティファクト(具体的には Helm チャート) の使用のサポートが、テクニカルプレビュー (TP) ではなく一般公開 (GA) 機能として利用可能になりました。

OpenShift Operator を使用して Red Hat Quay 3.5 をデプロイすると、Helm および OCI アーティファクトのサポートがデフォルトで有効にされるようになりました。機能を明示的に有効にする必要がある場合(機能が無効にされている場合や、デフォルトで有効にされていないバージョンからアップグレードした場合など)は、「 OCI および Helm サポートの有効化 」のセクションを参照してください。

3.5.1. Helm および OCI の前提条件

  • 信頼される証明書: Helm クライアントと Quay 間の通信は HTTPS 経由で行われ、Helm 3.5 の時点では、サポートは信頼される証明書を使用して HTTPS で通信するレジストリーについてのみ利用できます。さらに、オペレーティングシステムはレジストリーで公開される証明書を信頼する必要があります。今後の Helm リリースでのサポートにより、リモートレジストリーとの非セキュアな通信が可能になります。これを念頭に置いて、オペレーティングシステムが Quay で使用される証明書を信頼するように設定されていることを確認します。以下は例になります。

    $ sudo cp rootCA.pem   /etc/pki/ca-trust/source/anchors/
    $ sudo update-ca-trust extract
  • 実験的な機能: Helm および OCI レジストリーと対話するコマンドの多くは、helm chart サブコマンドを利用します。本書の作成時点では、Helm での OCI サポートは「experimental (実験的な)」機能とマークされており、明示的に有効にする必要があります。これは、環境変数 HELM_EXPERIMENTAL_OCI=1 を設定して実行されます。
  • Helm クライアントのインストール: 必要なバージョンを https://github.com/helm/helm/releases からダウンロードします (例: https://get.helm.sh/helm-v3.5.3-linux-amd64.tar.gz)。これを展開し、helm バイナリーをその必要な宛先に移動します。

    $ tar -zxvf helm-v3.5.3-linux-amd64.tar.gz
    $ mv linux-amd64/helm /usr/local/bin/helm
  • Quay での組織の作成: Quay レジストリー UI を使用し、Helm チャートを保存するために新しい組織を作成します。たとえば、helm という名前の組織を作成します。

3.5.2. Quay での Helm チャートの使用

Helm は、Cloud Native Computing Foundation (CNCF) から進展したプロジェクトとして、アプリケーションのパッケージ化およびデプロイを単純化する、Kubernetes の事実上のパッケージマネージャーです。Helm は、アプリケーションを表す Kubernetes リソースが含まれる Chart というパッケージ形式を使用します。Chart (チャート) は、リポジトリーでの一般的なディストリビューションや消費用に利用できます。Helm リポジトリーは、index.yaml メタデータファイルと、オプションでパッケージ化されたチャートのセットを提供する HTTP サーバーです。Helm バージョン 3 以降、従来のリポジトリーの代わりとして OCI レジストリーでチャートを提供するためのサポートが利用できるようになりました。Quay を Helm チャートのレジストリーとして使用する方法を説明するために、Helm リポジトリーの既存チャートを使用してチャート開発者とユーザー向けに OCI レジストリーとの対話を示します。

以下の例では、以下の手順に従って、サンプルの etherpad チャートが Red Community of Practice (CoP) リポジトリーからダウンロードされ、ローカルの Red Hat Quay リポジトリーにプッシュされます。

  • 適切なリポジトリーを追加します。
  • リポジトリーを最新のメタデータで更新します
  • チャートをダウンロードして展開し、 etherpad というローカルディレクトリーを作成します。

以下は例になります。

$ helm repo add redhat-cop https://redhat-cop.github.io/helm-charts
$ helm repo update
$ helm pull redhat-cop/etherpad --version=0.0.4 --untar

チャートにタグ付けするには、helm chart save コマンドを使用する必要があります。これは、イメージにタグ付けするために podman タグ を使用することに対応します。

$ helm chart save ./etherpad example-registry-quay-quay-enterprise.apps.user1.example.com/helm/etherpad:0.0.4

ref:     example-registry-quay-quay-enterprise.apps.user1.example.com/helm/etherpad:0.0.4
digest:  6850d9b21dd4b87cf20ad49f2e2c7def9655c52ea573e1ddb9d1464eeb6a46a6
size:    3.5 KiB
name:    etherpad
version: 0.0.4
0.0.4: saved

helm chart list コマンドを使用して、チャートのローカルインスタンスを表示します。

helm chart list

REF                                                                               NAME     VERSION DIGEST SIZE   CREATED
example-registry-quay-quay-enterprise.apps.user1.example.com/helm/etherpad:0.0.4 etherpad 0.0.4   ce0233f 3.5 KiB 23 seconds

チャートをプッシュする前に、helm registry login コマンドを使用してリポジトリーにログインします。

$ helm registry login example-registry-quay-quay-enterprise.apps.user1.example.com
Username: quayadmin
Password:
Login succeeded

helm chart push コマンドを使用してチャートをローカル Quay リポジトリーにプッシュします。

$ helm chart push example-registry-quay-quay-enterprise.apps.user1.example.com/helm/etherpad:0.0.4

The push refers to repository [example-registry-quay-quay-enterprise.apps.user1.example.com/helm/etherpad]
ref:     example-registry-quay-quay-enterprise.apps.user1.example.com/helm/etherpad:0.0.4
digest:  ce0233fd014992b8e27cc648cdabbebd4dd6850aca8fb8e50f7eef6f2f49833d
size:    3.5 KiB
name:    etherpad
version: 0.0.4
0.0.4: pushed to remote (1 layer, 3.5 KiB total)

プッシュが機能することをテストするには、ローカルコピーを削除してから、チャートをリポジトリーからプルします。

$ helm chart rm example-registry-quay-quay-enterprise.apps.user1.example.com/helm/etherpad:0.0.4
$ rm -rf etherpad
$ helm chart pull example-registry-quay-quay-enterprise.apps.user1.example.com/helm/etherpad:0.0.4

0.0.4: Pulling from example-registry-quay-quay-enterprise.apps.user1.example.com/helm/etherpad
ref:     example-registry-quay-quay-enterprise.apps.user1.example.com/helm/etherpad:0.0.4
digest:  6850d9b21dd4b87cf20ad49f2e2c7def9655c52ea573e1ddb9d1464eeb6a46a6
size:    3.5 KiB
name:    etherpad
version: 0.0.4
Status: Downloaded newer chart for example-registry-quay-quay-enterprise.apps.user1.example.com/helm/etherpad:0.0.4

helm chart export コマンドを使用してチャートファイルを展開します。

$ helm chart export example-registry-quay-quay-enterprise.apps.user1.example.com/helm/etherpad:0.0.4

ref:     example-registry-quay-quay-enterprise.apps.user1.example.com/helm/etherpad:0.0.4
digest:  ce0233fd014992b8e27cc648cdabbebd4dd6850aca8fb8e50f7eef6f2f49833d
size:    3.5 KiB
name:    etherpad
version: 0.0.4
Exported chart to etherpad/

3.5.3. OCI および Helm の設定

Helm および OCI アーティファクトのサポートが、Red Hat Quay 3.5 でデフォルトで有効にされるようになりました。機能を明示的に有効にする必要がある場合(機能が無効にされている場合や、デフォルトで有効にされていないバージョンからアップグレードした場合など) は、OCI アーティファクトの使用を有効にするために 2 つのプロパティーを Quay 設定に追加する必要があります。

FEATURE_GENERAL_OCI_SUPPORT: true
FEATURE_HELM_OCI_SUPPORT: true

表3.1 OCI および Helm の設定

フィールドタイプ詳細

FEATURE_GENERAL_OCI_SUPPORT

Boolean

OCI アーティファクトのサポートを有効にします

デフォルト: True

FEATURE_HELM_OCI_SUPPORT

Boolean

Helm アーティファクトのサポートを有効にします

デフォルト: True

3.6. FIPS の readiness およびコンプライアンス

FIPS(Federal Information Processing Standard: National Institute of Standards and Technology, NIST)は、特に銀行、ヘルスcare、パブリックセクターなどの非常に規制データの保護と暗号化のためのゴールド標準と見なされます。Red Hat Enterprise Linux および Red Hat OpenShift Container Platform は、システムが openssl などの特定の FIPS 検証済み暗号モジュールの使用のみを許可する FIPS モードを提供することで、この標準をサポートします。これにより、FIPS 準拠が確保されます。

Red Hat Quay は、バージョン 3.5 以降の FIPS モードでの RHEL および OCP での実行をサポートします。さらに、Red Hat Quay 自体は、検証される暗号化ライブラリーのみ、または NIST が検証されるプロセスにある暗号ライブラリーのみにコミットします。Red Hat Quay 3.5 では、RHEL 8.3 暗号ライブラリーをベースとした保留中の FIPS 140-2 検証があります。検証が確定されると、Red Hat Quay は公式に FIPS に準拠します。

第4章 次のステップ

本書では、概念実証用の Red Hat Quay を設定し、デプロイする方法を説明します。実稼働環境へのデプロイに関する詳細は、『Deploy Red Hat Quay - High Availability』を参照してください。

『Using Red Hat Quay』ガイドでは、以下の方法を紹介しています。

  • ユーザーおよびリポジトリーの追加
  • タグの使用
  • ビルドワーカーを使用した Dockerfile の自動ビルド
  • ビルドトリガーのセットアップ
  • リポジトリーイベントの通知の追加

『Manage Red Hat Quay』ガイドでは、以下の方法について説明しています。

  • SSL および TLS の使用
  • Clair によるセキュリティースキャンの有効化
  • リポジトリーミラーリングの使用
  • LDAP 認証の設定
  • ストレージの Georeplication の使用