検索

第17章 スタンドアロンデプロイメントでの Red Hat Quay のバックアップと復元

download PDF

このセクションの内容を使用して、スタンドアロンデプロイメントの Red Hat Quay をバックアップおよび復元します。

17.1. オプション: Red Hat Quay の読み取り専用モードの有効化

Red Hat Quay デプロイメントで読み取り専用モードを有効にすると、レジストリーの操作を管理できるようになります。Red Hat Quay 管理者は、読み取り専用モードを有効にしてレジストリーへの書き込みアクセスを制限できます。これは、データの整合性の確保、メンテナンス期間中のリスクの軽減、レジストリーデータへの意図しない変更に対する保護に役立ちます。また、Red Hat Quay レジストリーがオンライン状態を維持し、ユーザーにイメージを提供できるようにするのにも役立ちます。

前提条件

  • Red Hat Enterprise Linux (RHEL) 7.x を使用している場合:

    • Red Hat Software Collections List (RHSCL) を有効にした。
    • Python 3.6 をインストールした。
    • virtualenv パッケージをダウンロードした。
    • git CLI をインストールした。
  • Red Hat Enterprise Linux (RHEL) 8 を使用している場合:

    • マシンに Python 3 をインストールした。
    • python3-virtualenv パッケージをダウンロードした。
    • git CLI をインストールした。
  • https://github.com/quay/quay.git リポジトリーのクローンを作成した。

17.1.1. スタンドアロン Red Hat Quay のサービスキーの作成

Red Hat Quay はサービスキーを使用してさまざまなコンポーネントと通信します。サービスキーは、イメージのスキャン、ログイン、ストレージアクセスなどの要求など、完了した要求に署名するために使用されます。

手順

  1. Red Hat Quay レジストリーがすぐに利用できる場合は、Quay レジストリーコンテナー内でサービスキーを生成できます。

    1. Quay コンテナー内にキーペアを生成するには、次のコマンドを入力します。

      $ podman exec quay python3 tools/generatekeypair.py quay-readonly
  2. Red Hat Quay がすぐに利用できない場合は、仮想環境内でサービスキーを生成する必要があります。

    1. Red Hat Quay デプロイメントのディレクトリーに移動し、そのディレクトリー内に仮想環境を作成します。

      $ cd <$QUAY>/quay && virtualenv -v venv
    2. 次のコマンドを入力して仮想環境をアクティブ化します。

      $ source venv/bin/activate
    3. オプション: pip CLI ツールがインストールされていない場合はインストールします。

      $ venv/bin/pip install --upgrade pip
    4. Red Hat Quay ディレクトリーに、次の内容を含む requirements-generatekeys.txt ファイルを作成します。

      $ cat << EOF > requirements-generatekeys.txt
      cryptography==3.4.7
      pycparser==2.19
      pycryptodome==3.9.4
      pycryptodomex==3.9.4
      pyjwkest==1.4.2
      PyJWT==1.7.1
      Authlib==1.0.0a2
      EOF
    5. 次のコマンドを入力して、requirements-generatekeys.txt ファイルで定義した Python 依存関係をインストールします。

      $ venv/bin/pip install -r requirements-generatekeys.txt
    6. 次のコマンドを入力して、必要なサービスキーを作成します。

      $ PYTHONPATH=. venv/bin/python /<path_to_cloned_repo>/tools/generatekeypair.py quay-readonly

      出力例

      Writing public key to quay-readonly.jwk
      Writing key ID to quay-readonly.kid
      Writing private key to quay-readonly.pem
    7. 次のコマンドを入力して、仮想環境を非アクティブ化します。

      $ deactivate

17.1.2. PostgreSQL データベースへのキーの追加

PostgreSQL データベースにサービスキーを追加するには、次の手順に従います。

前提条件

  • サービスキーを作成した。

手順

  1. 次のコマンドを入力して、Red Hat Quay データベース環境に入ります。

    $ podman exec -it postgresql-quay psql -U postgres -d quay
  2. 次のコマンドを入力して、servicekeyapproval の承認タイプと関連する注記を表示します。

    quay=# select * from servicekeyapproval;

    出力例

     id | approver_id |          approval_type           |       approved_date        | notes
    ----+-------------+----------------------------------+----------------------------+-------
      1 |             | ServiceKeyApprovalType.AUTOMATIC | 2024-05-07 03:47:48.181347 |
      2 |             | ServiceKeyApprovalType.AUTOMATIC | 2024-05-07 03:47:55.808087 |
      3 |             | ServiceKeyApprovalType.AUTOMATIC | 2024-05-07 03:49:04.27095  |
      4 |             | ServiceKeyApprovalType.AUTOMATIC | 2024-05-07 03:49:05.46235  |
      5 |           1 | ServiceKeyApprovalType.SUPERUSER | 2024-05-07 04:05:10.296796 |
    ...
  3. 次のクエリーを入力して、Red Hat Quay データベースにサービスキーを追加します。

    quay=# INSERT INTO servicekey
      (name, service, metadata, kid, jwk, created_date, expiration_date)
      VALUES ('quay-readonly',
               'quay',
               '{}',
               '{<contents_of_.kid_file>}',
               '{<contents_of_.jwk_file>}',
               '{<created_date_of_read-only>}',
               '{<expiration_date_of_read-only>}');

    出力例

    INSERT 0 1
  4. 次のクエリーを使用してキー承認を追加します。

    quay=# INSERT INTO servicekeyapproval ('approval_type', 'approved_date', 'notes')
      VALUES ("ServiceKeyApprovalType.SUPERUSER", "CURRENT_DATE",
               {include_notes_here_on_why_this_is_being_added});

    出力例

    INSERT 0 1
  5. 作成されたサービスキー行の authorization_id フィールドを、作成されたサービスキー承認の id フィールドに設定します。必要な ID を取得するには、次の SELECT ステートメントを使用できます。

    UPDATE servicekey
    SET approval_id = (SELECT id FROM servicekeyapproval WHERE approval_type = 'ServiceKeyApprovalType.SUPERUSER')
    WHERE name = 'quay-readonly';
    UPDATE 1

17.1.3. スタンドアロン Red Hat Quay の読み取り専用モードの設定

サービスキーを作成し、PostgreSQL データベースに追加したら、スタンドアロンデプロイメントで Quay コンテナーを再起動する必要があります。

前提条件

  • サービスキーを作成し、PostgreSQL データベースに追加した。

手順

  1. すべての仮想マシン上のすべての Red Hat Quay インスタンスをシャットダウンします。以下に例を示します。

    $ podman stop <quay_container_name_on_virtual_machine_a>
    $ podman stop <quay_container_name_on_virtual_machine_b>
  2. 次のコマンドを入力して、quay-readonly.kid ファイルと quay-readonly.pem ファイルの内容を、Red Hat Quay 設定バンドルが格納されているディレクトリーにコピーします。

    $ cp quay-readonly.kid quay-readonly.pem $Quay/config
  3. 次のコマンドを入力して、設定バンドルフォルダー内のすべてのファイルに対するファイル権限を設定します。

    $ setfacl -m user:1001:rw $Quay/config/*
  4. Red Hat Quay config.yaml ファイルを変更し、次の情報を追加します。

    # ...
    REGISTRY_STATE: readonly
    INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid'
    INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem'
    # ...
  5. 新しい設定バンドルをすべての Red Hat Quay インスタンスに配布します。
  6. 次のコマンドを入力して Red Hat Quay を起動します。

    $ podman run -d --rm -p 80:8080 -p 443:8443  \
       --name=quay-main-app \
       -v $QUAY/config:/conf/stack:Z \
       -v $QUAY/storage:/datastorage:Z \
       {productrepo}/{quayimage}:{productminv}
  7. Red Hat Quay を起動すると、インスタンス内のバナーによって、Red Hat Quay が読み取り専用モードで実行されていることがユーザーに通知されます。プッシュが拒否され、405 エラーがログに記録されるはずです。次のコマンドを実行してこれをテストできます。

    $ podman push <quay-server.example.com>/quayadmin/busybox:test

    出力例

    613be09ab3c0: Preparing
    denied: System is currently read-only. Pulls will succeed but all write operations are currently suspended.

    Red Hat Quay デプロイメントを読み取り専用モードで実行すると、レジストリーの操作を安全に管理しながら、バックアップや復元などのアクションを実行できます。

  8. オプション: 読み取り専用モードでの作業が完了したら、config.yaml ファイルから次の情報を削除して、通常の運用に戻すことができます。削除したら、Red Hat Quay デプロイメントを再起動します。

    # ...
    REGISTRY_STATE: readonly
    INSTANCE_SERVICE_KEY_KID_LOCATION: 'conf/stack/quay-readonly.kid'
    INSTANCE_SERVICE_KEY_LOCATION: 'conf/stack/quay-readonly.pem'
    # ...
    $ podman restart <container_id>

17.1.4. 読み取り専用の有効期限の更新

Red Hat Quay 読み取り専用キーには有効期限があり、その日付が過ぎるとキーは非アクティブ化されます。キーの有効期限が切れる前に、データベース内でその有効期限を更新できます。キーを更新するには、前述の方法を使用して Red Hat Quay の実稼働データベースに接続し、次のクエリーを発行します。

quay=# UPDATE servicekey SET expiration_date = 'new-date' WHERE id = servicekey_id;

サービスキー ID のリストは、次のクエリーを実行することで取得できます。

SELECT id, name, expiration_date FROM servicekey;
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.