Red Hat Quay の管理
はじめに
Red Hat Quay レジストリーをデプロイメントした後、そのデプロイメントをさらに設定、管理する方法は数多くあります。ここでは、以下のようなトピックを取り上げています。
- Red Hat Quay の高度な設定
- Red Hat Quay の新リリースを知らせる通知の設定
- SSL/TLS 証明書による接続の保護
- アクションログのストレージの Elasticsearch へのダイレクト
- Clair によるイメージセキュリティースキャンの設定
- コンテナーセキュリティー Operator での Pod イメージのスキャン
- Quay Bridge Operator を使用した OpenShift Container Platform の Red Hat Quay への統合
- リポジトリーミラーリングによるイメージの反映
- BitTorrent サービスによる Red Hat Quay イメージの共有
- LDAP によるユーザーの認証
- Prometheus および Grafana メトリックの Quay の有効化
- Geo レプリケーションの設定
- Red Hat Quay のトラブルシューティング
Red Hat Quay 設定フィールドの完全なリストは、Red Hat Quay の設定 ページを参照してください。
第1章 Red Hat Quay の高度な設定
以下のいずれかの方法を使用して、初期デプロイメント後に Red Hat Quay を設定できます。
-
config.yaml
ファイルの編集。config.yaml
ファイルには、Red Hat Quay クラスターのほとんどの設定情報が含まれています。高度なチューニングや特定の機能を有効化するには、主にconfig.yaml
ファイルを直接編集する方法を使用します。 - Red Hat Quay API の使用一部の Red Hat Quay 機能は、API を介して設定できます。
このセクションでは、前述の各インターフェイスの使用方法と、高度な機能を使用してデプロイメントを設定する方法を説明します。
1.1. API を使用した Red Hat Quay の変更
Red Hat Quay API へのアクセス方法は、Red Hat Quay API ガイド を参照してください。
1.2. config.yaml ファイルを編集して Red Hat Quay の変更
高度な機能は、config.yaml
ファイルを直接編集することで実装できます。Red Hat Quay の機能および設定のすべての設定フィールドは、Red Hat Quay 設定ガイド で確認できます。
次の例は、config.yaml
ファイルで直接変更できる設定です。この例を、他の機能および設定の config.yaml
ファイルを編集する際の参考として使用してください。
1.2.1. Red Hat Quay サインインへの名前と会社の追加
FEATURE_USER_METADATA
フィールドを true
に設定すると、ユーザーは最初のサインイン時に名前と会社の入力を求められます。これはオプションのフィールドですが、Red Hat Quay ユーザーに関する追加データを提供できます。
以下の手順を使用して、Red Hat Quay のサインインページに名前と会社を追加します。
手順
-
config.yaml
ファイルでFEATURE_USER_METADATA
設定フィールドをtrue
に追加または設定します。以下に例を示します。
# ... FEATURE_USER_METADATA: true # ...
- Red Hat Quay を再デプロイします。
ログインを求めるプロンプトが出されたら、ユーザーは以下の情報を入力するよう要求されます。
第2章 コンフィグレーション API の利用
コンフィグレーションツールは、設定の構築、検証、バンドル、およびデプロイに使用できる 4 つのエンドポイントを示します。config-tool の API は、https://github.com/quay/config-tool/blob/master/pkg/lib/editor/API.md に記載されています。ここでは、API を使用して現在の設定を取得する方法と、変更した内容を検証する方法について説明します。
2.1. 初期設定値の取得
初めてコンフィグレーションツールを実行するときに、既存のコンフィグレーションがない場合は、デフォルトのコンフィグレーションを取得することができます。コンテナーをコンフィグモードで起動します。
$ sudo podman run --rm -it --name quay_config \ -p 8080:8080 \ registry.redhat.io/quay/quay-rhel8:v3.12.0 config secret
デフォルトを取得するには、コンフィグレーション API の config
エンドポイントを使用します。
$ curl -X GET -u quayconfig:secret http://quay-server:8080/api/v1/config | jq
返される値は、JSON 形式によるデフォルト設定です。
{ "config.yaml": { "AUTHENTICATION_TYPE": "Database", "AVATAR_KIND": "local", "DB_CONNECTION_ARGS": { "autorollback": true, "threadlocals": true }, "DEFAULT_TAG_EXPIRATION": "2w", "EXTERNAL_TLS_TERMINATION": false, "FEATURE_ACTION_LOG_ROTATION": false, "FEATURE_ANONYMOUS_ACCESS": true, "FEATURE_APP_SPECIFIC_TOKENS": true, .... } }
2.2. 現在の設定の取得
すでに Quay レジストリーを設定してデプロイしている場合は、コンテナーを停止してコンフィグレーションモードで再起動し、既存のコンフィグレーションをボリュームとして読み込みます。
$ sudo podman run --rm -it --name quay_config \ -p 8080:8080 \ -v $QUAY/config:/conf/stack:Z \ registry.redhat.io/quay/quay-rhel8:v3.12.0 config secret
現在の設定を取得するには、API の config
エンドポイントを使用します。
$ curl -X GET -u quayconfig:secret http://quay-server:8080/api/v1/config | jq
返される値は、データベースと Redis の設定データを含む、JSON 形式の現在の設定です。
{ "config.yaml": { .... "BROWSER_API_CALLS_XHR_ONLY": false, "BUILDLOGS_REDIS": { "host": "quay-server", "password": "strongpassword", "port": 6379 }, "DATABASE_SECRET_KEY": "4b1c5663-88c6-47ac-b4a8-bb594660f08b", "DB_CONNECTION_ARGS": { "autorollback": true, "threadlocals": true }, "DB_URI": "postgresql://quayuser:quaypass@quay-server:5432/quay", "DEFAULT_TAG_EXPIRATION": "2w", .... } }
2.3. API による設定の検証
設定を検証するには、config/validate
エンドポイントに設定を投稿します。
curl -u quayconfig:secret --header 'Content-Type: application/json' --request POST --data ' { "config.yaml": { .... "BROWSER_API_CALLS_XHR_ONLY": false, "BUILDLOGS_REDIS": { "host": "quay-server", "password": "strongpassword", "port": 6379 }, "DATABASE_SECRET_KEY": "4b1c5663-88c6-47ac-b4a8-bb594660f08b", "DB_CONNECTION_ARGS": { "autorollback": true, "threadlocals": true }, "DB_URI": "postgresql://quayuser:quaypass@quay-server:5432/quay", "DEFAULT_TAG_EXPIRATION": "2w", .... } } http://quay-server:8080/api/v1/config/validate | jq
返される値は、設定で見つかったエラーを含む配列です。設定が有効であれば、空の配列 []
が返されます。
2.4. 必須項目の決定
空の設定構造を config/validate
エンドポイントに投稿することで、必須フィールドを決定することができます。
curl -u quayconfig:secret --header 'Content-Type: application/json' --request POST --data ' { "config.yaml": { } } http://quay-server:8080/api/v1/config/validate | jq
返される値は、どのフィールドが必須であるかを示す配列です。
[ { "FieldGroup": "Database", "Tags": [ "DB_URI" ], "Message": "DB_URI is required." }, { "FieldGroup": "DistributedStorage", "Tags": [ "DISTRIBUTED_STORAGE_CONFIG" ], "Message": "DISTRIBUTED_STORAGE_CONFIG must contain at least one storage location." }, { "FieldGroup": "HostSettings", "Tags": [ "SERVER_HOSTNAME" ], "Message": "SERVER_HOSTNAME is required" }, { "FieldGroup": "HostSettings", "Tags": [ "SERVER_HOSTNAME" ], "Message": "SERVER_HOSTNAME must be of type Hostname" }, { "FieldGroup": "Redis", "Tags": [ "BUILDLOGS_REDIS" ], "Message": "BUILDLOGS_REDIS is required" } ]
第3章 Red Hat Quay のリリース通知の取得
Red Hat Quay の最新リリースや Red Hat Quay に関連するその他の変更を確認するには、Red Hat Customer Portal で更新通知に登録してください。通知に登録すると、Red Hat Quay の新しいバージョン、ドキュメントの更新、その他の Red Hat Quay のニュースをお知らせする通知を受け取ることができます。
- Red Hat カスタマーアカウントの認証情報を使用して Red Hat カスタマーポータル にログインします。
- ユーザー名 (右上隅) を選択して、Red Hat アカウントとカスタマーポータルの選択を表示します。
- Notifications を選択します。あなたのプロフィール活動ページが表示されます。
- Notifications タブを選択します。
- Manage Notifications を選択します。
- Follow を選択し、ドロップダウンボックスから Product を選択します。
- 製品の横にあるドロップダウンボックスで、Red Hat Quay を検索して選択します。
- SAVE NOTIFICATION ボタンを選択します。今後、Red Hat Quay 製品に新しいリリースなどの変更があった場合には、通知が届きます。
第4章 SSL を使用した Red Hat Quay への接続の保護
4.1. SSL/TLS の使用
自己署名証明書を使用して Red Hat Quay を設定するには、認証局 (CA) と ssl.cert
および ssl.key
という名前のプライマリーキーファイルを作成する必要があります。
以下の例では、/etc/hosts
ファイルにエントリーを追加するなど、DNS または別の命名メカニズムを使用してサーバーホスト名 quay-server.example.com
を設定していることを前提としています。詳細は、「Red Hat Quay のポートマッピングの設定」を参照してください。
4.2. 認証局の作成
認証局 (CA) を作成するには、次の手順を使用します。
手順
次のコマンドを入力して、ルート CA キーを生成します。
$ openssl genrsa -out rootCA.key 2048
次のコマンドを入力して、ルート CA 証明書を生成します。
$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
サーバーのホスト名など、証明書の要求に組み込まれる情報を入力します。以下に例を示します。
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.2.1. 証明書への署名
証明書に署名するには、次の手順を使用します。
手順
次のコマンドを入力してサーバーキーを生成します。
$ openssl genrsa -out ssl.key 2048
次のコマンドを入力して、署名リクエストを生成します。
$ openssl req -new -key ssl.key -out ssl.csr
サーバーのホスト名など、証明書の要求に組み込まれる情報を入力します。以下に例を示します。
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
以下のようにサーバーのホスト名を指定して、設定ファイルの
openssl.cnf
を作成します。openssl.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
設定ファイルを使用して、証明書
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
4.3. コマンドラインインターフェイスを使用した SSL/TLS の設定
CLI を使用して SSL/TLS を設定するには、次の手順を実行します。
前提条件
- 認証局を作成して証明書に署名している。
手順
証明書ファイルとプライマリーキーファイルを設定ディレクトリーにコピーして、それぞれ
ssl.cert
とssl.key
という名前が付けられていることを確認します。cp ~/ssl.cert ~/ssl.key $QUAY/config
次のコマンドを入力して、
$QUAY/config
ディレクトリーに移動します。$ cd $QUAY/config
config.yaml
ファイルを編集し、Red Hat Quay が TLS/SSL を処理するように指定します。config.yaml
... SERVER_HOSTNAME: quay-server.example.com ... PREFERRED_URL_SCHEME: https ...
オプション: 次のコマンドを入力して、rootCA.pem ファイルの内容を ssl.cert ファイルの末尾に追加します。
$ cat rootCA.pem >> ssl.cert
次のコマンドを入力して、
Quay
コンテナーを停止します。$ sudo podman stop 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.12.0
4.4. Red Hat Quay UI を使用した SSL/TLS の設定
Red Hat Quay UI を使用して SSL/TLS を設定するには、次の手順を実行します。
コマンドラインインターフェイスを使用して SSL/TLS を設定するには、「コマンドラインインターフェイスを使用した SSL/TLS の設定」を参照してください。
前提条件
- 認証局を作成して証明書に署名している。
手順
Quay
コンテナーを設定モードで起動します。$ sudo podman run --rm -it --name quay_config -p 80:8080 -p 443:8443 registry.redhat.io/quay/quay-rhel8:v3.12.0 config secret
- Server Configuration セクションで、Red Hat Quay handles TLS を選択します。前に作成した証明書ファイルと秘密鍵ファイルをアップロードし、Server Hostname 証明書の作成時に使用された値と一致することを確認します。
- 更新された設定を検証およびダウンロードします。
次のコマンドを入力して、
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.12.0
4.5. CLI を使用した SSL/TLS 設定のテスト
CLI を使用して SSL/TLS 設定をテストするには、次の手順を実行します。
手順
次のコマンドを入力して、SSL/TLS が有効な Red Hat Quay レジストリーへのログインを試行します。
$ sudo podman login quay-server.example.com
出力例
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=false
オプションを使用する必要があります。$ sudo podman login --tls-verify=false quay-server.example.com
出力例
Login Succeeded!
後のセクションで、ルート認証局を信頼するように Podman を設定します。
4.6. ブラウザーを使用した SSL/TLS 設定のテスト
ブラウザーを使用して SSL/TLS 設定をテストするには、次の手順を実行します。
手順
Red Hat Quay レジストリーエンドポイント (例:
https://quay-server.example.com)
に移動します。正しく設定されている場合、潜在的なリスクについての警告がブラウザーに表示されます。ログイン画面に進みます。接続が安全ではないという通知がブラウザーに表示されます。以下に例を示します。
次のセクションで、ルート認証局を信頼するように Podman を設定します。
4.7. 認証局を信頼するように Podman を設定する
Podman は、/etc/containers/certs.d/
と /etc/docker/certs.d/
の 2 つのパスを使用して認証局 (CA) ファイルを検出します。CA を信頼するように Podman を設定するには、次の手順を使用します。
手順
ルート CA ファイルを
/etc/containers/certs.d/
または/etc/docker/certs.d/
のいずれかにコピーします。サーバーのホスト名によって決定される正確なパスを使用し、ファイルにca.crt
という名前を付けます。$ sudo cp rootCA.pem /etc/containers/certs.d/quay-server.example.com/ca.crt
Red Hat Quay レジストリーにログインするときに
--tls-verify=false
オプションを使用する必要がなくなったことを確認します。$ sudo podman login quay-server.example.com
出力例
Login Succeeded!
4.8. 認証局を信頼するようにシステムを設定
認証局を信頼するようにシステムを設定するには、次の手順を使用します。
手順
次のコマンドを入力して、
rootCA.pem
ファイルをシステム全体の統合トラストストアにコピーします。$ sudo cp rootCA.pem /etc/pki/ca-trust/source/anchors/
次のコマンドを入力して、システム全体のトラストストア設定を更新します。
$ sudo update-ca-trust extract
オプション:
trust list
コマンドを使用して、Quay
サーバーが設定されていることを確認できます。$ trust list | grep quay label: quay-server.example.com
https://quay-server.example.com
でレジストリーを参照すると、接続が安全であることを示すロックアイコンが表示されます。rootCA.pem
ファイルをシステム全体の信頼から削除するには、ファイルを削除して設定を更新します。$ sudo rm /etc/pki/ca-trust/source/anchors/rootCA.pem
$ sudo update-ca-trust extract
$ trust list | grep quay
詳細は、RHEL 9 のドキュメントの 共有システム証明書の使用 を参照してください。
第5章 Red Hat Quay コンテナーへの TLS 証明書の追加
カスタム TLS 証明書を Red Hat Quay に追加するには、Red Hat Quay の config ディレクトリーの下に extra_ca_certs/
という名前の新しいディレクトリーを作成します。必要なサイト固有の TLS 証明書をこの新しいディレクトリーにコピーします。
5.1. TLS 証明書を Red Hat Quay に追加
コンテナーに追加される証明書を表示します。
$ cat storage.crt -----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV [...] -----END CERTIFICATE-----
certs ディレクトリーを作成し、そこに証明書をコピーします。
$ mkdir -p quay/config/extra_ca_certs $ cp storage.crt quay/config/extra_ca_certs/ $ tree quay/config/ ├── config.yaml ├── extra_ca_certs │ ├── storage.crt
Quay
コンテナーのCONTAINER ID
をpodman ps
で取得します。$ sudo podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS 5a3e82c4a75f <registry>/<repo>/quay:v3.12.0 "/sbin/my_init" 24 hours ago Up 18 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 443/tcp grave_keller
その ID でコンテナーを再起動します。
$ sudo podman restart 5a3e82c4a75f
コンテナーの名前空間にコピーされた証明書を調べます。
$ sudo podman exec -it 5a3e82c4a75f cat /etc/ssl/certs/storage.pem -----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV
5.2. Red Hat Quay が Kubernetes にデプロイされている場合のカスタム SSL/TLS 証明書の追加
Kubernetes にデプロイすると、Red Hat Quay は config アセットを保存するボリュームとしてシークレットにマウントします。現在、これによりスーパーユーザーパネルの証明書のアップロード機能が中断されます。
一時的な回避策として、Red Hat Quay の デプロイ後 に、base64
でエンコードされた証明書をシークレットに追加できます。
Red Hat Quay が Kubernetes にデプロイされている場合は、次の手順を使用してカスタム SSL/TLS 証明書を追加します。
前提条件
- Red Hat Quay がデプロイされている。
-
カスタムの
ca.crt
ファイルがある。
手順
次のコマンドを入力して、SSL/TLS 証明書の内容を Base64 でエンコードします。
$ cat ca.crt | base64 -w 0
出力例
...c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
次の
kubectl
コマンドを入力して、quay-enterprise-config-secret
ファイルを編集します。$ kubectl --namespace quay-enterprise edit secret/quay-enterprise-config-secret
証明書のエントリーを追加し、
base64
でエンコードされた完全なストリンガーをエントリーの下に貼り付けます。以下に例を示します。custom-cert.crt: c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
kubectl delete
コマンドを使用して、すべての Red Hat Quay Pod を削除します。以下に例を示します。$ kubectl delete pod quay-operator.v3.7.1-6f9d859bd-p5ftc quayregistry-clair-postgres-7487f5bd86-xnxpr quayregistry-quay-app-upgrade-xq2v6 quayregistry-quay-database-859d5445ff-cqthr quayregistry-quay-redis-84f888776f-hhgms
その後、Red Hat Quay デプロイメントにより、Pod を新しい証明書データに置き換えるスケジュールが自動的に設定されます。
第6章 Elasticsearch と Splunk のアクションログストレージの設定
デフォルトでは、使用状況ログが Red Hat Quay データベースに保存され、Web UI を通じて組織レベルおよびリポジトリーレベルで公開されます。ログエントリーを見るには、適切な管理者権限が必要です。ログに記録された操作が大量にあるデプロイメントの場合は、Red Hat Quay データベースバックエンドの代わりに Elasticsearch と Splunk に使用ログを保存できます。
6.1. Elasticsearch のアクションログストレージの設定
Elasticsearch のアクションログストレージを設定するには、カスタマイズ可能なコンポーネントとして Red Hat Quay に含まれていないため、独自の Elasticsearch スタックを提供する必要があります。
Elasticsearch ロギングの有効化は、Red Hat Quay のデプロイメント中、またはデプロイメント後に config.yaml
ファイルを更新することで実行できます。設定すると、Web UI を介してリポジトリーと組織の使用状況ログへのアクセスが引き続き提供されます。
Elasticsearch のアクションログストレージを設定するには、次の手順を使用します。
手順
- Elasticsearch のアカウントを取得します。
Red Hat Quay
config.yaml
ファイルを更新して、以下の情報を含めます。# ... LOGS_MODEL: elasticsearch 1 LOGS_MODEL_CONFIG: producer: elasticsearch 2 elasticsearch_config: host: http://<host.elasticsearch.example>:<port> 3 port: 9200 4 access_key: <access_key> 5 secret_key: <secret_key> 6 use_ssl: True 7 index_prefix: <logentry> 8 aws_region: <us-east-1> 9 # ...
- 1
- ログデータを処理する方法。
- 2
- Elasticsearch または Kinesis のいずれかを選択して、ログを AWS 上の中間 Kinesis ストリームに送信します。Kinesis から Elasticsearch にログを送信するには、Logstash などの独自のパイプラインを設定する必要があります。
- 3
- Elasticsearch サービスを提供するシステムのホスト名または IP アドレス。
- 4
- 入力したホスト上で Elasticsearch サービスを提供するポート番号。ポートが、Red Hat Quay レジストリーを実行しているすべてのシステムからアクセス可能でなければならないことに注意してください。デフォルトは TCP ポート
9200
です。 - 5
- 必要に応じて、Elasticsearch サービスにアクセスするために必要なアクセスキー。
- 6
- 必要に応じて、Elasticsearch サービスにアクセスするために必要なシークレットキー。
- 7
- Elasticsearch に SSL/TLS を使用するかどうか。デフォルトは
True
に設定されます。 - 8
- ログエントリーにアタッチする接頭辞を選択します。
- 9
- AWS 上で実行している場合は、AWS リージョンを設定します (それ以外の場合は空白のままにします)。
オプション: ログプロデューサーとして Kinesis を使用している場合は、
config.yaml
ファイルに次のフィールドを含める必要があります。kinesis_stream_config: stream_name: <kinesis_stream_name> 1 access_key: <aws_access_key> 2 secret_key: <aws_secret_key> 3 aws_region: <aws_region> 4
-
config.yaml
ファイルを保存し、Red Hat Quay デプロイメントを再起動します。
6.2. Splunk のアクションログストレージの設定
Splunk は、Red Hat Quay データのログ分析を提供できる Elasticsearch の代替手段です。
Splunk ロギングの有効化は、Red Hat Quay のデプロイメント中またはデプロイメント後に設定ツールを使用して行うことができます。設定には、アクションログを Splunk に直接転送するか、Splunk HTTP Event Collector (HEC) に転送するかのオプションが含まれます。
Red Hat Quay デプロイメントで Splunk を有効にするには、次の手順を使用します。
6.2.1. Splunk のインストールとユーザー名の作成
Splunk 認証情報をインストールして作成するには、次の手順を使用します。
手順
- Splunk に移動し、必要な認証情報を入力して、Splunk アカウントを作成します。
- Splunk Enterprise Free Trial ページに移動し、プラットフォームとインストールパッケージを選択して、Download Now をクリックします。
-
マシンに Splunk ソフトウェアをインストールします。プロンプトが表示されたら、
splunk_admin
などのユーザー名とパスワードを作成します。 -
ユーザー名とパスワードを作成すると、Splunk 導入用のローカルホスト URL (例:
http://<sample_url>.remote.csb:8000/
) が提供されます。お好みのブラウザーで URL を開きます。 - インストール時に作成したユーザー名とパスワードを使用してログインします。Splunk UI にリダイレクトします。
6.2.2. Splunk トークンの生成
次のいずれかの手順を使用して、Splunk のベアラートークンを作成します。
6.2.2.1. Splunk UI を使用した Splunk トークンの生成
Splunk UI を使用して Splunk のベアラートークンを作成するには、次の手順を実行します。
前提条件
- Splunk をインストールし、ユーザー名を作成している。
手順
- Splunk UI で、Settings → Tokens に移動します。
- Enable Token Authentication をクリックします。
- 必要に応じて、Token Settings をクリックし、Token Authentication を選択して、Token Authentication が有効になっていることを確認します。
- オプション: トークンの有効期限を設定します。このデフォルトは 30 日です。
- Save をクリックします。
- New Token をクリックします。
- User および Audience の情報を入力します。
- オプション: Expiration および Not Before 情報を設定します。
Create をクリックします。トークンが Token ボックスに表示されます。トークンをすぐにコピーします。
重要トークンをコピーする前にボックスを閉じた場合は、新しいトークンを作成する必要があります。New Token ウィンドウを閉じると、トークン全体が使用できなくなります。
6.2.2.2. CLI を使用した Splunk トークンの生成
CLI を使用して Splunk のベアラートークンを作成するには、次の手順を実行します。
前提条件
- Splunk をインストールし、ユーザー名を作成している。
手順
CLI で次の
CURL
コマンドを入力してトークン認証を有効にし、Splunk ユーザー名とパスワードを渡します。$ curl -k -u <username>:<password> -X POST <scheme>://<host>:<port>/services/admin/token-auth/tokens_auth -d disabled=false
次の
CURL
コマンドを入力し、Splunk ユーザー名とパスワードを渡してトークンを作成します。$ curl -k -u <username>:<password> -X POST <scheme>://<host>:<port>/services/authorization/tokens?output_mode=json --data name=<username> --data audience=Users --data-urlencode expires_on=+30d
- 生成されたベアラートークンを保存します。
6.2.3. Splunk を使用するための Red Hat Quay の設定
Splunk または Splunk HTTP Event Collector (HEC) を使用するように Red Hat Quay を設定するには、次の手順に従います。
前提条件
- Splunk をインストールし、ユーザー名を作成している。
- Splunk ベアラートークンを生成している。
手順
Splunk または Splunk HTTP Event Collector (HEC) を使用するように Red Hat Quay を設定します。
Splunk を使用する場合は、Red Hat Quay の
config.yaml
ファイルを開き、次の設定フィールドを追加します。# ... LOGS_MODEL: splunk LOGS_MODEL_CONFIG: producer: splunk splunk_config: host: http://<user_name>.remote.csb 1 port: 8089 2 bearer_token: <bearer_token> 3 url_scheme: <http/https> 4 verify_ssl: False 5 index_prefix: <splunk_log_index_name> 6 ssl_ca_path: <location_to_ssl-ca-cert.pem> 7 # ...
- 1
- 文字列。Splunk クラスターのエンドポイント。
- 2
- integerSplunk 管理クラスターのエンドポイントポート。Splunk GUI でホストされるポートとは異なります。Splunk UI の Settings → Server Settings → General Settings にあります。
- 3
- 文字列。Splunk 用に生成されたベアラートークン。
- 4
- 文字列。Splunk サービスにアクセスするための URL スキーム。Splunk が TLS/SSL を使用するように設定されている場合、これは
https
である必要があります。 - 5
- ブール値。TLS/SSL を有効にするかどうか。デフォルトは
true
です。 - 6
- 文字列。Splunk インデックスの接頭辞。新しいインデックスまたは使用済みのインデックスを使用できます。Splunk UI から作成できます。
- 7
- 文字列。TLS/SSL 検証用の認証局 (CA) を含む単一の
.pem
ファイルへの相対コンテナーパス。
Splunk HEC を使用する場合は、Red Hat Quay の
config.yaml
ファイルを開き、次の設定フィールドを追加します。# ... LOGS_MODEL: splunk LOGS_MODEL_CONFIG: producer: splunk_hec 1 splunk_hec_config: 2 host: prd-p-aaaaaq.splunkcloud.com 3 port: 8088 4 hec_token: 12345678-1234-1234-1234-1234567890ab 5 url_scheme: https 6 verify_ssl: False 7 index: quay 8 splunk_host: quay-dev 9 splunk_sourcetype: quay_logs 10 # ...
- 1
- Splunk HEC を設定する場合は
splunk_hec
を指定します。 - 2
- Splunk HTTP Event Collector のアクションログ設定のログモデル設定。
- 3
- Splunk クラスターのエンドポイント。
- 4
- Splunk 管理クラスターのエンドポイントポート。
- 5
- Splunk の HEC トークン。
- 6
- Splunk サービスにアクセスするための URL スキーム。Splunk が SSL/TLS の背後にある場合は、
https
にする必要があります。 - 7
- ブール値。HTTPS 接続の SSL/TLS 検証を有効 (true) または無効 (false) にします。
- 8
- 使用する Splunk インデックス。
- 9
- このイベントをログに記録するホスト名。
- 10
- 使用する Splunk
sourcetype
の名前。
ssl_ca_path
を設定している場合は、Red Hat Quay が信頼するように SSL/TLS 証明書を設定する必要があります。-
Red Hat Quay のスタンドアロンデプロイメントを使用している場合は、証明書ファイルを
extra_ca_certs
ディレクトリー内、または相対コンテナーパス内に配置してssl_ca_path
で指定することで、SSL/TLS 証明書を提供できます。 Red Hat Quay Operator を使用している場合は、Splunk サーバーの認証局 (CA) を含む設定バンドルのシークレットを作成します。以下に例を示します。
$ oc create secret generic --from-file config.yaml=./config_390.yaml --from-file extra_ca_cert_splunkserver.crt=./splunkserver.crt config-bundle-secret
config.yaml
にconf/stack/extra_ca_certs/splunkserver.crt
ファイルを指定します。以下に例を示します。# ... LOGS_MODEL: splunk LOGS_MODEL_CONFIG: producer: splunk splunk_config: host: ec2-12-345-67-891.us-east-2.compute.amazonaws.com port: 8089 bearer_token: eyJra url_scheme: https verify_ssl: true index_prefix: quay123456 ssl_ca_path: conf/stack/splunkserver.crt # ...
-
Red Hat Quay のスタンドアロンデプロイメントを使用している場合は、証明書ファイルを
6.2.4. アクションログの作成
次の手順を使用して、アクションログを Splunk に転送できるユーザーアカウントを作成します。
Red Hat Quay アクションログを表示するには、Splunk UI を使用する必要があります。現時点では、Red Hat Quay 使用状況ログ ページでの Splunk アクションログの表示はサポートされておらず、次のメッセージが返されます。Method not implemented.Splunk does not support log lookups
前提条件
- Splunk をインストールし、ユーザー名を作成している。
- Splunk ベアラートークンを生成している。
-
Splunk を有効にするように Red Hat Quay
config.yaml
ファイルを設定している。
手順
- Red Hat Quay デプロイメントにログインします。
- Splunk のアクションログの作成に使用する組織の名前をクリックします。
- ナビゲーションウィンドウで、Robot Accounts → Create Robot Account をクリックします。
-
プロンプトが表示されたら、ロボットアカウントの名前 (例:
spunkrobotaccount
) を入力して、Create robot account をクリックします。 - ブラウザーで Splunk UI を開きます。
- Search and Reporting をクリックします。
検索バーにインデックスの名前 (例:
<splunk_log_index_name>
) を入力し、Enter を押します。検索結果が Splunk UI に表示されます。ログは JSON 形式で転送されます。応答は以下のようになります。
{ "log_data": { "kind": "authentication", 1 "account": "quayuser123", 2 "performer": "John Doe", 3 "repository": "projectQuay", 4 "ip": "192.168.1.100", 5 "metadata_json": {...}, 6 "datetime": "2024-02-06T12:30:45Z" 7 } }
6.3. 使用状況ログについて
デフォルトでは、使用状況ログは Red Hat Quay データベースに保存されます。ログは、Web UI、組織レベル、リポジトリーレベル、および スーパーユーザー管理パネル を通じて公開されます。
データベースのログには、アカウントプランの変更、ユーザーアクション、一般的な操作など、Red Hat Quay のさまざまなイベントが記録されます。ログエントリーには、実行されたアクション (kind_id
)、アクションを実行したユーザー (account_id
または performer_id
)、タイムスタンプ (datetime
)、およびアクションに関連付けられたその他の関連データ (metadata_json
) などの情報が含まれています。
6.3.1. データベースログの表示
次の手順では、PostgreSQL データベースに保存されているリポジトリーログを表示する方法を示します。
前提条件
- 管理者権限がある。
-
psql
CLI ツールがインストールされている。
手順
次のコマンドを入力して、Red Hat Quay PostgreSQL データベースにログインします。
$ psql -h <quay-server.example.com> -p 5432 -U <user_name> -d <database_name>
出力例
psql (16.1, server 13.7) Type "help" for help.
オプション: PostgreSQL データベースのテーブルリストを表示するには、次のコマンドを入力します。
quay=> \dt
出力例
List of relations Schema | Name | Type | Owner --------+----------------------------+-------+---------- public | logentry | table | quayuser public | logentry2 | table | quayuser public | logentry3 | table | quayuser public | logentrykind | table | quayuser ...
次のコマンドを入力すると、ログ情報を返すために必要な
repository_ids
のリストが返されます。quay=> SELECT id, name FROM repository;
出力例
id | name ----+--------------------- 3 | new_repository_name 6 | api-repo 7 | busybox ...
logentry3
リレーションを使用していずれかのリポジトリーに関するログ情報を表示するには、次のコマンドを入力します。SELECT * FROM logentry3 WHERE repository_id = <repository_id>;
出力例
id | kind_id | account_id | performer_id | repository_id | datetime | ip | metadata_json 59 | 14 | 2 | 1 | 6 | 2024-05-13 15:51:01.897189 | 192.168.1.130 | {"repo": "api-repo", "namespace": "test-org"}
上記の例では、次の情報が返されます。
{ "log_data": { "id": 59 1 "kind_id": "14", 2 "account_id": "2", 3 "performer_id": "1", 4 "repository_id": "6", 5 "ip": "192.168.1.100", 6 "metadata_json": {"repo": "api-repo", "namespace": "test-org"} 7 "datetime": "2024-05-13 15:51:01.897189" 8 } }
6.3.2. ログエントリー kind_ids
次の表は、Red Hat Quay のアクションに関連付けられている kind_ids
を表しています。
kind_id | アクション | 説明 |
---|---|---|
1 | account_change_cc | クレジットカード情報の変更。 |
2 | account_change_password | アカウントパスワードの変更。 |
3 | account_change_plan | アカウントプランの変更。 |
4 | account_convert | アカウント変換。 |
5 | add_repo_accesstoken | リポジトリーへのアクセストークンの追加。 |
6 | add_repo_notification | リポジトリーへの通知の追加。 |
7 | add_repo_permission | リポジトリーへの権限の追加。 |
8 | add_repo_webhook | リポジトリーへの Webhook の追加。 |
9 | build_dockerfile | Dockerfile の構築。 |
10 | change_repo_permission | リポジトリーの権限の変更。 |
11 | change_repo_visibility | リポジトリーの可視性の変更。 |
12 | create_application | アプリケーションの作成。 |
13 | create_prototype_permission | プロトタイプの権限の作成。 |
14 | create_repo | リポジトリーの作成。 |
15 | create_robot | ロボット (サービスアカウントまたはボット) の作成。 |
16 | create_tag | タグの作成。 |
17 | delete_application | アプリケーションの削除。 |
18 | delete_prototype_permission | プロトタイプの権限の削除。 |
19 | delete_repo | リポジトリーの削除。 |
20 | delete_repo_accesstoken | リポジトリーからのアクセストークンの削除。 |
21 | delete_repo_notification | リポジトリーからの通知の削除。 |
22 | delete_repo_permission | リポジトリーからの権限の削除。 |
23 | delete_repo_trigger | リポジトリートリガーの削除。 |
24 | delete_repo_webhook | リポジトリーからの Webhook の削除。 |
25 | delete_robot | ロボットの削除。 |
26 | delete_tag | タグの削除。 |
27 | manifest_label_add | マニフェストへのラベルの追加。 |
28 | manifest_label_delete | マニフェストからのラベルの削除。 |
29 | modify_prototype_permission | プロトタイプの権限の変更。 |
30 | move_tag | タグの移動。 |
31 | org_add_team_member | チームへのメンバーの追加。 |
32 | org_create_team | 組織内のチームの作成。 |
33 | org_delete_team | 組織内のチームの削除。 |
34 | org_delete_team_member_invite | チームメンバーの招待の削除。 |
35 | org_invite_team_member | 組織内のチームへのメンバー招待。 |
36 | org_remove_team_member | チームからのメンバーの削除。 |
37 | org_set_team_description | チームの説明の設定。 |
38 | org_set_team_role | チームの役割の設定。 |
39 | org_team_member_invite_accepted | チームメンバーの招待の承諾。 |
40 | org_team_member_invite_declined | チームメンバーの招待の辞退。 |
41 | pull_repo | リポジトリーからのプル。 |
42 | push_repo | リポジトリーへのプッシュ。 |
43 | regenerate_robot_token | ロボットトークンの再生成。 |
44 | repo_verb | 一般的なリポジトリーアクション (詳細は他の場所で定義されている場合があります)。 |
45 | reset_application_client_secret | アプリケーションのクライアントシークレットのリセット。 |
46 | revert_tag | タグを元に戻す操作。 |
47 | service_key_approve | サービスキーの承認。 |
48 | service_key_create | サービスキーの作成。 |
49 | service_key_delete | サービスキーの削除。 |
50 | service_key_extend | サービスキーの拡張。 |
51 | service_key_modify | サービスキーの変更。 |
52 | service_key_rotate | サービスキーのローテーション。 |
53 | setup_repo_trigger | リポジトリートリガーの設定。 |
54 | set_repo_description | リポジトリーの説明の設定。 |
55 | take_ownership | リソースの所有権の取得。 |
56 | update_application | アプリケーションの更新。 |
57 | change_repo_trust | リポジトリーの信頼レベルの変更。 |
58 | reset_repo_notification | リポジトリー通知のリセット。 |
59 | change_tag_expiration | タグの有効期限の変更。 |
60 | create_app_specific_token | アプリケーション固有のトークンの作成。 |
61 | revoke_app_specific_token | アプリケーション固有のトークンの取り消し。 |
62 | toggle_repo_trigger | リポジトリートリガーのオン/オフの切り替え。 |
63 | repo_mirror_enabled | リポジトリーミラーリングの有効化。 |
64 | repo_mirror_disabled | リポジトリーのミラーリングの無効化。 |
65 | repo_mirror_config_changed | リポジトリーミラーリングの設定の変更。 |
66 | repo_mirror_sync_started | リポジトリーミラーの同期の開始。 |
67 | repo_mirror_sync_failed | リポジトリーミラーの同期が失敗しました。 |
68 | repo_mirror_sync_success | リポジトリーミラーの同期が成功しました。 |
69 | repo_mirror_sync_now_requested | 即時リポジトリーミラー同期が要求されました。 |
70 | repo_mirror_sync_tag_success | リポジトリーミラータグの同期が成功しました。 |
71 | repo_mirror_sync_tag_failed | リポジトリーミラータグの同期が失敗しました。 |
72 | repo_mirror_sync_test_success | リポジトリーミラー同期テストが成功しました。 |
73 | repo_mirror_sync_test_failed | リポジトリーミラー同期テストが失敗しました。 |
74 | repo_mirror_sync_test_started | リポジトリーミラー同期テストが開始されました。 |
75 | change_repo_state | リポジトリーの状態の変更。 |
76 | create_proxy_cache_config | プロキシーキャッシュ設定の作成。 |
77 | delete_proxy_cache_config | プロキシーキャッシュ設定の削除。 |
78 | start_build_trigger | ビルドトリガーの開始。 |
79 | cancel_build | ビルドのキャンセル。 |
80 | org_create | 組織の作成。 |
81 | org_delete | 組織の削除。 |
82 | org_change_email | 組織のメールアドレスの変更。 |
83 | org_change_invoicing | 組織の請求の変更。 |
84 | org_change_tag_expiration | 組織タグの有効期限の変更。 |
85 | org_change_name | 組織名の変更。 |
86 | user_create | ユーザーの作成。 |
87 | user_delete | ユーザーの削除。 |
88 | user_disable | ユーザーの無効化。 |
89 | user_enable | ユーザーの有効化。 |
90 | user_change_email | ユーザーのメールアドレスの変更。 |
91 | user_change_password | ユーザーパスワードの変更。 |
92 | user_change_name | ユーザー名の変更。 |
93 | user_change_invoicing | ユーザーの請求の変更。 |
94 | user_change_tag_expiration | ユーザータグの有効期限の変更。 |
95 | user_change_metadata | ユーザーメタデータの変更。 |
96 | user_generate_client_key | ユーザーのクライアントキーの生成。 |
97 | login_success | ログインの成功。 |
98 | logout_success | ログアウトの成功。 |
99 | permanently_delete_tag | タグの完全な削除。 |
100 | autoprune_tag_delete | 自動プルーニングタグの削除。 |
101 | create_namespace_autoprune_policy | 名前空間の自動プルーニングポリシーの作成。 |
102 | update_namespace_autoprune_policy | 名前空間の自動プルーニングポリシーの更新。 |
103 | delete_namespace_autoprune_policy | 名前空間の自動プルーニングポリシーの削除。 |
104 | login_failure | ログイン試行の失敗。 |
第7章 Clair セキュリティースキャナー
7.1. Clair 脆弱性データベース
Clair は、次の脆弱性データベースを使用して、イメージの問題を報告します。
- Ubuntu Oval データベース
- Debian Security Tracker
- Red Hat Enterprise Linux (RHEL) Oval データベース
- SUSE Oval データベース
- Oracle Oval データベース
- アルパイン SecDB データベース
- VMware Photon OS データベース
- Amazon Web Services (AWS) UpdateInfo
- Open Source Vulnerability (OSV) Database
Clair がさまざまなデータベースでセキュリティーマッピングを行う方法は、Claircore Severity Mapping を参照してください。
7.1.1. Clair の Open Source Vulnerability (OSV) データベースに関する情報
Open Source Vulnerability (OSV) は、オープンソースソフトウェアのセキュリティー脆弱性の追跡と管理に重点を置いた脆弱性データベースおよび監視サービスです。
OSV は、オープンソースプロジェクトにおける既知のセキュリティー脆弱性の包括的かつ最新のデータベースを提供します。ソフトウェア開発で使用されるライブラリー、フレームワーク、その他のコンポーネントを含む、幅広いオープンソースソフトウェアを対象としています。対象エコシステムの完全なリストについては、定義されているエコシステム を参照してください。
Clair は、Open Source Vulnerability (OSV) データベースを通じて、golang
、java
、および ruby
エコシステムの脆弱性とセキュリティー情報も報告します。
開発者や組織は、OSV を活用することで、使用するオープンソースコンポーネントのセキュリティー脆弱性をプロアクティブに監視して対処できるため、プロジェクトにおけるセキュリティー違反やデータ漏洩のリスクを軽減できます。
OSV の詳細は、OSV Web サイト を参照してください。
7.2. スタンドアロンの Red Hat Quay デプロイメントでの Clair のセットアップ
スタンドアロンの Red Hat Quay デプロイメントの場合、Clair を手動でセットアップできます。
手順
Red Hat Quay インストールディレクトリーに、Clair データベースデータ用の新しいディレクトリーを作成します。
$ mkdir /home/<user-name>/quay-poc/postgres-clairv4
次のコマンドを入力して、
postgres-clairv4
ファイルに適切な権限を設定します。$ setfacl -m u:26:-wx /home/<user-name>/quay-poc/postgres-clairv4
次のコマンドを入力して、Clair PostgreSQL データベースをデプロイします。
$ sudo podman run -d --name postgresql-clairv4 \ -e POSTGRESQL_USER=clairuser \ -e POSTGRESQL_PASSWORD=clairpass \ -e POSTGRESQL_DATABASE=clair \ -e POSTGRESQL_ADMIN_PASSWORD=adminpass \ -p 5433:5432 \ -v /home/<user-name>/quay-poc/postgres-clairv4:/var/lib/pgsql/data:Z \ registry.redhat.io/rhel8/postgresql-13:1-109
Clair デプロイメント用に PostgreSQL
uuid-ossp
モジュールをインストールします。$ sudo podman exec -it postgresql-clairv4 /bin/bash -c 'echo "CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\"" | psql -d clair -U postgres'
出力例
CREATE EXTENSION
注記Clair では、
uuid-ossp
拡張機能を PostgreSQL データベースに追加する必要があります。適切な権限を持つユーザーの場合は、拡張機能を作成すると、Clair によって自動的に追加されます。ユーザーが適切な権限を持っていない場合は、Clair を開始する前に拡張機能を追加する必要があります。拡張機能が存在しない場合は、Clair が起動しようとすると、
ERROR: Please load the "uuid-ossp" extension.(SQLSTATE 42501)
エラーが発生します。実行中の場合は、
Quay
コンテナーを停止し、設定モードで再始動して、既存の設定をボリュームとしてロードします。$ sudo podman run --rm -it --name quay_config \ -p 80:8080 -p 443:8443 \ -v $QUAY/config:/conf/stack:Z \ registry.redhat.io/quay/quay-rhel8:v3.12.0 config secret
- 設定ツールにログインし、UI の Security Scanner セクションで Enable Security Scanning をクリックします。
-
quay-server
システムでまだ使用されていないポート (8081
など) を使用して、Clair の HTTP エンドポイントを設定します。 Generate PSK ボタンを使用して、事前共有キー (PSK) を作成します。
セキュリティースキャナー UI
-
Red Hat Quay の
config.yaml
ファイルを検証してダウンロードし、設定エディターを実行しているQuay
コンテナーを停止します。 新しい設定バンドルを Red Hat Quay インストールディレクトリーに展開します。次に例を示します。
$ tar xvf quay-config.tar.gz -d /home/<user-name>/quay-poc/
Clair 設定ファイル用のフォルダーを作成します。次に例を示します。
$ mkdir /etc/opt/clairv4/config/
Clair 設定フォルダーに移動します。
$ cd /etc/opt/clairv4/config/
以下のように、Clair 設定ファイルを作成します。
http_listen_addr: :8081 introspection_addr: :8088 log_level: debug indexer: connstring: host=quay-server.example.com port=5433 dbname=clair user=clairuser password=clairpass sslmode=disable scanlock_retry: 10 layer_scan_concurrency: 5 migrations: true matcher: connstring: host=quay-server.example.com port=5433 dbname=clair user=clairuser password=clairpass sslmode=disable max_conn_pool: 100 migrations: true indexer_addr: clair-indexer notifier: connstring: host=quay-server.example.com port=5433 dbname=clair user=clairuser password=clairpass sslmode=disable delivery_interval: 1m poll_interval: 5m migrations: true auth: psk: key: "MTU5YzA4Y2ZkNzJoMQ==" iss: ["quay"] # tracing and metrics trace: name: "jaeger" probability: 1 jaeger: agent: endpoint: "localhost:6831" service_name: "clair" metrics: name: "prometheus"
Clair の設定形式の詳細は、Clair 設定リファレンス を参照してください。
コンテナーイメージを使用して Clair を起動し、作成したファイルから設定にマウントします。
$ sudo podman run -d --name clairv4 \ -p 8081:8081 -p 8088:8088 \ -e CLAIR_CONF=/clair/config.yaml \ -e CLAIR_MODE=combo \ -v /etc/opt/clairv4/config:/clair:Z \ registry.redhat.io/quay/clair-rhel8:v3.12.0
注記複数の Clair コンテナーを実行することもできますが、単一のコンテナーを超えるデプロイシナリオでは、Kubernetes や OpenShift Container Platform などのコンテナーオーケストレーターを使用することが強く推奨されます。
7.3. OpenShift Container Platform の Clair
OpenShift Container Platform 上の Red Hat Quay デプロイメントで Clair v4 (Clair) をセットアップするには、Red Hat Quay Operator を使用することが推奨されます。デフォルトでは、Red Hat Quay Operator は、Clair デプロイメントを Red Hat Quay デプロイメントとともにインストールまたはアップグレードし、Clair を自動的に設定します。
7.4. Clair のテスト
以下の手順を使用して、スタンドアロンの Red Hat Quay デプロイメントまたは OpenShift Container Platform Operator ベースのデプロイメントで Clair をテストします。
前提条件
- Clair コンテナーイメージをデプロイしている。
手順
次のコマンドを入力して、サンプルイメージをプルします。
$ podman pull ubuntu:20.04
次のコマンドを入力して、レジストリーにイメージをタグ付けします。
$ sudo podman tag docker.io/library/ubuntu:20.04 <quay-server.example.com>/<user-name>/ubuntu:20.04
以下のコマンドを入力して、イメージを Red Hat Quay レジストリーにプッシュします。
$ sudo podman push --tls-verify=false quay-server.example.com/quayadmin/ubuntu:20.04
- UI から Red Hat Quay デプロイメントにログインします。
- リポジトリー名 (quayadmin/ubuntu など) をクリックします。
ナビゲーションウィンドウで、Tags をクリックします。
レポートの概要
イメージレポート (例: 45 medium) をクリックして、より詳細なレポートを表示します。
レポートの詳細
注記場合によっては、Clair はイメージに関する重複レポートを表示します (例:
ubi8/nodejs-12
またはubi8/nodejs-16
)。これは、同じ名前の脆弱性が異なるパッケージに存在するために発生します。この動作は Clair 脆弱性レポートで予期されており、バグとしては扱われません。
第8章 リポジトリーのミラーリング
8.1. リポジトリーのミラーリング
Red Hat Quay リポジトリーミラーリングを使用すると、外部コンテナーレジストリー (または別のローカルレジストリー) から Red Hat Quay クラスターにイメージをミラーリングできます。リポジトリーミラーリングを使用すると、リポジトリー名とタグに基づいてイメージを Red Hat Quay に同期できます。
リポジトリーのミラーリングが有効になっている Red Hat Quay クラスターから、以下を実行できます。
- 外部のレジストリーからミラーリングするリポジトリーを選択する
- 外部レジストリーにアクセスするための認証情報を追加する
- 同期する特定のコンテナーイメージリポジトリー名とタグを特定する
- リポジトリーが同期される間隔を設定する
- 同期の現在の状態を確認する
ミラーリング機能を使用するには、次のアクションを実行する必要があります。
- Red Hat Quay 設定ファイルでリポジトリーのミラーリングを有効にする
- リポジトリーミラーリングワーカーを実行する
- ミラーリングされたリポジトリーを作成する
すべてのリポジトリーのミラーリング設定は、設定ツール UI または Red Hat Quay API を使用して実行できます。
8.2. Geo レプリケーションと比較したリポジトリーミラーリング
Red Hat Quay の Geo レプリケーションは、データベースが共有されている間に、2 つ以上の異なるストレージバックエンド間でイメージストレージのバックエンドデータ全体をミラーリングします (たとえば、2 つの異なる blob ストレージエンドポイントを持つ 1 つの Red Hat Quay レジストリー)。Geo レプリケーションの主なユースケースには、次のようなものがあります。
- 地理的に分散する設定向けのバイナリー Blob へのアクセス速度を上げる
- イメージのコンテンツがリージョン全体で同じであることを保証する
リポジトリーのミラーリングは、選択されたリポジトリー (またはリポジトリーのサブセット) をあるレジストリーから別のレジストリーに同期します。レジストリーは固有であり、各レジストリーには個別のデータベースおよび個別のイメージストレージがあります。
ミラーリングの主な使用例は次のとおりです。
- 異なるデータセンターまたはリージョンでの独立したレジストリーのデプロイメント。ここでは、全コンテンツの特定サブセットがデータセンター/リージョン間で共有されることになっています。
- 外部レジストリーからローカル Red Hat Quay デプロイメントへの選択された (許可リスト化された) アップストリームリポジトリーの自動同期またはミラーリング。
リポジトリーのミラーリングと Geo レプリケーションを同時に使用できます。
機能と性能 | Geo レプリケーション | リポジトリーのミラーリング |
---|---|---|
設計されている機能 | グローバルに共有されるレジストリー | 独立した異なるレジストレーション |
レプリケーションまたはミラーリングがまだ完了していない場合はどうなるか? | リモートコピーを使用する (遅くなります) | イメージが表示されない |
両地域のすべてのストレージバックエンドへのアクセスが必要か? | はい (すべての Red Hat Quay ノード) | いいえ (個別のストレージ) |
ユーザーは両方のサイトのイメージを同じリポジトリーにプッシュできるか? | はい | いいえ |
すべてのレジストリーの内容と設定がすべての地域で同一であるかどうか (共有データベース)? | はい | いいえ |
ユーザーはミラーリングする個別の namespace またはリポジトリーを選択できるか? | いいえ | はい |
ユーザーは同期ルールにフィルターを適用できるか? | いいえ | はい |
各地域で許可されている個々の/異なるロールベースのアクセス制御設定があるか? | いいえ | はい |
8.3. リポジトリーミラーリングの使用
次のリストは、Red Hat Quay リポジトリーのミラーリングの機能と制限を示しています。
- リポジトリーのミラーリングでは、リポジトリー全体をミラーリングしたり、同期するイメージを選択的に制限したりできます。フィルターは、コンマ区切りのタグのリスト、タグの範囲、または Unix シェルスタイルのワイルドカードを使用してタグを識別するその他の手段に基づくことができます。詳細は、ワイルドカード のドキュメントを参照してください。
- ミラーリングされたリポジトリーとして設定した場合は、そのリポジトリーに他のイメージを手動で追加できません。
- ミラーリングされたリポジトリーは設定したリポジトリーとタグに基づいているため、リポジトリーとタグのペアで表されるコンテンツのみが保持されます。たとえば、タグを変更してリポジトリー内の一部のイメージが一致しなくなると、それらのイメージは削除されます。
- 指定されたロボットだけが、ミラーリングされたリポジトリーにイメージをプッシュすることができ、リポジトリーに設定されたロールベースのアクセスコントロール権限に優先します。
- ミラーリングは、障害時にロールバックする または、ベストエフォートベースで実行するように設定できます。
- ミラーリングされたリポジトリーでは、read 権限を持つユーザーはリポジトリーからイメージをプルできますが、イメージをリポジトリーにプッシュすることはできません。
- ミラーリングされたリポジトリーの設定の変更は、Red Hat Quay ユーザーインターフェイスで、作成したミラーリングされたリポジトリーの Repositories → Mirrors タブを使用して実行できます。
- イメージは一定の間隔で同期されますが、必要に応じて同期することもできます。
8.4. 設定のミラーリング UI
設定モードで
Quay
コンテナーを起動し、Enable Repository Mirroring チェックボックスを選択します。HTTPS 通信を必要とし、ミラーリング時に証明書を検証する必要がある場合は、HTTPS を選択し、証明書の検証のチェックボックスを選択します。-
configuration
を検証し、ダウンロードしてから、更新された設定ファイルを使用してレジストリーモードで Quay を再起動します。
8.5. 設定フィールドのミラーリング
フィールド | 型 | 説明 |
---|---|---|
FEATURE_REPO_MIRROR | ブール値 |
リポジトリーミラーリングを有効または無効にします。 |
REPO_MIRROR_INTERVAL | 数値 |
次にリポジトリーミラー候補をチェックするまでの秒数。 |
REPO_MIRROR_SERVER_HOSTNAME | 文字列 |
|
REPO_MIRROR_TLS_VERIFY | ブール値 |
HTTPS を必要とし、ミラー時に Quay レジストリーの証明書を検証します。 |
REPO_MIRROR_ROLLBACK | ブール値 |
デフォルト: |
8.6. ミラーリングワーカー
次の手順を使用して、リポジトリーミラーリングワーカーを開始します。
手順
/root/ca.crt
証明書を使用して TLS 通信を設定していない場合は、次のコマンドを入力し、repomirror
オプションを指定して、Quay
Pod を開始します。$ sudo podman run -d --name mirroring-worker \ -v $QUAY/config:/conf/stack:Z \ registry.redhat.io/quay/quay-rhel8:v3.12.0 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:Z \ registry.redhat.io/quay/quay-rhel8:v3.12.0 repomirror
8.7. ミラーリングされたリポジトリーの作成
外部コンテナーレジストリーからリポジトリーをミラーリングする場合は、新しいプライベートリポジトリーを作成する必要があります。通常、同じ名前がターゲットリポジトリーとして使用されます (例: quay-rhel8
)。
8.7.1. リポジトリーのミラーリングの設定
ミラーリングされたリポジトリーの設定を調整するには、次の手順を使用します。
前提条件
- Red Hat Quay 設定ファイルでリポジトリーミラーリングを有効にしている。
- ミラーリングワーカーをデプロイしている。
手順
Settings タブで、Repository State を
Mirror
に設定します。Mirror タブで、タグ、スケジューリング、およびアクセス情報と共に外部レジストリーに接続するための情報を入力します。
必要に応じて、以下のフィールドに詳細を入力します。
-
Registry Location: ミラーリングする外部リポジトリー (例:
registry.redhat.io/quay/quay-rhel8
)。 - Tags: このフィールドは必須です。個別のタグまたはタグパターンのコンマ区切りのリストを入力できます。(詳細は、タグパターン のセクションを参照してください。)
- Start Date: ミラーリングが開始する日付。現在の日時がデフォルトで使用されます。
- Sync Interval: デフォルトで 24 時間ごとの同期に設定されます。これは時間または日に基づいて変更できます。
- Robot User: 新しい robot アカウントを作成するか、既存の robot アカウントを選択してミラーリングを実行します。
- Username: ミラーリングするリポジトリーを保持する外部レジストリーにアクセスするためのユーザー名。
- Password: ユーザー名に関連付けられたパスワード。パスワードにはエスケープ文字 (\) を必要とする文字を使用できないことに注意してください。
-
Registry Location: ミラーリングする外部リポジトリー (例:
8.7.2. 詳細設定
Advanced Settings セクションでは、次のオプションを使用して SSL/TLS とプロキシーを設定できます。
- Verify TLS: ターゲットのリモートレジストリーと通信するときに HTTPS を要求し、証明書を検証する場合は、このオプションを選択します。
- Accept Unsigned Images: このオプションを選択すると、署名されていないイメージをミラーリングできます。
- HTTP Proxy: ターゲットのリモートレジストリーと通信するときに HTTPS を要求し、証明書を検証する場合は、このオプションを選択します。
- HTTPS PROXY: プロキシーサーバーが必要な場合は、リモートサイトにアクセスするために必要な HTTPS プロキシーサーバーを特定します。
- No Proxy: プロキシーを必要としない場所のリスト。
8.7.3. 今すぐ同期する
ミラーリング操作を開始するには、次の手順を使用します。
手順
即時にミラーリング操作を実行するには、リポジトリーの Mirroring タブで Sync Now ボタンを押します。ログは、Usage Logs タブで利用できます。
ミラーリングが完了すると、イメージは Tags タブに表示されます。
以下は、完了した Repository Mirroring 画面の例です。
8.8. ミラーリングのイベント通知
リポジトリーミラーリングには、3 つの通知イベントがあります。
- リポジトリーミラーリングの開始
- リポジトリーのミラーリングの成功
- リポジトリーミラーリングの失敗
イベントは各リポジトリーの Settings タブ内で設定でき、電子メール、Slack、Quay UI、Webhook などの既存の通知方法がすべてサポートされています。
8.9. タグパターンのミラーリング
少なくとも 1 つのタグを入力する必要があります。次の表は、考えられるイメージタグのパターンを示しています。
8.9.1. パターン構文
パターン | 説明 |
* | すべての文字に一致。 |
? | 任意の単一文字に一致。 |
[seq] | seq の任意の文字と一致。 |
[!seq] | seq にない文字と一致。 |
8.9.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 |
8.10. ミラーリングされたリポジトリーの使用
ミラーリングされたリポジトリーを作成した後、そのリポジトリーを操作する方法はいくつかあります。Repositories ページからミラーリングされたリポジトリーを選択して、以下のいずれかを行います。
- リポジトリーの有効化/無効化: 左列の Mirroring ボタンを選択してから Enabled チェックボックスを切り替え、一時的にリポジトリーを有効または無効にします。
ミラーログの確認: ミラーリングされたリポジトリーが正常に動作していることを確認するために、ミラーログを確認することができます。そのためには、左カラムの Usage Logs ボタンを選択します。以下に例を示します。
- 今すぐミラーを同期: リポジトリー内のイメージをすぐに同期するには、Sync Now ボタンを選択します。
- クレデンシャルの変更: ユーザー名とパスワードを変更するには、Credentials の行から DELETE を選択します。その後、なしを選択し、プロンプトが表示されたら、外部レジストリーにログインするために必要なユーザー名とパスワードを追加します。
- ミラーリングのキャンセル: ミラーリングを中止するには、CANCEL ボタンを選択します。これにより、現在のイメージはそのまま利用できますが、新しいイメージは同期されなくなります。
ロボットのパーミッション設定: Red Hat Quay のロボットアカウントは、外部のリポジトリーにアクセスするための認証情報を保持する名前付きのトークンです。ロボットに認証情報を割り当てることで、そのロボットは、同じ外部レジストリーにアクセスする必要のある複数のミラーリングされたリポジトリーで使用することができます。
既存のロボットをリポジトリーに割り当てるには、Account Settings を開き、左カラムの Robot Accounts アイコンを選択します。ロボットアカウントの場合は、REPOSITORIES 欄のリンクを選択します。ポップアップウィンドウから、以下のことができます。
- そのロボットにどのリポジトリーが割り当てられているかを確認します。
- この図に示されている PERMISSION フィールドから対象のロボットに読み取り、書き込み、または管理者権限を割り当てます。
ロボット認証情報の変更: ロボットは、Kubernetes の秘密、Docker のログイン情報、Mesos のバンドルなどの認証情報を保持することができます。ロボットの認証情報を変更するには、Robot Accounts ウィンドウのロボットのアカウント行にある Options ギアを選択し、View Credentials を選択します。ロボットがアクセスする必要のある外部リポジトリーの適切な認証情報を追加します。
- 一般設定の確認と変更: ミラーリングされたリポジトリーのページの左カラムから設定ボタン (歯車のアイコン) を選択します。表示されるページでは、ミラーリングされたリポジトリーに関連する設定を変更できます。特に、ユーザーやロボットのパーミッションを変更して、どのユーザーやロボットがレポジトリーを読み書きできるかを正確に指定することができます。
8.11. リポジトリーのミラーリングの推奨事項
リポジトリーミラーリングのベストプラクティスには次のようなものがあります。
- リポジトリーミラーリング Pod は任意のノードで実行できます。これは、Red Hat Quay がすでに実行されているノードでミラーリングを実行できることを意味します。
- リポジトリーのミラーリングは、データベースでスケジュールされ、一括して実行されます。その結果、リポジトリーワーカーは各リポジトリーミラー設定ファイルをチェックし、次の同期が必要なタイミングを読み取ります。ミラーワーカーが増えると、より多くのリポジトリーを同時にミラーリングできるようになります。たとえば、10 個のミラーワーカーを実行すると、ユーザーは 10 個のミラーリング operator を並行して実行できることになります。ミラー設定が 10 個あるワーカーが 2 つしかない場合に、実行できる Operator は 2 つのみです。
ミラーリング Pod の最適な数は、次の条件によって異なります。
- ミラーリングされるリポジトリーの合計数
- リポジトリー内のイメージやタグの数と変更の頻度
並列バッチ処理
たとえば、タグが 100 個あるリポジトリーをミラーリングしている場合に、このミラーは 1 つのワーカーで完了されます。ユーザーは、並行してミラーリングするリポジトリーの数を検討し、それに基づいてワーカーの数を決定する必要があります。
同じリポジトリー内の複数のタグを並行してミラーリングすることはできません。
第9章 IPv6 およびデュアルスタックデプロイメント
スタンドアロンの Red Hat Quay デプロイメントは、Telco や Edge 環境など、IPv6 のみをサポートする場所で提供できるようになりました。デュアルスタックネットワーキングのサポートも提供されるため、Red Hat Quay デプロイメントは IPv4 と IPv6 を同時にリッスンできます。
既知の制限のリストについては、IPv6 の制限 を参照してください。
9.1. IPv6 プロトコルファミリーの有効化
以下の手順を使用して、スタンドアロンの Red Hat Quay デプロイメントで IPv6 サポートを有効にします。
前提条件
- Red Hat Quay を 3.8 に更新している。
- ホストとコンテナーソフトウェアプラットフォーム (Docker、Podman) を、IPv6 をサポートするように設定している。
手順
デプロイメントの
config.yaml
ファイルにFEATURE_LISTEN_IP_VERSION
パラメーターを追加し、IPv6
に設定します。次に例を示します。--- FEATURE_GOOGLE_LOGIN: false FEATURE_INVITE_ONLY_USER_CREATION: false FEATURE_LISTEN_IP_VERSION: IPv6 FEATURE_MAILING: false FEATURE_NONSUPERUSER_TEAM_SYNCING_SETUP: false ---
- Red Hat Quay デプロイメントを起動または再起動します。
次のコマンドを入力して、デプロイが IPv6 をリッスンしていることを確認します。
$ curl <quay_endpoint>/health/instance {"data":{"services":{"auth":true,"database":true,"disk_space":true,"registry_gunicorn":true,"service_key":true,"web_gunicorn":true}},"status_code":200}
デプロイメントの config.yaml
で IPv6 を有効にすると、環境が IPv6 を使用するように設定されており、ipv6 制限 (現在の制限) によって妨げられていない限り、すべての Red Hat Quay 機能を通常どおり使用できます。
環境が IPv4 に設定されていても、FEATURE_LISTEN_IP_VERSION
設定フィールドが IPv6
に設定されていると、Red Hat Quay はデプロイに失敗します。
9.2. デュアルスタックプロトコルファミリーの有効化
以下の手順を使用して、スタンドアロンの Red Hat Quay デプロイメントでデュアルスタック (IPv4 および IPv6) サポートを有効にします。
前提条件
- Red Hat Quay を 3.8 に更新している。
- ホストとコンテナーソフトウェアプラットフォーム (Docker、Podman) を、IPv6 をサポートするように設定している。
手順
デプロイメントの
config.yaml
ファイルで、FEATURE_LISTEN_IP_VERSION
パラメーターを追加し、dual-stack
に設定します。次に例を示します。--- FEATURE_GOOGLE_LOGIN: false FEATURE_INVITE_ONLY_USER_CREATION: false FEATURE_LISTEN_IP_VERSION: dual-stack FEATURE_MAILING: false FEATURE_NONSUPERUSER_TEAM_SYNCING_SETUP: false ---
- Red Hat Quay デプロイメントを起動または再起動します。
次のコマンドを入力して、デプロイメントが両方のチャネルをリッスンしていることを確認します。
IPv4 の場合、次のコマンドを入力します。
$ curl --ipv4 <quay_endpoint> {"data":{"services":{"auth":true,"database":true,"disk_space":true,"registry_gunicorn":true,"service_key":true,"web_gunicorn":true}},"status_code":200}
IPv6 の場合、次のコマンドを入力します。
$ curl --ipv6 <quay_endpoint> {"data":{"services":{"auth":true,"database":true,"disk_space":true,"registry_gunicorn":true,"service_key":true,"web_gunicorn":true}},"status_code":200}
デプロイメントの config.yaml
でデュアルスタックを有効にすると、環境がデュアルスタック用に設定されている限り、Red Hat Quay のすべての機能を通常どおり使用できます。
9.3. IPv6 とデュスタックの制限
現在、一般的な Azure Blob Storage 設定を使用して Red Hat Quay デプロイメントを設定しようとしても、IPv6 シングルスタック環境では機能しません。Azure Blob Storage のエンドポイントは IPv6 をサポートしていないため、この問題に対する回避策はありません。
詳細は、PROJQUAY-4433 を参照してください。
現在、Amazon S3 CloudFront を使用して Red Hat Quay デプロイメントを設定しようとしても、IPv6 シングルスタック環境では機能しません。Amazon S3 CloudFront のエンドポイントは IPv6 をサポートしていないため、この問題に対する回避策はありません。
詳細は、PROJQUAY-4470 を参照してください。
第10章 Red Hat Quay の LDAP 認証設定
LDAP (Lightweight Directory Access Protocol) は、IP ネットワークで分散ディレクトリー情報サービスにアクセスし、これを維持するために使用するオープンな、ベンダーに依存しない業界標準のアプリケーションプロトコルです。Red Hat Quay は ID プロバイダーとして LDAP の使用をサポートしています。
10.1. LDAP を有効にする際の考慮事項
Red Hat Quay デプロイメントで LDAP を有効にする前に、以下の点を考慮する必要があります。
既存の Red Hat Quay デプロイメント
ユーザーがすでに設定されている既存の Red Hat Quay デプロイメントで LDAP を有効にすると、ユーザー名との競合が発生する可能性があります。たとえば、1 人のユーザー alice
は、LDAP を有効にする前に Red Hat Quay で手動で作成されました。ユーザー名 alice
が LDAP ディレクトリーにも存在する場合、alice
が LDAP を使用して初めてログインするときに、Red Hat Quay は新しいユーザー alice-1
を自動的に作成します。次に、Red Hat Quay は LDAP 認証情報を alice
アカウントに自動的にマッピングします。一貫性の理由から、これは Red Hat Quay デプロイメントにとっては誤りである可能性があります。LDAP を有効にする前に、競合する可能性のあるローカルアカウント名を Red Hat Quay から削除することを推奨します。
手動ユーザーの作成と LDAP 認証
Red Hat Quay が LDAP 用に設定されていて、設定オプション FEATURE_USER_CREATION
が true
に設定されている場合は、LDAP 認証ユーザーが最初のログイン時に Red Hat Quay のデータベースに自動的に作成されます。このオプションを false
に設定すると、LDAP ユーザーの自動ユーザー作成に失敗し、ユーザーはログインできません。このシナリオでは、スーパーユーザーが最初に必要なユーザーアカウントを作成する必要があります。一方、FEATURE_USER_CREATION
が true
に設定されている場合は、LDAP に同等のユーザーがある場合でも、ユーザーは Quay ログイン画面からもアカウントを作成できます。
10.2. Red Hat Quay 用の LDAP の設定
config.yaml
ファイルを直接更新してデプロイメントを再起動することで、Red Hat Quay の LDAP を設定できます。Red Hat Quay の LDAP を設定する場合は、次の手順を参考として使用してください。
config.yaml
ファイルを直接更新して、次の関連情報を含めます。# ... AUTHENTICATION_TYPE: LDAP 1 # ... LDAP_ADMIN_DN: uid=<name>,ou=Users,o=<organization_id>,dc=<example_domain_component>,dc=com 2 LDAP_ADMIN_PASSWD: ABC123 3 LDAP_ALLOW_INSECURE_FALLBACK: false 4 LDAP_BASE_DN: 5 - o=<organization_id> - dc=<example_domain_component> - dc=com LDAP_EMAIL_ATTR: mail 6 LDAP_UID_ATTR: uid 7 LDAP_URI: ldap://<example_url>.com 8 LDAP_USER_FILTER: (memberof=cn=developers,ou=Users,dc=<domain_name>,dc=com) 9 LDAP_USER_RDN: 10 - ou=<example_organization_unit> - o=<organization_id> - dc=<example_domain_component> - dc=com LDAP_SECONDARY_USER_RDNS: 11 - ou=<example_organization_unit_one> - ou=<example_organization_unit_two> - ou=<example_organization_unit_three> - ou=<example_organization_unit_four> # ...
- 必要な LDAP フィールドをすべて追加したら、変更を保存して Red Hat Quay デプロイメントを再起動します。
10.3. LDAP_RESTRICTED_USER_FILTER 設定フィールドの有効化
LDAP_RESTRICTED_USER_FILTER
設定フィールドは、LDAP_USER_FILTER
設定フィールドのサブセットです。このオプションを設定すると、Red Hat Quay が認証プロバイダーとして LDAP を使用する場合、Red Hat Quay 管理者は LDAP ユーザーを制限付きユーザーとして設定できるようになります。
以下の手順を使用して、Red Hat Quay デプロイメントで LDAP 制限付きユーザーを有効にします。
前提条件
- Red Hat Quay デプロイメントは認証プロバイダーとして LDAP を使用している。
-
config.yaml
ファイルでLDAP_USER_FILTER
フィールドを設定している。
手順
デプロイメントの
config.yaml
ファイルで、LDAP_RESTRICTED_USER_FILTER
パラメーターを追加し、制限されたユーザーのグループ (たとえばmembers
) を指定します。# ... AUTHENTICATION_TYPE: LDAP # ... FEATURE_RESTRICTED_USERS: true 1 # ... LDAP_ADMIN_DN: uid=<name>,ou=Users,o=<organization_id>,dc=<example_domain_component>,dc=com LDAP_ADMIN_PASSWD: ABC123 LDAP_ALLOW_INSECURE_FALLBACK: false LDAP_BASE_DN: - o=<organization_id> - dc=<example_domain_component> - dc=com LDAP_EMAIL_ATTR: mail LDAP_UID_ATTR: uid LDAP_URI: ldap://<example_url>.com LDAP_USER_FILTER: (memberof=cn=developers,ou=Users,o=<example_organization_unit>,dc=<example_domain_component>,dc=com) LDAP_RESTRICTED_USER_FILTER: (<filterField>=<value>) 2 LDAP_USER_RDN: - ou=<example_organization_unit> - o=<organization_id> - dc=<example_domain_component> - dc=com # ...
- Red Hat Quay デプロイメントを起動または再起動します。
LDAP_RESTRICTED_USER_FILTER
機能を有効にすると、LDAP Red Hat Quay ユーザーは、コンテンツの読み取りと書き込み、および組織の作成が制限されます。
10.4. LDAP_SUPERUSER_FILTER 設定フィールドの有効化
LDAP_SUPERUSER_FILTER
フィールドを設定すると、Red Hat Quay が LDAP を認証プロバイダーとして使用する場合、Red Hat Quay 管理者は LDAP (Lightweight Directory Access Protocol) ユーザーをスーパーユーザーとして設定できます。
以下の手順を使用して、Red Hat Quay デプロイメントで LDAP スーパーユーザーを有効にします。
前提条件
- Red Hat Quay デプロイメントは認証プロバイダーとして LDAP を使用している。
-
config.yaml
ファイルでLDAP_USER_FILTER
フィールドを設定ている。
手順
デプロイメントの
config.yaml
ファイルで、LDAP_SUPERUSER_FILTER
パラメーターを追加し、スーパーユーザーとして設定するユーザーのグループ (root
など) を追加します。# ... AUTHENTICATION_TYPE: LDAP # ... LDAP_ADMIN_DN: uid=<name>,ou=Users,o=<organization_id>,dc=<example_domain_component>,dc=com LDAP_ADMIN_PASSWD: ABC123 LDAP_ALLOW_INSECURE_FALLBACK: false LDAP_BASE_DN: - o=<organization_id> - dc=<example_domain_component> - dc=com LDAP_EMAIL_ATTR: mail LDAP_UID_ATTR: uid LDAP_URI: ldap://<example_url>.com LDAP_USER_FILTER: (memberof=cn=developers,ou=Users,o=<example_organization_unit>,dc=<example_domain_component>,dc=com) LDAP_SUPERUSER_FILTER: (<filterField>=<value>) 1 LDAP_USER_RDN: - ou=<example_organization_unit> - o=<organization_id> - dc=<example_domain_component> - dc=com # ...
- 1
- 指定されたユーザーをスーパーユーザーとして設定します。
- Red Hat Quay デプロイメントを起動または再起動します。
LDAP_SUPERUSER_FILTER
機能を有効にすると、LDAP Red Hat Quay ユーザーにスーパーユーザー権限が付与されます。スーパーユーザーは次のオプションを使用できます。
- ユーザーの管理
- 組織の管理
- サービスキーの管理
- 変更ログの閲覧
- 使用状況ログのクエリー
- グローバルに表示されるユーザーメッセージの作成
10.5. 一般的な LDAP 設定の問題
設定が無効な場合、次のエラーが返される場合があります。
- Invalid credentials。このエラーが発生した場合は、管理者 DN または管理者 DN パスワードの値が正しくありません。正確な管理者 DN とパスワードの値を指定していることを確認してください。
*スーパーユーザー %USERNAME% の検証に失敗しました。このエラーは次の理由で返されます。
- ユーザー名が見つかりませんでした。
- ユーザーはリモート認証システムに存在しません。
- LDAP 認証が正しく設定されていません。
現在ログインしているユーザーが見つかりません。Red Hat Quay の LDAP を設定する場合、Administrator DN フィールドに指定されたユーザー名とパスワードを使用して LDAP 接続が正常に確立される場合があります。ただし、UID Attribute または Mail Attribute フィールドを使用して、指定された User Relative DN パス内で現在ログインしているユーザーが見つからない場合は、通常、次の 2 つの理由が考えられます。
- 現在ログインしているユーザーは、User Relative DN パスに存在しません。
Administrator DN には、指定された LDAP パスを検索または読み取る権限がありません。
この問題を解決するには、ログインしているユーザーが User Relative DN パスに含まれていることを確認するか、Administrator DN アカウントに正しいアクセス許可を与えます。
10.6. LDAP 設定フィールド
LDAP 設定フィールドの完全なリストは、LDAP 設定フィールド を参照してください。
第11章 Red Hat Quay の OIDC の設定
Red Hat Quay 用に OpenID Connect (OIDC) を設定すると、デプロイメントにメリットがいくつかあります。たとえば、OIDC を使用すると、ユーザーは Red Hat Single Sign-On、Google、Github、Microsoft などの OIDC プロバイダーからの既存の認証情報を使用して Red Hat Quay に対して認証できるようになります。OIDC のその他の利点には、一元的なユーザー管理、より強固なキュリティー、Single Sign-On (SSO) などがあります。全体として、OIDC 設定はユーザーの認証と管理を簡素化し、セキュリティーを強化して、Red Hat Quay ユーザーにシームレスなユーザーエクスペリエンスを提供します。
以下の手順では、Red Hat Quay のスタンドアロンデプロイメントで Microsoft Entra ID を設定する方法と、Red Hat Quay の Operator ベースのデプロイメントで Red Hat Single Sign-On を設定する方法を示します。これらの手順は、デプロイメントタイプに応じて交換可能です。
これらの手順に従うことで、使用する認証プロバイダーに関係なく、任意の OIDC プロバイダーを Red Hat Quay に追加できるようになります。
11.1. Red Hat Quay のスタンドアロンデプロイメントでの Microsoft Entra ID OIDC の設定
Microsoft Entra ID 認証を Red Hat Quay と統合することで、組織は Microsoft Entra ID が提供する集約ユーザー管理およびセキュリティー機能を活用できるようになります。一部の機能には、Microsoft Entra ID のロールと権限に基づいて Red Hat Quay リポジトリーへのユーザーアクセスを管理する機能や、Microsoft Entra ID によって提供される多要素認証やその他のセキュリティー機能を有効にする機能が含まれます。
Red Hat Quay の Azure Active Directory (Microsoft Entra ID) 認証により、ユーザーは Microsoft Entra ID 認証情報を使用して Red Hat Quay を認証し、アクセスできるようになります。
以下の手順を使用して、Red Hat Quay config.yaml
ファイルを直接更新して Microsoft Entra ID を設定します。
- 次の手順を使用すると、追加されている認証プロバイダーに関係なく、任意の ODIC プロバイダーを Red Hat Quay に追加できます。
-
システムでファイアウォールが使用されている場合、またはプロキシーが有効になっている場合は、作成される Oauth アプリケーションごとにすべての Azure API エンドポイントをホワイトリストに登録する必要があります。それ以外の場合は、次のエラーが返されます。
x509: certificate signed by unknown authority
次のリファレンスを使用して任意の OIDC プロバイダーの認証情報で
config.yaml
ファイルを更新します。AUTHENTICATION_TYPE: OIDC # ... AZURE_LOGIN_CONFIG: 1 CLIENT_ID: <client_id> 2 CLIENT_SECRET: <client_secret> 3 OIDC_SERVER: <oidc_server_address_> 4 SERVICE_NAME: Microsoft Entra ID 5 VERIFIED_EMAIL_CLAIM_NAME: <verified_email> 6 # ...
- 1
- OIDC 設定を保持する親キー。この例では、使用される親キーは
AZURE_LOGIN_CONFIG
です。ただし、文字列AZURE
は、特定のニーズに基づいて任意の文字列 (たとえば、ABC123
) に置き換えることができます。ただし、次の文字列は受け入れられません:GOOGLE
、GITHUB
。これらの文字列は、それぞれの ID プラットフォーム用に予約されており、使用するプラットフォームに応じて特定のconfig.yaml
エントリーが必要です。 - 2
- 認証プロバイダーに再登録されるアプリケーションのクライアント ID。
- 3
- 認証プロバイダーに登録されているアプリケーションのクライアントシークレット。
- 4
- 認証に使用される OIDC サーバーのアドレス。この例では、発行者識別子として
sts.windows.net
を使用する必要があります。https://login.microsoftonline.com
を使用すると、次のエラーが発生します。Could not create provider for AzureAD.Error: oidc: issuer did not match the issuer returned by provider, expected "https://login.microsoftonline.com/73f2e714-xxxx-xxxx-xxxx-dffe1df8a5d5" got "https://sts.windows.net/73f2e714-xxxx-xxxx-xxxx-dffe1df8a5d5/"
. - 5
- 認証されているサービスの名前。
- 6
- ユーザーの電子メールアドレスを確認するために使用されるクレームの名前。
Microsoft Entra ID を適切に設定すると、次の形式の 3 つのリダイレクトが行われます。
-
https://QUAY_HOSTNAME/oauth2/<name_of_service>/callback
-
https://QUAY_HOSTNAME/oauth2/<name_of_service>/callback/attach
-
https://QUAY_HOSTNAME/oauth2/<name_of_service>/callback/cli
-
- Red Hat Quay デプロイメントを再起動します。
11.2. Red Hat Quay の Red Hat Single Sign-On の設定
Keycloak プロジェクトに基づいた Red Hat Single Sign-On (RH-SSO) は、Red Hat が提供するオープンソースのアイデンティティーおよびアクセス管理 (IAM) ソリューションです。RH-SSO を使用すると、組織はユーザー ID を管理し、アプリケーションを保護して、システムとアプリケーション全体にアクセス制御ポリシーを適用できます。また、統合された認証および認可フレームワークも提供します。これにより、ユーザーは一度ログインすることで、再認証することなく複数のアプリケーションやリソースにアクセスできるようになります。詳細は、Red Hat Single Sign-On を参照してください。
Red Hat Quay で Red Hat Single Sign-On を設定すると、Red Hat Quay と OpenShift Container Platform などの他のアプリケーションプラットフォームの間にシームレスな認証インテグレーションを作成できます。
11.2.1. Red Hat Quay Operator で使用するための Red Hat Single Sign-On Operator の設定
以下の手順を使用して、OpenShift Container Platform で Red Hat Quay Operator の Red Hat Single Sign-On を設定します。
前提条件
- Red Hat Single Sign-On Operator が設定されている。詳細は、Red Hat Single Sign-On Operator を参照してください。
- Red Hat Single Sign-On および OpenShift Container Platform デプロイメントで Red Hat Quay に SSL/TLS が設定されている。
- 単一の認証局 (CA) を生成し、それを Red Hat Single Sign-On Operator と Red Hat Quay 設定にアップロードしている。
手順
Red Hat Single Sign-On 管理コンソール に移動します。
- OpenShift Container Platform Web コンソール で、Network → Route に移動します。
- ドロップダウンリストから Red Hat Single Sign-On プロジェクトを選択します。
- Routes テーブルで Red Hat Single Sign-On 管理コンソール を見つけます。
- Red Hat Quay の設定に使用するレルムを選択します。
- ナビゲーションパネルの Configure セクションで Clients をクリックし、Create ボタンをクリックして Red Hat Quay の新しい OIDC を追加します。
以下の情報を入力します。
-
Client ID:
quay-enterprise
-
Client Protocol:
openid-connect
-
Root URL:
https://<quay_endpoint>/
-
Client ID:
- Save をクリックします。これにより、Clients 設定パネルにリダイレクトされます。
- Access Type に移動し、Confidential を選択します。
Valid Redirect URI に移動します。3 つのリダイレクト URI を指定する必要があります。値は、Red Hat Quay レジストリーの完全修飾ドメイン名に
/oauth2/redhatsso/callback
を付加したものである必要があります。以下に例を示します。-
https://<quay_endpoint>/oauth2/redhatsso/callback
-
https://<quay_endpoint>/oauth2/redhatsso/callback/attach
-
https://<quay_endpoint>/oauth2/redhatsso/callback/cli
-
- Save をクリックして、新しい Credentials 設定に移動します。
- Secret の値をコピーします。
11.2.1.1. Red Hat Single Sign-On を使用するための Red Hat Quay Operator の設定
Red Hat Quay Operator で Red Hat Single Sign-On を設定するには、次の手順を使用します。
前提条件
- Red Hat Single Sign-On Operator が設定されている。詳細は、Red Hat Single Sign-On Operator を参照してください。
- Red Hat Single Sign-On および OpenShift Container Platform デプロイメントで Red Hat Quay に SSL/TLS が設定されている。
- 単一の認証局 (CA) を生成し、それを Red Hat Single Sign-On Operator と Red Hat Quay 設定にアップロードしている。
手順
-
Operator → Installed Operators → Red Hat Quay → Quay Registry → Config Bundle Secret に移動して、Red Hat Quay
config.yaml
ファイルを編集します。次に、Actions → Edit Secret をクリックします。または、config.yaml
ファイルをローカルに更新することもできます。 以下の情報を OpenShift Container Platform
config.yaml
ファイルの Red Hat Quay に追加します。# ... RHSSO_LOGIN_CONFIG: 1 CLIENT_ID: <client_id> 2 CLIENT_SECRET: <client_secret> 3 OIDC_SERVER: <oidc_server_url> 4 SERVICE_NAME: <service_name> 5 SERVICE_ICON: <service_icon> 6 VERIFIED_EMAIL_CLAIM_NAME: <example_email_address> 7 PREFERRED_USERNAME_CLAIM_NAME: <preferred_username> 8 LOGIN_SCOPES: 9 - 'openid' # ...
- 1
- OIDC 設定を保持する親キー。この例では、使用される親キーは
AZURE_LOGIN_CONFIG
です。ただし、文字列AZURE
は、特定のニーズに基づいて任意の文字列 (たとえば、ABC123
) に置き換えることができます。ただし、次の文字列は受け入れられません:GOOGLE
、GITHUB
。これらの文字列は、それぞれの ID プラットフォーム用に予約されており、使用するプラットフォームに応じて特定のconfig.yaml
エントリーが必要です。 - 2
- 認証プロバイダーで再登録されるアプリケーションのクライアント ID (例:
quay-enterprise
)。 - 3
quay-enterprise
OIDC クライアント設定の Credentials タブのクライアントシークレット。- 4
- Red Hat Single Sign-On インスタンスの完全修飾ドメイン名 (FQDN) に
/auth/realms/
とレルム名が追加されます。最後にスラッシュを含める必要があります (例:https://sso-redhat.example.com//auth/realms/<keycloak_realm_name>/
)。 - 5
- Red Hat Quay ログインページに表示される名前 (例:
Red hat Single Sign On)
。 - 6
- ログイン画面のアイコンを変更します。例:
/static/img/RedHat.svg
. - 7
- ユーザーの電子メールアドレスを確認するために使用されるクレームの名前。
- 8
- ユーザーの電子メールアドレスを確認するために使用されるクレームの名前。
- 9
- ログインフローの実行時に OIDC プロバイダーに送信するスコープ (
openid
など)。
- Red Hat Single Sign-On を有効にして、OpenShift Container Platform デプロイメントで Red Hat Quay を再起動します。
11.3. Red Hat Quay OIDC デプロイメントのチーム同期
管理者は、グループまたはチームの同期をサポートする OpenID Connect (OIDC) アイデンティティープロバイダーを活用して、Red Hat Quay のユーザーセットにリポジトリー権限を適用できます。これにより、管理者は Red Hat Quay と OIDC グループ間でグループ定義を手動で作成して同期する必要がなくなります。
11.3.1. Red Hat Quay OIDC デプロイメントの同期の有効化
Red Hat Quay デプロイメントで OIDC オーセンティケーターを使用する場合、チーム同期を有効にするには、次の手順に従います。
次の手順では、特定の OIDC プロバイダーは使用されません。代わりに、OIDC プロバイダーおよび Red Hat Quay 間のチーム同期をどのように使用すると最適かについて概説します。任意の OIDC プロバイダーを使用してチーム同期を有効にすることができますが、設定はプロバイダーによって異なる場合があります。
手順
次の情報を使用して
config.yaml
ファイルを更新します。AUTHENTICATION_TYPE: OIDC # ... OIDC_LOGIN_CONFIG: CLIENT_ID: 1 CLIENT_SECRET: 2 OIDC_SERVER: 3 SERVICE_NAME: 4 PREFERRED_GROUP_CLAIM_NAME: 5 LOGIN_SCOPES: [ 'openid', '<example_scope>' ] 6 OIDC_DISABLE_USER_ENDPOINT: false 7 # ... FEATURE_TEAM_SYNCING: true 8 FEATURE_NONSUPERUSER_TEAM_SYNCING_SETUP: true 9 FEATURE_UI_V2: true # ...
- 1
- 必須。この Red Hat Quay インスタンスの登録済み OIDC クライアント ID。
- 2
- 必須。この Red Hat Quay インスタンスの登録済み OIDC クライアントシークレット。
- 3
- 必須。認証に使用される OIDC サーバーのアドレス。この URL は、
<OIDC_SERVER>/.well-known/openid-configuration
へのGET
リクエストがプロバイダーの設定情報を返すような URL である必要があります。この設定情報は、依存当事者 (RP) が OpenID Connect プロバイダーと安全にやり取りし、認証および承認プロセスに必要な詳細を取得するために不可欠です。 - 4
- 必須。認証されているサービスの名前。
- 5
- 必須。ユーザーのグループメンバーシップに関する情報を保持する OIDC トークンペイロード内のキー名。このフィールドにより、認証システムは OIDC トークンからグループメンバーシップ情報を抽出し、Red Hat Quay で使用できるようになります。
- 6
- 必須。Red Hat Quay が OIDC プロバイダーとの通信に使用するスコープを追加します。
'openid'
を含める必要があります。追加のスコープはオプションです。 - 7
/userinfo
エンドポイントを許可するか無効にするかを指定します。Azure Entra ID を使用する場合は、このフィールドをtrue
に設定します。デフォルトはfalse
です。- 8
- 必須。認証エンジンのバッキンググループからチームメンバーシップを同期できるようにするかどうか。
- 9
- オプション: 有効にすると、スーパーユーザー以外のユーザーもチームの同期を設定できます。
- Red Hat Quay レジストリーを再起動します。
11.3.2. チーム同期のための Red Hat Quay デプロイメントの設定
- OIDC プロバイダー経由で Red Hat Quay レジストリーにログインします。
- Red Hat Quay v2 UI ダッシュボードで、Create Organization をクリックします。
-
組織名を入力します (例:
test-org)
。 - 組織の名前をクリックします。
- ナビゲーションウィンドウで、Teams and membership をクリックします。
-
Create new team をクリックし、
testteam
などの名前を入力します。 Create team ポップアップで、以下を実行します。
- オプション: このチームをリポジトリーに追加します。
-
ユーザーのアカウント名を入力して、チームメンバー (例:
user1
) を追加します。 - このチームにロボットアカウントを追加します。このページでは、ロボットアカウントを作成するオプションが提供されます。
- Next をクリックします。
- Review and Finish ページで、入力した情報を確認し、Review and Finish をクリックします。
- Red Hat Quay OIDC デプロイメントのチーム同期を有効にするには、Teams and membership ページで Enable Directory Sync をクリックします。
OIDC オーセンティケーターが Azure Entra ID の場合はグループオブジェクト ID を入力するように求められ、別のプロバイダーを使用している場合はグループ名を入力するように求められます。ポップアップのメッセージに注意してください。
警告チーム同期を有効にすると、すでにチームに所属しているユーザーのメンバーシップは取り消されることに注意してください。OIDC グループが信頼できる唯一の情報源となります。これは元に戻すことができないアクションです。Quay 内からのチームのユーザーメンバーシップは読み取り専用になります。
- Enable Sync をクリックします。
Teams and membership ページに戻ります。このチームのユーザーは削除され、ログインし直すと、再度追加されることに注意してください。この段階では、ロボットアカウントのみがまだチームの一部です。
ページ上部のバナーでチームが同期されていることを確認します。
This team is synchronized with a group in OIDC and its user membership is therefore read-only.
Directory Synchronization Config アコーディオンをクリックすると、デプロイメントが同期されている OIDC グループが表示されます。
- Red Hat Quay レジストリーからログアウトし、検証手順に進みます。
検証
以下の検証手順を使用して、user1
がチームのメンバーとして表示されることを確認します。
- Red Hat Quay レジストリーに再度ログインします。
-
Organizations → test-org → test-team Teams and memberships をクリックします。これで、
user1
がこのチームのチームメンバーとして表示されます。
検証
以下の手順に従って、OIDC プロバイダー経由でグループから user1
を削除し、その後 Red Hat Quay のチームからも削除します。
- OIDC プロバイダーの管理コンソールに移動します。
- OIDC プロバイダーの Users ページに移動します。このページの名前はプロバイダーによって異なります。
-
Red Hat Quay に関連付けられているユーザーの名前 (例:
user1)
をクリックします。 - 設定されたアイデンティティープロバイダーのグループからユーザーを削除します。
- ユーザーからアクセス権限を削除または割り当て解除します。
- Red Hat Quay レジストリーにログインします。
-
Organizations → test-org → test-team Teams and memberships をクリックします。
user1
はこのチームから削除されました。
第12章 AWS STS for Red Hat Quay の設定
Amazon Web Services (AWS) Security Token Service (STS) のサポートは、スタンドアロンの Red Hat Quay デプロイメントと OpenShift Container Platform 上の Red Hat Quay で利用できます。AWS STS は、AWS アイデンティティーおよびアクセス管理 (IAM) ユーザー、認証したユーザー、または フェデレーションユーザー に対して、一時的な制限付き権限の認証情報をリクエストするための Web サービスです。この機能は、Amazon S3 をオブジェクトストレージとして使用するクラスターに役立ち、Red Hat Quay は STS プロトコルを使用して Amazon S3 で認証できます。これにより、クラスターの全体的なセキュリティーが強化され、機密データへのアクセスが適切に認証および承認される際に役立ちます。
AWS STS の設定は、AWS IAM ユーザーの作成、S3 ロールの作成、適切なリソースを含めるための Red Hat Quay config.yaml
ファイルの設定を必要とする複数の手順からなるプロセスです。
AWS STS for Red Hat Quay を設定するには、次の手順に従います。
12.1. IAM ユーザーの作成
IAM ユーザーを作成するには、次の手順を使用します。
手順
- Amazon Web Services (AWS) コンソールにログインし、アイデンティティーおよびアクセス管理 (IAM) コンソールに移動します。
- ナビゲーションウィンドウの Access management で Users をクリックします。
Create User をクリックし、以下の情報を入力します。
-
有効なユーザー名 (例:
quay-user
) を入力します。 - Permissions options の場合は、Add user to group をクリックします。
-
有効なユーザー名 (例:
- review and create ページで、Create user をクリックします。Users ページにリダイレクトされます。
- ユーザー名 (例: quay-user) をクリックします。
-
ユーザーの ARN をコピーします (例:
arn:aws:iam::123492922789:user/quay-user
)。 - 同じページで、Security credentials タブをクリックします。
- Access keys に移動します。
- Create access key をクリックします。
- Access key best practices & alternatives ページで、Command Line Interface (CLI) をクリックしてから、確認ボックスをオンにします。Next をクリックします。
- オプション: Set description tag - optional ページで、説明を入力します。
- Create access key をクリックします。
アクセスキーとシークレットアクセスキーをコピーして保存します。
重要シークレットアクセスキーを表示またはダウンロードできるのは、このときだけです。後でこれを実行することはできません。ただし、新しいアクセスキーはいつでも作成できます。
- Done をクリックします。
12.2. S3 ロールの作成
次の手順を使用して、AWS STS の S3 ロールを作成します。
前提条件
- IAM ユーザーが作成され、アクセスキーとシークレットアクセスキーが保存されている。
手順
- まだ移動していない場合は、Dashboard をクリックして IAM ダッシュボードに移動します。
- ナビゲーションペインで、Access management の下の Roles をクリックします。
Create role をクリックします。
Custom Trust Policy をクリックすると、編集可能な JSON ポリシーが表示されます。デフォルトでは、次の情報が表示されます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": {}, "Action": "sts:AssumeRole" } ] }
Principal
設定フィールドに、AWS ARN 情報を追加します。以下に例を示します。{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123492922789:user/quay-user" }, "Action": "sts:AssumeRole" } ] }
- Next をクリックします。
-
Add permissions ページで、検索ボックスに
AmazonS3FullAccess
と入力します。チェックボックスをオンにしてそのポリシーを S3 ロールに追加し、Next をクリックします。 Name, review, and create ページで、次の情報を入力します。
-
ロール名を入力します (例:
example-role
)。 - オプション: 説明を追加します。
-
ロール名を入力します (例:
- Create role ボタンをクリックします。Roles ページに移動します。Role name の下に、新しく作成された S3 が利用可能になっているはずです。
12.3. AWS STS を使用するための Red Hat Quay の設定
AWS STS を使用するために Red Hat Quay config.yaml
ファイルを編集するには、次の手順に従います。
手順
Red Hat Quay の
config.yaml
ファイルを更新して、次の情報を追加します。# ... DISTRIBUTED_STORAGE_CONFIG: default: - STSS3Storage - sts_role_arn: <role_arn> 1 s3_bucket: <s3_bucket_name> 2 storage_path: <storage_path> 3 s3_region: <region> 4 sts_user_access_key: <s3_user_access_key> 5 sts_user_secret_key: <s3_user_secret_key> 6 # ...
- Red Hat Quay デプロイメントを再起動します。
検証
リポジトリーにプッシュされるサンプルイメージ (例:
busybox
) にタグを付けます。以下に例を示します。$ podman tag docker.io/library/busybox <quay-server.example.com>/<organization_name>/busybox:test
次のコマンドを実行して、サンプルイメージをプッシュします。
$ podman push <quay-server.example.com>/<organization_name>/busybox:test
- Red Hat Quay registry → Tags でイメージをプッシュした Organization に移動して、プッシュが成功したことを確認します。
- Amazon Web Services (AWS) コンソールに移動し、s3 バケットを探します。
- s3 バケットの名前をクリックします。
- Objects ページで、datastorage/ をクリックします。
datastorage/ ページには、次のリソースが表示されます。
- sha256/
uploads/
これらのリソースは、プッシュが成功し、AWS STS が適切に設定されていることを示しています。
第13章 Red Hat Quay の下での Prometheus および Grafana のメトリック
Red Hat Quay は、各インスタンスに Prometheus と Grafana に対応したエンドポイントをエクスポートし、簡単にモニタリングとアラートを行うことができます。
13.1. Prometheus エンドポイントの公開
13.1.1. スタンドアロン Red Hat Quay
podman run
を使用して Quay
コンテナーを起動する場合は、メトリックポート 9091
を公開します。
$ sudo podman run -d --rm -p 80:8080 -p 443:8443 -p 9091:9091\ --name=quay \ -v $QUAY/config:/conf/stack:Z \ -v $QUAY/storage:/datastorage:Z \ registry.redhat.io/quay/quay-rhel8:v3.12.0
これでメトリックが利用可能になります。
$ curl quay.example.com:9091/metrics
Quay のリポジトリーカウントを監視するための Prometheus および Grafana の設定は、Monitoring Quay with Prometheus and Grafana を参照してください。
13.1.2. Red Hat Quay Operator
quay-metrics
サービスのクラスター IP を判別します。
$ oc get services -n quay-enterprise NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-registry-clair-app ClusterIP 172.30.61.161 <none> 80/TCP,8089/TCP 18h example-registry-clair-postgres ClusterIP 172.30.122.136 <none> 5432/TCP 18h example-registry-quay-app ClusterIP 172.30.72.79 <none> 443/TCP,80/TCP,8081/TCP,55443/TCP 18h example-registry-quay-config-editor ClusterIP 172.30.185.61 <none> 80/TCP 18h example-registry-quay-database ClusterIP 172.30.114.192 <none> 5432/TCP 18h example-registry-quay-metrics ClusterIP 172.30.37.76 <none> 9091/TCP 18h example-registry-quay-redis ClusterIP 172.30.157.248 <none> 6379/TCP 18h
クラスターに接続し、quay-metrics
サービスのクラスター IP およびポートを使用してメトリックにアクセスします。
$ oc debug node/master-0 sh-4.4# curl 172.30.37.76:9091/metrics # HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 4.0447e-05 go_gc_duration_seconds{quantile="0.25"} 6.2203e-05 ...
13.1.3. Prometheus がメトリックを消費するための設定
Prometheus は、クラスター内で実行されているすべての Red Hat Quay インスタンスにアクセスする方法が必要です。典型的なセットアップでは、すべての Red Hat Quay インスタンスを単一の名前付き DNS エントリーにリストアップし、それを Prometheus に渡すことで行われます。
13.1.4. Kubernetes での DNS 設定
シンプルな Kubernetes service を設定して、Prometheus の DNS エントリーを提供することができます。
13.1.5. 手動クラスターの DNS 設定
SkyDNS は、Kubernetes を使用していない場合に、この DNS レコードを管理するためのシンプルなソリューションです。SkyDNS は、etcd クラスター上で動作させることができます。クラスター内の各 Red Hat Quay インスタンスのエントリーを etcd ストアに追加、削除することができます。SkyDNS はそこから定期的に読み込んで、それに応じて DNS レコードの Quay インスタンスのリストを更新します。
13.2. メトリックの概要
Red Hat Quay には、一般的なレジストリーの使用、アップロード、ダウンロード、ガベージコレクション、および認証についてのメトリックなど、レジストリーの監視に役立つメトリックが同梱されています。
13.2.1. 一般レジストリーの統計
一般的なレジストリー統計で、どの程度レジストリーが拡大しているかが分かります。
メトリクス名 | 説明 |
---|---|
quay_user_rows | データベースのユーザー数 |
quay_robot_rows | データベースのロボットアカウントの数 |
quay_org_rows | データベースの組織数 |
quay_repository_rows | データベースのリポジトリー数 |
quay_security_scanning_unscanned_images_remaining_total | 最新のセキュリティースキャナーによってスキャンされないイメージの数 |
メトリックの出力サンプル
# HELP quay_user_rows number of users in the database # TYPE quay_user_rows gauge quay_user_rows{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="65",process_name="globalpromstats.py"} 3 # HELP quay_robot_rows number of robot accounts in the database # TYPE quay_robot_rows gauge quay_robot_rows{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="65",process_name="globalpromstats.py"} 2 # HELP quay_org_rows number of organizations in the database # TYPE quay_org_rows gauge quay_org_rows{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="65",process_name="globalpromstats.py"} 2 # HELP quay_repository_rows number of repositories in the database # TYPE quay_repository_rows gauge quay_repository_rows{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="65",process_name="globalpromstats.py"} 4 # HELP quay_security_scanning_unscanned_images_remaining number of images that are not scanned by the latest security scanner # TYPE quay_security_scanning_unscanned_images_remaining gauge quay_security_scanning_unscanned_images_remaining{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 5
13.2.2. キューアイテム
キューアイテム メトリックでは、作業管理用に Quay が使用する複数のキューに関する情報が分かります。
メトリクス名 | 説明 |
---|---|
quay_queue_items_available | 特定のキュー内のアイテム数 |
quay_queue_items_locked | 実行中のアイテム数 |
quay_queue_items_available_unlocked | 処理を待機しているアイテム数 |
メトリックラベル
QUEUE_NAME: キューの名前。以下のいずれかになります。
- exportactionlogs: アクションログをエクスポートするためのキューに追加されている要求。これらのログは処理され、ストレージに配置されます。その後、リンクがメールを介して要求元に送信されます。
- namespacegc: キューに追加されてガベージコレクションされる namespace
- notification: リポジトリー通知が送信されるキュー
- repositorygc: ガベージコレクションを行うレポジトリーでキューに追加されているもの
- secscanv4: Clair V4 に固有の通知キュー
- dockerfilebuild: Quay docker ビルドのキュー
- imagestoragereplication: 複数のストレージで複製されるようにキューに追加されている Blob
- chunk_cleanup: 削除する必要があり、キューに追加されている Blob セグメント。これは、一部のストレージ実装 (Swift など) でのみ使用されます。
たとえば、キューラベルの repositorygc には、リポジトリーのガべージコレクションワーカーによって削除対象としてマークされたリポジトリーが含まれます。repositorygc の queue_name ラベル付きのメトリックの場合は、以下のようになります。
- quay_queue_items_locked は、現在削除されているリポジトリーの数です。
- quay_queue_items_available_unlocked は、ワーカーが処理するのを待機するリポジトリーの数です。
メトリックの出力サンプル
# HELP quay_queue_items_available number of queue items that have not expired # TYPE quay_queue_items_available gauge quay_queue_items_available{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="63",process_name="exportactionlogsworker.py",queue_name="exportactionlogs"} 0 ... # HELP quay_queue_items_available_unlocked number of queue items that have not expired and are not locked # TYPE quay_queue_items_available_unlocked gauge quay_queue_items_available_unlocked{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="63",process_name="exportactionlogsworker.py",queue_name="exportactionlogs"} 0 ... # HELP quay_queue_items_locked number of queue items that have been acquired # TYPE quay_queue_items_locked gauge quay_queue_items_locked{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="63",process_name="exportactionlogsworker.py",queue_name="exportactionlogs"} 0
13.2.3. ガベージコレクションメトリック
これらのメトリックは、ガベージコレクション (gc) から削除されたリソースの数を示します。ここでは、gc ワーカーが実行した回数と、削除された namespace、リポジトリー、および Blob の数が示されます。
メトリクス名 | 説明 |
---|---|
quay_gc_iterations_total | GCWorker による反復の数 |
quay_gc_namespaces_purged_total | NamespaceGCWorker によってパージされる namespace 数 |
quay_gc_repos_purged_total | RepositoryGCWorker または NamespaceGCWorker がパージするリポジトリーの数 |
quay_gc_storage_blobs_deleted_total | 削除されたストレージ Blob の数 |
メトリックの出力サンプル
# TYPE quay_gc_iterations_created gauge quay_gc_iterations_created{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 1.6317823190189714e+09 ... # HELP quay_gc_iterations_total number of iterations by the GCWorker # TYPE quay_gc_iterations_total counter quay_gc_iterations_total{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 0 ... # TYPE quay_gc_namespaces_purged_created gauge quay_gc_namespaces_purged_created{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 1.6317823190189433e+09 ... # HELP quay_gc_namespaces_purged_total number of namespaces purged by the NamespaceGCWorker # TYPE quay_gc_namespaces_purged_total counter quay_gc_namespaces_purged_total{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 0 .... # TYPE quay_gc_repos_purged_created gauge quay_gc_repos_purged_created{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 1.631782319018925e+09 ... # HELP quay_gc_repos_purged_total number of repositories purged by the RepositoryGCWorker or NamespaceGCWorker # TYPE quay_gc_repos_purged_total counter quay_gc_repos_purged_total{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 0 ... # TYPE quay_gc_storage_blobs_deleted_created gauge quay_gc_storage_blobs_deleted_created{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 1.6317823190189059e+09 ... # HELP quay_gc_storage_blobs_deleted_total number of storage blobs deleted # TYPE quay_gc_storage_blobs_deleted_total counter quay_gc_storage_blobs_deleted_total{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 0 ...
13.2.3.1. マルチパートアップロードメトリック
マルチパートアップロードメトリックは、ストレージへの Blob アップロードの数 (S3、Rados、GoogleCloudStorage、RHOCS) を表示します。これらは、Quay が Blob をストレージに正しくアップロードできない場合の問題を特定するのに役立ちます。
メトリクス名 | 説明 |
---|---|
quay_multipart_uploads_started_total | 起動した Quay ストレージへのマルチパートアップロードの数 |
quay_multipart_uploads_completed_total | 完了した Quay ストレージへのマルチパートアップロードの数 |
メトリックの出力サンプル
# TYPE quay_multipart_uploads_completed_created gauge quay_multipart_uploads_completed_created{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 1.6317823308284895e+09 ... # HELP quay_multipart_uploads_completed_total number of multipart uploads to Quay storage that completed # TYPE quay_multipart_uploads_completed_total counter quay_multipart_uploads_completed_total{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 0 # TYPE quay_multipart_uploads_started_created gauge quay_multipart_uploads_started_created{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 1.6317823308284352e+09 ... # HELP quay_multipart_uploads_started_total number of multipart uploads to Quay storage that started # TYPE quay_multipart_uploads_started_total counter quay_multipart_uploads_started_total{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 0 ...
13.2.4. イメージのプッシュ/プルのメトリック
イメージのプッシュおよびプルに関連する数多くのメトリックを利用できます。
13.2.4.1. イメージプルの合計
メトリクス名 | 説明 |
---|---|
quay_registry_image_pulls_total | レジストリーからダウンロードされたイメージの数 |
メトリックラベル
- protocol: 使用するレジストリープロトコル (常に v2 に指定する)
- ref: -tag マニフェストのプルに使用する ref
- status: 要求の http 戻りコード
13.2.4.2. プルしたイメージ (バイト)
メトリクス名 | 説明 |
---|---|
quay_registry_image_pulled_estimated_bytes_total | レジストリーからダウンロードされたバイト数 |
メトリックラベル
- protocol: 使用するレジストリープロトコル (常に v2 に指定する)
13.2.4.3. イメージのプッシュ合計
メトリクス名 | 説明 |
---|---|
quay_registry_image_pushes_total | レジストリーからアップロードされたイメージの数 |
メトリックラベル
- protocol: 使用するレジストリープロトコル (常に v2 に指定する)
- pstatus: 要求の http 戻りコード
- pmedia_type: アップロードしたマニフェストタイプ
13.2.4.4. プッシュされたイメージバイト
メトリクス名 | 説明 |
---|---|
quay_registry_image_pushed_bytes_total | レジストリーにアップロードされたバイト数 |
メトリックの出力サンプル
# HELP quay_registry_image_pushed_bytes_total number of bytes pushed to the registry # TYPE quay_registry_image_pushed_bytes_total counter quay_registry_image_pushed_bytes_total{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="221",process_name="registry:application"} 0 ...
13.2.5. 認証メトリック
認証メトリックでは、タイプ別にラベルが付けられた認証要求の数と、成功したかどうかが分かります。たとえば、このメトリックを使用して、失敗した Basic 認証要求を監視できます。
メトリクス名 | 説明 |
---|---|
quay_authentication_attempts_total | レジストリーおよび API 全体で認証を試行する回数 |
メトリックラベル
auth_kind: 使用される認証のタイプ。以下が含まれます。
- basic
- oauth
- credentials
- success: true または false
メトリックの出力サンプル
# TYPE quay_authentication_attempts_created gauge quay_authentication_attempts_created{auth_kind="basic",host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="221",process_name="registry:application",success="True"} 1.6317843039374158e+09 ... # HELP quay_authentication_attempts_total number of authentication attempts across the registry and API # TYPE quay_authentication_attempts_total counter quay_authentication_attempts_total{auth_kind="basic",host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="221",process_name="registry:application",success="True"} 2 ...
第14章 Red Hat Quay クォータの管理と適用の概要
Red Hat Quay では、ユーザーは、設定されたストレージクォータ制限を確立することにより、ストレージ消費を報告し、レジストリーの増加を抑えることができます。オンプレミスの Red Hat Quay ユーザーには、環境の容量制限を管理するための次の機能が装備されるようになりました。
- Quota reporting: この機能を使用すると、スーパーユーザーはすべての組織のストレージ消費量を追跡できます。さらに、ユーザーは割り当てられた組織のストレージ消費量を追跡できます。
- Quota management: この機能を使用すると、スーパーユーザーは Red Hat Quay ユーザーのソフトチェックとハードチェックを定義できます。ソフトチェックは、組織のストレージ消費量が設定されたしきい値に達しているかどうかをユーザーに通知します。ハードチェックは、ストレージ消費量が設定された制限に達したときにユーザーがレジストリーにプッシュするのを防ぎます。
これらの機能を組み合わせることで、Red Hat Quay レジストリーのサービス所有者はサービスレベル契約を定義し、健全なリソース予算をサポートできるようになります。
14.1. クォータ管理の制限
クォータ管理は、組織がリソース消費を維持するのに役立ちます。クォータ管理の制限の 1 つは、プッシュでリソース消費を計算すると、計算がプッシュのクリティカルパスの一部になることです。これがないと、使用状況データがドリフトする可能性があります。
最大ストレージクォータサイズは、選択したデータベースによって異なります。
変数 | 説明 |
---|---|
Postgres | 8388608 TB |
MySQL | 8388608 TB |
SQL Server | 16777216 TB |
14.2. Red Hat Quay 3.9 のクォータ管理
Red Hat Quay 3.9 にアップグレードする場合は、クォータ管理機能を再設定する必要があります。これは、Red Hat Quay 3.9 では計算の方法が異なるためです。その結果、Red Hat Quay 3.9 より前の合計は無効になりました。Red Hat Quay 3.9 でクォータ管理を設定するには 2 つの方法があり、次のセクションで詳しく説明します。
- これは、Red Hat Quay 3.9 にアップグレードした後に実行する必要がある 1 回限りの計算です。
- クォータを作成、更新、削除するにはスーパーユーザー権限が必要です。クォータはユーザーと組織に設定できますが、Red Hat Quay UI を使用して ユーザー クォータを再設定することはできず、代わりに API を使用する必要があります。
14.2.1. オプション A: QUOTA_TOTAL_DELAY 機能フラグを調整して Red Hat Quay 3.9 のクォータ管理を設定する
QUOTA_TOTAL_DELAY
機能フラグを調整して Red Hat Quay 3.9 クォータ管理を再計算するには、次の手順を使用します。
この再計算オプションを使用すると、QUOTA_TOTAL_DELAY
に指定された割り当て時間まで、合計は 0.00 KB として表示されます。
前提条件
- Red Hat Quay 3.9 にアップグレードしている。
- Red Hat Quay 3.9 にスーパーユーザーとしてログインしている。
手順
次の
config.yaml
設定を使用して Red Hat Quay 3.9 をデプロイします。FEATURE_QUOTA_MANAGEMENT: true FEATURE_GARBAGE_COLLECTION: true PERMANENTLY_DELETE_TAGS: true QUOTA_TOTAL_DELAY_SECONDS: 1800 1 RESET_CHILD_MANIFEST_EXPIRATION: true
- 1
QUOTA_TOTAL_DELAY_SECONDS
フラグのデフォルトは1800
秒、つまり 30 分です。これにより、クォータ管理機能がプッシュされたすべての Blob のストレージ消費量の計算を開始する前に、Red Hat Quay 3.9 を正常にデプロイできます。このフラグをこれより小さい数値に設定すると、計算ミスが発生する可能性があります。Red Hat Quay デプロイメントの開始にかかる時間よりも大きな数値に設定する 必要があります。推奨設定は1800
ですが、開始に 30 分以上かかる大規模なデプロイメントの場合は、1800
よりも長い時間が必要になる場合があります。
- Red Hat Quay UI に移動し、組織の名前をクリックします。
- Total Quota Consumed は 0.00 KB と表示されるはずです。さらに、Backfill Queued インジケーターが存在する必要があります。
- 割り当てられた時間 (たとえば 30 分) が経過したら、Red Hat Quay デプロイメントページを更新し、組織に戻ります。これで、Total Quota Consumed が表示されるはずです。
14.2.2. オプション B: QUOTA_TOTAL_DELAY_SECONDS を 0 に設定して Red Hat Quay 3.9 のクォータ管理を設定する
QUOTA_TOTAL_DELAY_SECONDS
を 0
に設定して Red Hat Quay 3.9 クォータ管理を再計算するには、次の手順を使用します。
このオプションを使用すると、計算ミスの可能性は回避されますが、時間がかかります。Red Hat Quay デプロイメントで FEATURE_QUOTA_MANAGEMENT
パラメーターを false
から true
に切り替える場合は、次の手順を使用します。ほとんどのユーザーは次の外部参照を見つけます。
前提条件
- Red Hat Quay 3.9 にアップグレードしている。
- Red Hat Quay 3.9 にスーパーユーザーとしてログインしている。
手順
次の
config.yaml
設定を使用して Red Hat Quay 3.9 をデプロイします。FEATURE_GARBAGE_COLLECTION: true FEATURE_QUOTA_MANAGEMENT: true QUOTA_BACKFILL: false QUOTA_TOTAL_DELAY_SECONDS: 0 PERMANENTLY_DELETE_TAGS: true RESET_CHILD_MANIFEST_EXPIRATION: true
- Red Hat Quay UI に移動し、組織の名前をクリックします。
- Total Quota Consumed は 0.00 KB と表示されるはずです。
Red Hat Quay を再デプロイし、
QUOTA_BACKFILL
フラグをtrue
に設定します。以下に例を示します。QUOTA_BACKFILL: true
注記合計を計算した後にクォータ管理を無効にすると、Red Hat Quay はその合計を古いものとしてマークします。後でクォータ管理機能を再度有効にすると、該当する名前空間とリポジトリーがバックフィルワーカーによって再計算されます。
14.3. Red Hat Quay 3.9 のクォータ管理のテスト
Red Hat Quay 3.9 用にクォータ管理が設定されているため、重複イメージはリポジトリー合計に対して 1 回だけカウントされるようになりました。
次の手順を使用して、重複イメージがリポジトリー合計に対して 1 回だけカウントされることをテストします。
前提条件
- Red Hat Quay 3.9 のクォータ管理が設定されました。
手順
次のコマンドを入力して、サンプルイメージ (例:
ubuntu:18.04
) をプルします。$ podman pull ubuntu:18.04
次のコマンドを入力して、同じイメージに 2 回タグ付けします。
$ podman tag docker.io/library/ubuntu:18.04 quay-server.example.com/quota-test/ubuntu:tag1
$ podman tag docker.io/library/ubuntu:18.04 quay-server.example.com/quota-test/ubuntu:tag2
次のコマンドを入力して、サンプルイメージを組織にプッシュします。
$ podman push --tls-verify=false quay-server.example.com/quota-test/ubuntu:tag1
$ podman push --tls-verify=false quay-server.example.com/quota-test/ubuntu:tag2
Red Hat Quay UI で、Organization に移動し、Repository Name (例: uota-test/ubuntu) をクリックします。次に、Tags をクリックします。
tag1
とtag2
という 2 つのリポジトリータグがあり、それぞれ同じマニフェストを持つ必要があります。以下に例を示します。ただし、Organization のリンクをクリックすると、Total Quota Consumed が 27.94 MB であることがわかります。これは、Ubuntu イメージが一度だけ考慮されていることを意味します。
Ubuntu タグの 1 つを削除しても、Total Quota Consumed は変わりません。
注記Red Hat Quay タイムマシンを
0
秒より長く設定した場合、それらのタグがタイムマシンウィンドウを通過するまで減算は行われません。永久削除を迅速に行いたい場合は、Red Hat Quay 3.9 でのイメージタグの永久削除を参照してください。
14.4. デフォルトのクォータの設定
すべての組織およびユーザーに適用されるシステム全体のデフォルトのストレージクォータを指定するには、DEFAULT_SYSTEM_REJECT_QUOTA_BYTES 設定フラグを使用します。
組織またはユーザーに特定のクォータを設定してから、そのクォータを削除すると、システム全体のデフォルトのクォータが設定されている場合に適用されます。同様に、組織またはユーザーに特定のクォータを設定してから、システム全体のデフォルトクォータを変更した場合、更新されたシステム全体のデフォルトは特定の設定を上書きします。
DEFAULT_SYSTEM_REJECT_QUOTA_BYTES
フラグの詳細は、
次のリンクを参照してください。
14.5. Red Hat Quay UI でクォータの確立
次の手順では、ストレージ消費量をレポートし、ストレージクォータ制限を設定する方法を説明します。
前提条件
- Red Hat Quay レジストリー
- スーパーユーザーアカウント
- クォータ制限の要求を満たすのに十分なストレージ
手順
新しい組織を作成するか、既存の組織を選択します。Organization Settings タブに表示されているように、最初はクォータが設定されていません。
スーパーユーザーとしてレジストリーにログインし、Super User Admin Panel の Manage Organizations タブに移動します。ストレージクォータ制限を作成する組織の Options アイコンをクリックします。
Configure Quota をクリックして、初期クォータ (たとえば 10 MB) を入力します。次に、Apply をクリックしてから Close をクリックします。
スーパーユーザーパネルの Manage Organizations タブで、消費されたクォータが 0 of 10 MB を示していることを確認します。
消費されたクォータ情報は、組織ページから直接入手することもできます。
最初に消費されたクォータ
クォータを 100MB に増やすには、スーパーユーザーパネルの Manage Organizations タブに移動します。Options アイコンをクリックし、Configure Quota を選択して、クォータを 100 MB に設定します。Apply をクリックしてから Close をクリックします。
次のコマンドを入力して、サンプルイメージをプルします。
$ podman pull ubuntu:18.04
次のコマンドを入力して、サンプルイメージにタグを付けます。
$ podman tag docker.io/library/ubuntu:18.04 example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:18.04
次のコマンドを入力して、サンプルイメージを組織にプッシュします。
$ podman push --tls-verify=false example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:18.04
スーパーユーザーパネルには、組織ごとに消費されたクォータが表示されます。
組織ページには、イメージで使用されているクォータの合計比率が表示されます。
最初のイメージで消費された合計クォータ
次のコマンドを入力して、2 番目のサンプルイメージを取得します。
$ podman pull nginx
次のコマンドを入力して、2 番目のイメージにタグを付けます。
$ podman tag docker.io/library/nginx example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/nginx
次のコマンドを入力して、2 番目のイメージを組織にプッシュします。
$ podman push --tls-verify=false example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/nginx
組織ページには、その組織の各リポジトリーで使用されているクォータの合計比率が表示されます。
各リポジトリーで消費された合計クォータ
拒否 と 警告 の制限を作成します。
スーパーユーザーパネルから、Manage Organizations タブに移動します。組織の Options アイコンをクリックし、Configure Quota を選択します。Quota Policy セクションで、Action タイプを Reject に設定し、Quota Threshold を 80 に設定して、Add Limit をクリックします。
警告 制限を作成するには、Action タイプに Warning を選択し、Quota Threshold を 70 に設定して、Add Limit をクリックします。
クォータポップアップで Close をクリックします。制限は、Organization ページの Settings タブで表示できますが、編集することはできません。
拒否制限を超えたイメージをプッシュします。
拒否制限 (80%) が現在のリポジトリーサイズ (~83%) 未満に設定されているため、次にプッシュされたイメージは自動的に拒否されます。
サンプルイメージプッシュ
$ podman pull ubuntu:20.04 $ podman tag docker.io/library/ubuntu:20.04 example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:20.04 $ podman push --tls-verify=false example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:20.04
クォータを超えたときのサンプル出力
Getting image source signatures Copying blob d4dfaa212623 [--------------------------------------] 8.0b / 3.5KiB Copying blob cba97cc5811c [--------------------------------------] 8.0b / 15.0KiB Copying blob 0c78fac124da [--------------------------------------] 8.0b / 71.8MiB WARN[0002] failed, retrying in 1s ... (1/3). Error: Error writing blob: Error initiating layer upload to /v2/testorg/ubuntu/blobs/uploads/ in example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org: denied: Quota has been exceeded on namespace Getting image source signatures Copying blob d4dfaa212623 [--------------------------------------] 8.0b / 3.5KiB Copying blob cba97cc5811c [--------------------------------------] 8.0b / 15.0KiB Copying blob 0c78fac124da [--------------------------------------] 8.0b / 71.8MiB WARN[0005] failed, retrying in 1s ... (2/3). Error: Error writing blob: Error initiating layer upload to /v2/testorg/ubuntu/blobs/uploads/ in example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org: denied: Quota has been exceeded on namespace Getting image source signatures Copying blob d4dfaa212623 [--------------------------------------] 8.0b / 3.5KiB Copying blob cba97cc5811c [--------------------------------------] 8.0b / 15.0KiB Copying blob 0c78fac124da [--------------------------------------] 8.0b / 71.8MiB WARN[0009] failed, retrying in 1s ... (3/3). Error: Error writing blob: Error initiating layer upload to /v2/testorg/ubuntu/blobs/uploads/ in example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org: denied: Quota has been exceeded on namespace Getting image source signatures Copying blob d4dfaa212623 [--------------------------------------] 8.0b / 3.5KiB Copying blob cba97cc5811c [--------------------------------------] 8.0b / 15.0KiB Copying blob 0c78fac124da [--------------------------------------] 8.0b / 71.8MiB Error: Error writing blob: Error initiating layer upload to /v2/testorg/ubuntu/blobs/uploads/ in example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org: denied: Quota has been exceeded on namespace
制限を超えると、UI に通知が表示されます。
クォータ通知
14.6. Red Hat Quay API を使用したクォータの確立
組織が最初に作成されたとき、割り当ては適用されていません。/api/v1/organization/{organization}/quota エンドポイントを使用します。
サンプルコマンド
$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota | jq
出力例
[]
14.6.1. クォータの設定
組織の割り当てを設定するには、データを /api/v1/organization/{orgname}/quota エンドポイントに POST します。以下はコマンド例です。
$ curl -k -X POST -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' -d '{"limit_bytes": 10485760}' https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/api/v1/organization/testorg/quota | jq
出力例
"Created"
14.6.2. クォータの表示
適用されたクォータを確認するには、/api/v1/organization/{orgname}/quota エンドポイントからデータを GET
します。
サンプルコマンド
$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota | jq
出力例
[ { "id": 1, "limit_bytes": 10485760, "default_config": false, "limits": [], "default_config_exists": false } ]
14.6.3. クォータの変更
既存の割り当てを変更する (ここでは 10MB から 100MB に) には、データを /api/v1/organization/{orgname}/quota/{quota_id} エンドポイントに PUT します。
サンプルコマンド
$ curl -k -X PUT -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' -d '{"limit_bytes": 104857600}' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota/1 | jq
出力例
{ "id": 1, "limit_bytes": 104857600, "default_config": false, "limits": [], "default_config_exists": false }
14.6.4. イメージのプッシュ
消費されたストレージを確認するには、さまざまなイメージを組織にプッシュします。
14.6.4.1. ubuntu:18.04 のプッシュ
コマンドラインから組織に ubuntu:18.04 をプッシュします。
サンプルコマンド
$ podman pull ubuntu:18.04 $ podman tag docker.io/library/ubuntu:18.04 example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:18.04 $ podman push --tls-verify=false example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:18.04
14.6.4.2. API を使用してクォータの使用状況の表示
消費されたストレージを表示するには、/api/v1/repository エンドポイントからデータを GET
します。
サンプルコマンド
$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' 'https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/repository?last_modified=true&namespace=testorg&popularity=true&public=true' | jq
出力例
{ "repositories": [ { "namespace": "testorg", "name": "ubuntu", "description": null, "is_public": false, "kind": "image", "state": "NORMAL", "quota_report": { "quota_bytes": 27959066, "configured_quota": 104857600 }, "last_modified": 1651225630, "popularity": 0, "is_starred": false } ] }
14.6.4.3. 別のイメージをプッシュ
2 番目のイメージをプル、タグ付け、プッシュします。たとえば、
nginx
です。サンプルコマンド
$ podman pull nginx $ podman tag docker.io/library/nginx example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/nginx $ podman push --tls-verify=false example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/nginx
組織内のリポジトリーのクォータレポートを表示するには、/api/v1/repository エンドポイントを使用します。
サンプルコマンド
$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' 'https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/repository?last_modified=true&namespace=testorg&popularity=true&public=true'
出力例
{ "repositories": [ { "namespace": "testorg", "name": "ubuntu", "description": null, "is_public": false, "kind": "image", "state": "NORMAL", "quota_report": { "quota_bytes": 27959066, "configured_quota": 104857600 }, "last_modified": 1651225630, "popularity": 0, "is_starred": false }, { "namespace": "testorg", "name": "nginx", "description": null, "is_public": false, "kind": "image", "state": "NORMAL", "quota_report": { "quota_bytes": 59231659, "configured_quota": 104857600 }, "last_modified": 1651229507, "popularity": 0, "is_starred": false } ] }
組織の詳細でクォータ情報を表示するには、/api/v1/organization/{orgname} エンドポイントを使用します。
サンプルコマンド
$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' 'https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg' | jq
出力例
{ "name": "testorg", ... "quotas": [ { "id": 1, "limit_bytes": 104857600, "limits": [] } ], "quota_report": { "quota_bytes": 87190725, "configured_quota": 104857600 } }
14.6.5. クォータ制限を使用してプッシュの拒否
イメージプッシュが定義されたクォータ制限を超えると、ソフトチェックまたはハードチェックが発生します。
- ソフトチェックまたは 警告 の場合は、ユーザーに通知されます。
- ハードチェックまたは 拒否 の場合、プッシュは終了します。
14.6.5.1. 拒否および警告の制限の設定
拒否 および 警告 の制限を設定するには、データを /api/v1/organization/{orgname}/quota/{quota_id}/limit エンドポイントに POST します。
サンプル拒否制限コマンド
$ curl -k -X POST -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' -d '{"type":"Reject","threshold_percent":80}' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota/1/limit
警告制限コマンドの例
$ curl -k -X POST -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' -d '{"type":"Warning","threshold_percent":50}' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota/1/limit
14.6.5.2. 拒否および警告の制限の表示
拒否 および 警告 の制限を表示するには、/api/v1/organization/{orgname}/quota エンドポイントを使用します。
クォータ制限の表示
$ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json' https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota | jq
クォータ制限のサンプル出力
[ { "id": 1, "limit_bytes": 104857600, "default_config": false, "limits": [ { "id": 2, "type": "Warning", "limit_percent": 50 }, { "id": 1, "type": "Reject", "limit_percent": 80 } ], "default_config_exists": false } ]
14.6.5.3. 拒否制限を超えたときにイメージをプッシュ
この例では、拒否制限 (80%) が現在のリポジトリーサイズ (~83%) 未満に設定されているため、次のプッシュは自動的に拒否されます。
コマンドラインからサンプルイメージを組織にプッシュします。
サンプルイメージプッシュ
$ podman pull ubuntu:20.04 $ podman tag docker.io/library/ubuntu:20.04 example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:20.04 $ podman push --tls-verify=false example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/testorg/ubuntu:20.04
クォータを超えたときのサンプル出力
Getting image source signatures Copying blob d4dfaa212623 [--------------------------------------] 8.0b / 3.5KiB Copying blob cba97cc5811c [--------------------------------------] 8.0b / 15.0KiB Copying blob 0c78fac124da [--------------------------------------] 8.0b / 71.8MiB WARN[0002] failed, retrying in 1s ... (1/3). Error: Error writing blob: Error initiating layer upload to /v2/testorg/ubuntu/blobs/uploads/ in example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org: denied: Quota has been exceeded on namespace Getting image source signatures Copying blob d4dfaa212623 [--------------------------------------] 8.0b / 3.5KiB Copying blob cba97cc5811c [--------------------------------------] 8.0b / 15.0KiB Copying blob 0c78fac124da [--------------------------------------] 8.0b / 71.8MiB WARN[0005] failed, retrying in 1s ... (2/3). Error: Error writing blob: Error initiating layer upload to /v2/testorg/ubuntu/blobs/uploads/ in example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org: denied: Quota has been exceeded on namespace Getting image source signatures Copying blob d4dfaa212623 [--------------------------------------] 8.0b / 3.5KiB Copying blob cba97cc5811c [--------------------------------------] 8.0b / 15.0KiB Copying blob 0c78fac124da [--------------------------------------] 8.0b / 71.8MiB WARN[0009] failed, retrying in 1s ... (3/3). Error: Error writing blob: Error initiating layer upload to /v2/testorg/ubuntu/blobs/uploads/ in example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org: denied: Quota has been exceeded on namespace Getting image source signatures Copying blob d4dfaa212623 [--------------------------------------] 8.0b / 3.5KiB Copying blob cba97cc5811c [--------------------------------------] 8.0b / 15.0KiB Copying blob 0c78fac124da [--------------------------------------] 8.0b / 71.8MiB Error: Error writing blob: Error initiating layer upload to /v2/testorg/ubuntu/blobs/uploads/ in example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org: denied: Quota has been exceeded on namespace
14.6.5.4. 制限を超えた場合の通知
制限を超えると、通知が表示されます。
クォータ通知
14.7. Red Hat Quay 3.9 での合計レジストリーサイズの計算
レジストリーの合計計算をキューに入れるには、次の手順を使用します。
この機能はオンデマンドで実行され、レジストリーの合計の計算にはデータベースへの負荷がかかります。注意して使用してください。
前提条件
- Red Hat Quay 3.9 にアップグレードしている。
- Red Hat Quay スーパーユーザーとしてログインしています。
手順
- Red Hat Quay UI で、ユーザー名 → Super User Admin Panel をクリックします。
- ナビゲーションペインで、Manage Organizations をクリックします。
- Calculate をクリックします。これは、Total Registry Size: 0.00 KB, Updated: Never , Calculation required の横にあります。次に、OK をクリックします。
レジストリーのサイズに応じて、数分後、ページを更新します。ここで、合計レジストリーサイズを計算する必要があります。以下に例を示します。
14.8. イメージタグを完全に削除する
場合によっては、ユーザーがタイムマシンウィンドウの外でイメージタグを削除したい場合があります。イメージタグを手動で完全に削除するには、次の手順を実行します。
次の手順の結果は元に戻すことはできません。注意して使用してください。
14.8.1. Red Hat Quay v2 UI を使用したイメージタグの完全な削除
Red Hat Quay v2 UI を使用してイメージタグを完全に削除するには、次の手順を実行します。
前提条件
-
config.yaml
ファイルでFEATURE_UI_V2
をtrue
に設定している。
手順
config.yaml
ファイルでPERMANENTLY_DELETE_TAGS
およびRESET_CHILD_MANIFEST_EXPIRATION
パラメーターがtrue
に設定されていることを確認してください。以下に例を示します。PERMANENTLY_DELETE_TAGS: true RESET_CHILD_MANIFEST_EXPIRATION: true
- ナビゲーションペインで、Repositories をクリックします。
- リポジトリーの名前 (例: quayadmin/busybox) をクリックします。
- 削除するイメージタグのボックスをオンにします (例: test)。
Actions → Permanently Delete をクリックします。
重要このアクションは永続的であり、元に戻すことはできません。
14.8.2. Red Hat Quay レガシー UI を使用したイメージタグの完全な削除
Red Hat Quay レガシー UI を使用してイメージタグを完全に削除するには、次の手順を実行します。
手順
config.yaml
ファイルでPERMANENTLY_DELETE_TAGS
およびRESET_CHILD_MANIFEST_EXPIRATION
パラメーターがtrue
に設定されていることを確認してください。以下に例を示します。PERMANENTLY_DELETE_TAGS: true RESET_CHILD_MANIFEST_EXPIRATION: true
- Red Hat Quay UI で、Repositories をクリックし、削除するイメージタグを含むリポジトリーの名前 (例: quayadmin/busybox) をクリックします。
- ナビゲーションウィンドウで、Tags をクリックします。
- 削除するタグの名前のボックスをオンにします (例: test)。
- Actions ドロップダウンメニューをクリックし、Delete Tags → Delete Tags を選択します。
- ナビゲーションペインで Tag History をクリックします。
削除したばかりのタグの名前 (例:
test)
で、Delete test カテゴリーの下にある Permanently Delete をクリックします。以下に例を示します。イメージタグを完全に削除します
重要このアクションは永続的であり、元に戻すことはできません。
第15章 Red Hat Quay の自動プルーニングの概要
Red Hat Quay 管理者は、組織およびリポジトリーに対して自動プルーニングポリシーを設定できます。また、レジストリーレベルで自動プルーニングポリシーを設定して、新しく作成されるすべての組織を含め、すべての組織に適用することもできます。この機能を使用すると、指定した基準に基づいて組織またはリポジトリー内のイメージタグを自動的に削除できます。これにより、Red Hat Quay 組織の所有者は、コンテンツを自動的にプルーニングしてストレージクォータ内に収めることができます。
現在、次の 2 つのポリシーが追加されています。
- タグの数に基づくイメージのプルーニング。このポリシーでは、タグの実際の数が目的のタグ数を超えると、目的のタグ数に達するまで、作成日に基づいて最も古いタグが削除されます。
- 作成日に基づくイメージタグのプルーニング。このポリシーでは、作成日が指定期間 (たとえば、10 日) より前のタグがすべて削除されます。
タグは自動的にプルーニングされると、Red Hat Quay タイムマシン期間に移行します。この期間は、タグが削除されてからガベージコレクションが行われるまでの、タグにアクセスできる期間を指します。イメージタグの有効期限は、組織の設定によって異なります。詳細は、Red Hat Quay ガベージコレクション を参照してください。
ユーザーは名前空間またはリポジトリーごとに 1 つのポリシーのみを設定できます。これは、Red Hat Quay v2 UI を通じて実行できます。ポリシーは、コマンドラインインターフェイス (CLI) 経由で API エンドポイントを使用して設定することもできます。
15.1. 自動プルーニングの前提条件および制限
自動プルーニング機能には、次の前提条件と制限が適用されます。
- Red Hat Quay レガシー UI を使用する場合は、自動プルーニングが使用できません。自動プルーニングポリシーを作成、表示、または変更するには、v2 UI を使用する必要があります。
-
自動プルーニングは、
FOR UPDATE SKIP LOCKED
SQL コマンドをサポートするデータベースでのみ使用できます。 - 自動プルーニングは、ミラー化されたリポジトリーと読み取り専用リポジトリーでは使用できません。
15.2. Red Hat Quay UI を使用した自動プルーニングポリシーの管理
自動プルーニングポリシーは、レジストリー全体の自動プルーニングポリシーを除き、すべて Red Hat Quay v2 UI を使用して作成します。これは、自動プルーニング機能と v2 UI を有効にするように Red Hat Quay の config.yaml
ファイルを設定した後に実行できます。
この機能は、Red Hat Quay レガシー UI を使用している場合には使用できません。
15.2.1. Red Hat Quay 自動プルーニング機能の設定
自動プルーニング機能を有効にするには、以下の手順に従って Red Hat Quay config.yaml
ファイルを設定します。
前提条件
-
config.yaml
ファイルでFEATURE_UI_V2
をtrue
に設定している。
手順
Red Hat Quay の
config.yaml
ファイルに、FEATURE_AUTO_PRUNE
環境変数を追加してTrue
に設定します。以下に例を示します。# ... FEATURE_AUTO_PRUNE: true # ...
15.2.2. レジストリー全体の自動プルーニングポリシーの作成
レジストリー全体の自動プルーニングポリシーを、新規および既存の組織で設定できます。この機能により、レジストリー全体にルールを適用することで、Red Hat Quay 管理者の時間、労力、ストレージが節約されます。
Red Hat Quay 管理者は、DEFAULT_NAMESPACE_AUTOPRUNE_POLICY
設定フィールドと、number_of_tags
または creation_date
メソッドのいずれかを追加して config.yaml
ファイルを更新し、この機能を有効にする必要があります。現在、この機能は v2 UI または API を使用して有効にすることはできません。
Red Hat Quay レジストリーの自動プルーニングポリシーを作成するには、次の手順に従います。
前提条件
-
FEATURE_AUTO_PRUNE
機能を有効にしている。
手順
config.yaml
ファイルを更新して、DEFAULT_NAMESPACE_AUTOPRUNE_POLICY
設定フィールドを追加します。指定したタグの数まで作成日順に最も古いタグを削除するポリシーメソッドを設定するには、
number_of_tags
メソッドを使用します。# ... DEFAULT_NAMESPACE_AUTOPRUNE_POLICY: method: number_of_tags value: 2 1 # ...
- 1
- この場合、2 つのタグが残ります。
指定した期間 (たとえば
5d
) よりも作成日が古いタグを削除するポリシーメソッドを設定するには、creation_date
メソッドを使用します。DEFAULT_NAMESPACE_AUTOPRUNE_POLICY: method: creation_date value: 5d
- Red Hat Quay デプロイメントを再起動します。
オプション: この機能をテストするためにイメージにタグを付けてプッシュする必要がある場合、以下を実行します。
Red Hat Quay レジストリーにプッシュする 4 つのサンプルイメージにタグを付けます。以下に例を示します。
$ podman tag docker.io/library/busybox <quay-server.example.com>/<quayadmin>/busybox:test
$ podman tag docker.io/library/busybox <quay-server.example.com>/<quayadmin>/busybox:test2
$ podman tag docker.io/library/busybox <quay-server.example.com>/<quayadmin>/busybox:test3
$ podman tag docker.io/library/busybox <quay-server.example.com>/<quayadmin>/busybox:test4
次のコマンドを入力して、自動プルーニングを有効にした状態で 4 つのサンプルイメージをレジストリーにプッシュします。
$ podman push <quay-server.example.com>/quayadmin/busybox:test
$ podman push <quay-server.example.com>/<quayadmin>/busybox:test2
$ podman push <quay-server.example.com>/<quayadmin>/busybox:test3
$ podman push <quay-server.example.com>/<quayadmin>/busybox:test4
- イメージのプッシュ先のレジストリーで 4 つのタグがあることを確認します。
-
デフォルトでは、レジストリーレベルの自動プルーナーワーカーが 24 時間ごとに実行されます。この手順を実行した場合、24 時間後に最も古い 2 つのイメージタグが削除され、
test3
タグとtest4
タグが残ります。Red Hat Quay 組織をチェックして、最も古い 2 つのタグが削除されていることを確認します。
15.2.3. Red Hat Quay v2 UI を使用した組織の自動プルーニングポリシーの作成
Red Hat Quay v2 UI を使用して組織の自動プルーニングポリシーを作成するには、次の手順に従います。
前提条件
-
FEATURE_AUTO_PRUNE
機能を有効にしている。
手順
自動プルーニングが有効なリポジトリーにプッシュする 4 つのサンプルイメージ (
busybox
など) にタグを付けます。以下に例を示します。$ podman tag docker.io/library/busybox <quay-server.example.com>/<quayadmin>/busybox:test
$ podman tag docker.io/library/busybox <quay-server.example.com>/<quayadmin>/busybox:test2
$ podman tag docker.io/library/busybox <quay-server.example.com>/<quayadmin>/busybox:test3
$ podman tag docker.io/library/busybox <quay-server.example.com>/<quayadmin>/busybox:test4
次のコマンドを入力して、4 つのサンプルイメージ (
busybox
など) を自動プルーニングが有効なリポジトリーにプッシュします。$ podman push <quay-server.example.com>/quayadmin/busybox:test
$ podman push <quay-server.example.com>/<quayadmin>/busybox:test2
$ podman push <quay-server.example.com>/<quayadmin>/busybox:test3
$ podman push <quay-server.example.com>/<quayadmin>/busybox:test4
- リポジトリーに 4 つのタグがあることを確認します。
- Red Hat Quay v2 UI で、ナビゲーションペインの Organizations をクリックします。
-
自動プルーニング機能を適用する組織の名前を選択します (例:
test_organization
)。 - Settings をクリックします。
Auto-Prune Policies をクリックします。以下に例を示します。
- ドロップダウンメニューをクリックして、目的のポリシー (By number of tags など) を選択します。
- 保持するタグの数を選択します。デフォルトでは、これは 20 タグに設定されています。この例では、保持するタグの数は 3 に設定されています。
- Save をクリックします。自動プルーニングポリシーが更新されたという通知が表示されます。
検証
組織のリポジトリーの Tags ページに移動します。この例では、タグは最も古い作成日から削除対象としてマークされます。数分後、自動プルーナーワーカーが、設定した基準に適合しないタグを削除します。この例では、
busybox:test
タグを削除し、busybox:test2
タグ、busybox:test3
タグ、およびbusybox:test4
タグを保持します。タグは自動的にプルーニングされると、Red Hat Quay タイムマシン期間に移行します。この期間は、タグが削除されてからガベージコレクションが行われるまでの、タグにアクセスできる期間を指します。イメージタグの有効期限は、組織の設定によって異なります。詳細は、Red Hat Quay ガベージコレクション を参照してください。
15.2.4. Red Hat Quay API を使用した名前空間の自動プルーニングポリシーの作成
Red Hat Quay API エンドポイントを使用して、名前空間の自動プルーニングポリシーを管理できます。
前提条件
-
config.yaml
ファイルでBROWSER_API_CALLS_XHR_ONLY: false
を設定している。 - OAuth アクセストークンを作成している。
- Red Hat Quay にログインしている。
手順
次の
POST
コマンドを入力して、組織内で許可するタグの数を制限する新しいポリシーを作成します。$ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{"method": "number_of_tags", "value": 10}' http://<quay-server.example.com>/api/v1/organization/<organization_name>/autoprunepolicy/
または、タグの作成日から指定期間が経過すると期限切れになるようにタグを設定することもできます。
$ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{ "method": "creation_date", "value": "7d"}' http://<quay-server.example.com>/api/v1/organization/<organization_name>/autoprunepolicy/
出力例
{"uuid": "73d64f05-d587-42d9-af6d-e726a4a80d6e"}
重複したポリシーを作成しようとすると、次のエラーが返されます。
{"detail": "Policy for this namespace already exists, delete existing to create new policy", "error_message": "Policy for this namespace already exists, delete existing to create new policy", "error_type": "invalid_request", "title": "invalid_request", "type": "http://<quay-server.example.com>/api/v1/error/invalid_request", "status": 400}
次のコマンドを入力して、自動プルーニングポリシーを確認します。
$ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/organization/<organization_name>/autoprunepolicy/
出力例
{"policies": [{"uuid": "73d64f05-d587-42d9-af6d-e726a4a80d6e", "method": "creation_date", "value": "7d"}]}
次のコマンドを入力すると、自動プルーニングポリシーを削除できます。ポリシーを削除するには UUID が必要であることに注意してください。
$ curl -X DELETE -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/organization/<organization_name>/autoprunepolicy/73d64f05-d587-42d9-af6d-e726a4a80d6e
15.2.5. API を使用した現行ユーザーの名前空間の自動プルーニングポリシーの作成
Red Hat Quay API エンドポイントを使用して、自分のアカウントの自動プルーニングポリシーを管理できます。
以下のコマンドで使用している /user/
は、現在 Red Hat Quay にログインしているユーザーを表しています。
前提条件
-
config.yaml
ファイルでBROWSER_API_CALLS_XHR_ONLY: false
を設定している。 - OAuth アクセストークンを作成している。
- Red Hat Quay にログインしている。
手順
次の
POST
コマンドを入力して、現在のユーザーのタグ数を制限する新しいポリシーを作成します。$ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{"method": "number_of_tags", "value": 10}' http://<quay-server.example.com>/api/v1/<user>/autoprunepolicy/
出力例
{"uuid": "8c03f995-ca6f-4928-b98d-d75ed8c14859"}
次のコマンドを入力して、自動プルーニングポリシーを確認します。
$ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/<user>/autoprunepolicy/8c03f995-ca6f-4928-b98d-d75ed8c14859
または、UUID を含めることもできます。
$ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/<user>/autoprunepolicy/
出力例
{"policies": [{"uuid": "8c03f995-ca6f-4928-b98d-d75ed8c14859", "method": "number_of_tags", "value": 10}]}
次のコマンドを入力すると、自動プルーニングポリシーを削除できます。ポリシーを削除するには UUID が必要であることに注意してください。
$ curl -X DELETE -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/<user>/autoprunepolicy/8c03f995-ca6f-4928-b98d-d75ed8c14859
出力例
{"uuid": "8c03f995-ca6f-4928-b98d-d75ed8c14859"}
15.2.6. Red Hat Quay v2 UI を使用したリポジトリーの自動プルーニングポリシーの作成
以下の手順に従って、Red Hat Quay v2 UI を使用してリポジトリーの自動プルーニングポリシーを作成します。
前提条件
-
FEATURE_AUTO_PRUNE
機能を有効にしている。
手順
自動プルーニングが有効なリポジトリーにプッシュする 4 つのサンプルイメージ (
busybox
など) にタグを付けます。以下に例を示します。$ podman tag docker.io/library/busybox <quay-server.example.com>/<organization_name>/<repository_name>:test
$ podman tag docker.io/library/busybox <quay-server.example.com>/<organization_name>/<repository_name>:test2
$ podman tag docker.io/library/busybox <quay-server.example.com>/<organization_name>/<repository_name>:test3
$ podman tag docker.io/library/busybox <quay-server.example.com>/<organization_name>/<repository_name>:test4
次のコマンドを入力して、4 つのサンプルイメージ (
busybox
など) を自動プルーニングが有効なリポジトリーにプッシュします。$ podman push <quay-server.example.com>/<organization_name>/<repository_name>:test
$ podman push <quay-server.example.com>/<organization_name>/<repository_name>:test2
$ podman push <quay-server.example.com>/<organization_name>/<repository_name>:test3
$ podman push <quay-server.example.com>/<organization_name>/<repository_name>:test4
- リポジトリーに 4 つのタグがあることを確認します。
- Red Hat Quay v2 UI のナビゲーションペインで Repository をクリックします。
-
自動プルーニング機能を適用する組織の名前を選択します (例:
<organization_name>/<repository_name>
)。 - Settings をクリックします。
- Repository Auto-Prune Policies をクリックします。
- ドロップダウンメニューをクリックして、目的のポリシー (By number of tags など) を選択します。
- 保持するタグの数を選択します。デフォルトでは、これは 20 タグに設定されています。この例では、保持するタグの数は 3 に設定されています。
- Save をクリックします。自動プルーニングポリシーが更新されたという通知が表示されます。
検証
組織のリポジトリーの Tags ページに移動します。この例では、タグは最も古い作成日から削除対象としてマークされます。数分後、自動プルーナーワーカーが、設定した基準に適合しないタグを削除します。この例では、
busybox:test
タグを削除し、busybox:test2
タグ、busybox:test3
タグ、およびbusybox:test4
タグを保持します。タグは自動的にプルーニングされると、Red Hat Quay タイムマシン期間に移行します。この期間は、タグが削除されてからガベージコレクションが行われるまでの、タグにアクセスできる期間を指します。イメージタグの有効期限は、組織の設定によって異なります。詳細は、Red Hat Quay ガベージコレクション を参照してください。
15.2.7. Red Hat Quay API を使用したリポジトリーの自動プルーニングポリシーの作成
Red Hat Quay API エンドポイントを使用して、リポジトリーの自動プルーニングポリシーを管理できます。
前提条件
-
config.yaml
ファイルでBROWSER_API_CALLS_XHR_ONLY: false
を設定している。 - OAuth アクセストークンを作成している。
- Red Hat Quay にログインしている。
手順
次の
POST
コマンドを入力して、組織内で許可するタグの数を制限する新しいポリシーを作成します。$ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{"method": "number_of_tags","value": 2}' http://<quay-server.example.com>/api/v1/repository/<organization_name>/<repository_name>/autoprunepolicy/
または、タグの作成日から指定期間が経過すると期限切れになるようにタグを設定することもできます。
$ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{"method": "creation_date", "value": "7d"}' http://<quay-server.example.com>/api/v1/repository/<organization_name>/<repository_name>/autoprunepolicy/
出力例
{"uuid": "ce2bdcc0-ced2-4a1a-ac36-78a9c1bed8c7"}
重複したポリシーを作成しようとすると、次のエラーが返されます。
{"detail": "Policy for this namespace already exists, delete existing to create new policy", "error_message": "Policy for this namespace already exists, delete existing to create new policy", "error_type": "invalid_request", "title": "invalid_request", "type": "http://quay-server.example.com/api/v1/error/invalid_request", "status": 400}
次のコマンドを入力して、自動プルーニングポリシーを確認します。
$ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/repository/<organization_name>/<repository_name>/autoprunepolicy/
または、UUID を含めることもできます。
$ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/repository/<organization_name>/<repository_name>/autoprunepolicy/ce2bdcc0-ced2-4a1a-ac36-78a9c1bed8c7
出力例
{"policies": [{"uuid": "ce2bdcc0-ced2-4a1a-ac36-78a9c1bed8c7", "method": "number_of_tags", "value": 10}]}
次のコマンドを入力すると、自動プルーニングポリシーを削除できます。ポリシーを削除するには UUID が必要であることに注意してください。
$ curl -X DELETE -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/repository/<organization_name>/<repository_name>/autoprunepolicy/ce2bdcc0-ced2-4a1a-ac36-78a9c1bed8c7
出力例
{"uuid": "ce2bdcc0-ced2-4a1a-ac36-78a9c1bed8c7"}
15.2.8. API を使用するユーザーのリポジトリーでの自動プルーニングポリシーの作成
リポジトリーに対する admin
権限がある限り、Red Hat Quay API エンドポイントを使用して、自分以外のユーザーアカウントのリポジトリーに対する自動プルーニングポリシーを管理できます。
前提条件
-
config.yaml
ファイルでBROWSER_API_CALLS_XHR_ONLY: false
を設定している。 - OAuth アクセストークンを作成している。
- Red Hat Quay にログインしている。
-
ポリシーを作成するリポジトリーの
admin
権限がある。
手順
次の
POST
コマンドを入力して、現在のユーザーのタグ数を制限する新しいポリシーを作成します。$ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{"method": "number_of_tags","value": 2}' http://<quay-server.example.com>/api/v1/repository/<user_account>/<user_repository>/autoprunepolicy/
出力例
{"uuid": "7726f79c-cbc7-490e-98dd-becdc6fefce7"}
次のコマンドを入力して、自動プルーニングポリシーを確認します。
$ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/repository/<user_account>/<user_repository>/autoprunepolicy/
または、UUID を含めることもできます。
$ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/repository/<user_account>/<user_repository>/autoprunepolicy/7726f79c-cbc7-490e-98dd-becdc6fefce7
出力例
{"policies": [{"uuid": "7726f79c-cbc7-490e-98dd-becdc6fefce7", "method": "number_of_tags", "value": 2}]}
次のコマンドを入力すると、自動プルーニングポリシーを削除できます。ポリシーを削除するには UUID が必要であることに注意してください。
$ curl -X DELETE -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/user/autoprunepolicy/7726f79c-cbc7-490e-98dd-becdc6fefce7
出力例
{"uuid": "7726f79c-cbc7-490e-98dd-becdc6fefce7"}
第16章 Geo レプリケーション
現在、Geo レプリケーション機能は IBM Power ではサポートされていません。
Geo レプリケーションでは、地理的に分散した複数の Red Hat Quay デプロイメントを、クライアントやユーザーの視点から、単一のレジストリーとして動作させることができます。グローバルに分散された Red Hat Quay のセットアップにおいて、プッシュとプルのパフォーマンスが大幅に向上します。イメージデータはバックグラウンドで非同期的に複製され、クライアントには透過的なフェイルオーバー/リダイレクトが行われます。
Geo レプリケーションを使用した Red Hat Quay のデプロイメントは、スタンドアロンおよび Operator デプロイメントでサポートされます。
16.1. Geo レプリケーション機能
- Geo レプリケーションが設定されると、コンテナーイメージのプッシュはその Red Hat Quay インスタンスの優先ストレージエンジンに書き込まれます。これは通常、リージョン内で最も近いストレージバックエンドです。
- 最初のプッシュの後、イメージデータはバックグランドで他のストレージエンジンに複製されます。
- レプリケーションロケーションのリストは設定可能で、それらは異なるストレージバックエンドにできます。
- イメージプルでは、プルのパフォーマンスを最大化するために、常に利用可能な最も近いストレージエンジンを使用します。
- レプリケーションがまだ完了していない場合、プルでは代わりにソースストレージバックエンドが使用されます。
16.2. Geo レプリケーションの要件と制約
- Geo レプリケーション設定では、Red Hat Quay で、すべてのリージョンが他の全リージョンのオブジェクトストレージに対して読み取りと書き込みができるようにする必要があります。オブジェクトストレージは、他のすべてのリージョンから地理的にアクセスできる必要があります。
- 1 つの Geo レプリケーションサイトでオブジェクトストレージシステムに障害が発生した場合に、そのサイトの Red Hat Quay デプロイメントをシャットダウンして、クライアントがグローバルロードバランサーにより、ストレージシステムで問題のない残りのサイトにリダイレクトされるようにする必要があります。そうしないと、クライアントでプルとプッシュの失敗が発生します。
- Red Hat Quay は、接続されたオブジェクトストレージシステムの健全性や可用性を内部的に認識しません。分散システムの健全性を監視し、ストレージのステータスに基づいてトラフィックを別のサイトにルーティングするには、ユーザーがグローバルロードバランサー (LB) を設定する必要があります。
-
Geo レプリケーションデプロイメントのステータスを確認するには、
/health/endtoend
チェックポイントを使用する必要があります。このチェックポイントは全体的な健全性の監視に使用されます。/health/endtoend
エンドポイントを使用してリダイレクトを手動で設定する必要があります。/health/instance
エンドポイントは、ローカルインスタンスの健全性のみをチェックします。 - 1 つのサイトのオブジェクトストレージシステムが利用できなくなった場合に、残りのサイトの残りのストレージシステム (複数可) に自動的にリダイレクトされません。
- Geo レプリケーションは非同期です。サイトが完全に失われると、そのサイトのオブジェクトストレージシステムに保存されていても、障害発生時に残りのサイトに複製されていないデータが失われます。
単一のデータベース、つまりすべてのメタデータと Red Hat Quay 設定がすべてのリージョンで共有されます。
Geo レプリケーションはデータベースをレプリケートしません。障害が発生すると、Geo レプリケーションが有効になっている Red Hat Quay は別のデータベースにフェイルオーバーしません。
- 1 つの Redis キャッシュは Red Hat Quay のセットアップ全体で共有され、すべての Red Hat Quay Pod からアクセスできる必要があります。
-
ストレージバックエンド以外のすべてのリージョンで同じ設定を使用する必要があります。これは、
QUAY_DISTRIBUTED_STORAGE_PREFERENCE
環境変数を使用して明示的に設定できます。 - Geo レプリケーションでは、各リージョンにオブジェクトストレージが必要です。ローカルストレージでは機能しません。
- 各リージョンは、ネットワークパスを必要とする各リージョン内のすべてのストレージエンジンにアクセスできる必要があります。
- また、ストレージプロキシーオプションを使用することもできます。
- ストレージバックエンド全体 (たとえば、すべての Blob) がレプリケートされます。対照的に、リポジトリーミラーリングはリポジトリーまたはイメージに限定できます。
- すべての Red Hat Quay インスタンスは、通常はロードバランサーを介して同じエントリーポイントを共有する必要があります。
- すべての Red Hat Quay インスタンスは、共通の設定ファイル内で定義されているため、スーパーユーザーの同じセットが含まれる必要があります。
-
Geo レプリケーションでは、Clair 設定を
unmanaged
に設定する必要があります。アンマネージド Clair データベースにより、Red Hat Quay は geo-replicated environment で作業できます。この環境では、Red Hat Quay Operator の複数のインスタンスが同じデータベースと通信する必要があります。詳細は、Clair の詳細設定 を参照してください。 - Geo レプリケーションには SSL/TLS 証明書とキーが必要です。詳細は、「Geo-Replication には SSL/TLS 証明書とキーが必要」を参照してください。詳細は、SSL/TLS 証明書を使用した概念実証のデプロイメント を参照してください。
上記の要件を満たすことができない場合は、代わりに 2 つ以上の異なる Red Hat Quay のデプロイメントを使用し、リポジトリーミラーリング機能を利用する必要があります。
16.2.1. スタンドアロン Red Hat Quay のストレージレプリケーションを有効にする
以下の手順を使用して、Red Hat Quay でストレージのレプリケーションを有効にします。
手順
config.yaml
ファイルを更新して、データのレプリケート先のストレージエンジンを含めます。使用するすべてのストレージエンジンをリストする必要があります。# ... FEATURE_STORAGE_REPLICATION: true # ... DISTRIBUTED_STORAGE_CONFIG: usstorage: - RHOCSStorage - access_key: <access_key> bucket_name: <example_bucket> hostname: my.noobaa.hostname is_secure: false port: "443" secret_key: <secret_key> storage_path: /datastorage/registry eustorage: - S3Storage - host: s3.amazon.com port: "443" s3_access_key: <access_key> s3_bucket: <example bucket> s3_secret_key: <secret_key> storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - usstorage - eustorage # ...
オプション: すべてのイメージをすべてのストレージエンジンに完全にレプリケートする必要がある場合は、
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS
フィールドを手動で設定すると、イメージをストレージエンジンにレプリケートできます。これにより、すべてのイメージがそのストレージエンジンにレプリケートされます。以下に例を示します。# ... DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: - usstorage - eustorage # ...
注記名前空間ごとのレプリケーションを有効にするには、Red Hat Quay サポートにお問い合わせください。
ストレージを追加して Geo レプリケーションの Replicate to storage engine by default を有効にした後、すべてのストレージで既存のイメージデータを同期する必要があります。これを行うには、次のコマンドを実行してコンテナー内で実行する必要があります。
$ podman exec -it <container_id>
新しいストレージを追加した後にコンテンツを同期するために、次のコマンドを入力します。
# scl enable python27 bash
# python -m util.backfillreplication
注記この操作は、新しいストレージを追加した後にコンテンツを同期するための 1 回限りの操作です。
16.2.2. ストレージの環境設定による Red Hat Quay の実行
- config.yaml を Red Hat Quay を実行しているすべてのマシンにコピーします。
各リージョンの各マシンは、マシンが稼働しているリージョンの優先ストレージエンジンを持つ
QUAY_DISTRIBUTED_STORAGE_PREFERENCE
環境変数を追加します。たとえば、ヨーロッパで稼働しているマシンで、ホスト上の config ディレクトリーが
$QUAY/config
から利用できる場合です。$ sudo podman run -d --rm -p 80:8080 -p 443:8443 \ --name=quay \ -v $QUAY/config:/conf/stack:Z \ -e QUAY_DISTRIBUTED_STORAGE_PREFERENCE=europestorage \ registry.redhat.io/quay/quay-rhel8:v3.12.0
注記指定された環境変数の値は、コンフィグパネルで定義されたロケーション ID の名前と一致する必要があります。
- すべての Red Hat Quay コンテナーを再起動します。
16.2.3. スタンドアロン Red Hat Quay デプロイメントから geo レプリケートされたサイトを削除する
以下の手順を使用すると、Red Hat Quay 管理者は geo レプリケートされたセットアップ内のサイトを削除できます。
前提条件
-
少なくとも 2 つのサイト (例:
usstorage
とeustorage
) を使用して Red Hat Quay Geo レプリケーションを設定している。 - 各サイトに、独自の組織、リポジトリー、およびイメージタグがある。
手順
次のコマンドを実行して、定義されたすべてのサイト間で Blob を同期します。
$ python -m util.backfillreplication
警告Red Hat Quay
config.yaml
ファイルからストレージエンジンを削除する前に、定義されているすべてのサイト間ですべての Blob が同期されていることを確認する 必要があります。続行する前に、この手順を完了してください。-
サイト
usstorage
の Red Hat Quayconfig.yaml
ファイルで、eustorage
サイトのDISTRIBUTED_STORAGE_CONFIG
エントリーを削除します。 次のコマンドを入力して、実行中のコンテナーのリストを取得します。
$ podman ps
出力例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 92c5321cde38 registry.redhat.io/rhel8/redis-5:1 run-redis 11 days ago Up 11 days ago 0.0.0.0:6379->6379/tcp redis 4e6d1ecd3811 registry.redhat.io/rhel8/postgresql-13:1-109 run-postgresql 33 seconds ago Up 34 seconds ago 0.0.0.0:5432->5432/tcp postgresql-quay d2eadac74fda registry-proxy.engineering.redhat.com/rh-osbs/quay-quay-rhel8:v3.9.0-131 registry 4 seconds ago Up 4 seconds ago 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp quay
次のコマンドを入力して、PostgreSQL コンテナー内でシェルを実行します。
$ podman exec -it postgresql-quay -- /bin/bash
次のコマンドを実行して psql を入力します。
bash-4.4$ psql
次のコマンドを入力して、geo レプリケートされたデプロイメント内のサイトのリストを表示します。
quay=# select * from imagestoragelocation;
出力例
id | name ----+------------------- 1 | usstorage 2 | eustorage
次のコマンドを入力して postgres CLI を終了し、bash-4.4 に再度入ります。
\q
次のコマンドを入力して、
eustorage
サイトを完全に削除します。重要次の操作は元に戻すことができません。注意して使用してください。
bash-4.4$ python -m util.removelocation eustorage
出力例
WARNING: This is a destructive operation. Are you sure you want to remove eustorage from your storage locations? [y/n] y Deleted placement 30 Deleted placement 31 Deleted placement 32 Deleted placement 33 Deleted location eustorage
16.2.4. OpenShift Container Platform での Geo レプリケーションのセットアップ
OpenShift Container Platform で Geo レプリケーションを設定するには、次の手順を実行します。
手順
- Red Hat Quay の postgres インスタンスをデプロイします。
次のコマンドを入力してデータベースにログインします。
psql -U <username> -h <hostname> -p <port> -d <database_name>
quay
という名前で Red Hat Quay のデータベースを作成します。以下に例を示します。CREATE DATABASE quay;
データベース内で pg_trm 拡張機能を有効にします。
\c quay; CREATE EXTENSION IF NOT EXISTS pg_trgm;
Redis インスタンスをデプロイします。
注記- クラウドプロバイダーに独自のサービスが含まれている場合は、Redis インスタンスをデプロイする必要がない可能性があります。
- Builder を利用している場合は、Redis インスタンスをデプロイする必要があります。
- Redis 用の VM をデプロイします。
- Red Hat Quay が実行されているクラスターからアクセスできることを確認します。
- ポート 6379/TCP が開いている必要があります。
インスタンス内で Redis を実行します。
sudo dnf install -y podman podman run -d --name redis -p 6379:6379 redis
- クラスターごとに 1 つずつ、2 つのオブジェクトストレージバックエンドを作成します。1 つのオブジェクトストレージバケットが最初のクラスター (プライマリークラスター) の近くにあり、もう 1 つが 2 番目のクラスター (セカンダリークラスター) の近くにあると理想的です。
- 環境変数のオーバーライドを使用して、同じ設定バンドルでクラスターをデプロイし、個々のクラスターに適切なストレージバックエンドを選択します。
- クラスターへの単一のエントリーポイントを提供するように、ロードバランサーを設定します。
16.2.4.1. OpenShift Container Platform 上の Red Hat Quay での Geo レプリケーションの設定
OpenShift Container Platform 上の Red Hat Quay の Geo レプリケーションを設定するには、次の手順を使用します。
手順
クラスター間で共有される
config.yaml
ファイルを作成します。このconfig.yaml
ファイルには、一般的な PostgreSQL、Redis、ストレージバックエンドの詳細が含まれています。Geo レプリケーションの
config.yaml
ファイルSERVER_HOSTNAME: <georep.quayteam.org or any other name> 1 DB_CONNECTION_ARGS: autorollback: true threadlocals: true DB_URI: postgresql://postgres:password@10.19.0.1:5432/quay 2 BUILDLOGS_REDIS: host: 10.19.0.2 port: 6379 USER_EVENTS_REDIS: host: 10.19.0.2 port: 6379 DATABASE_SECRET_KEY: 0ce4f796-c295-415b-bf9d-b315114704b8 DISTRIBUTED_STORAGE_CONFIG: usstorage: - GoogleCloudStorage - access_key: GOOGQGPGVMASAAMQABCDEFG bucket_name: georep-test-bucket-0 secret_key: AYWfEaxX/u84XRA2vUX5C987654321 storage_path: /quaygcp eustorage: - GoogleCloudStorage - access_key: GOOGQGPGVMASAAMQWERTYUIOP bucket_name: georep-test-bucket-1 secret_key: AYWfEaxX/u84XRA2vUX5Cuj12345678 storage_path: /quaygcp DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: - usstorage - eustorage DISTRIBUTED_STORAGE_PREFERENCE: - usstorage - eustorage FEATURE_STORAGE_REPLICATION: true
- 1
- ルートには適切な
SERVER_HOSTNAME
を使用する必要があり、グローバルロードバランサーのホスト名と一致する必要があります。 - 2
- OpenShift Container Platform Operator を使用してデプロイされた Clair インスタンスの設定ファイルを取得するには、Clair 設定の取得 を参照してください。
次のコマンドを入力して、
configBundleSecret
を作成します。$ oc create secret generic --from-file config.yaml=./config.yaml georep-config-bundle
各クラスターで、
configBundleSecret
を設定し、QUAY_DISTRIBUTED_STORAGE_PREFERENCE
環境変数のオーバーライドを使用して、そのクラスターに適切なストレージを設定します。以下に例を示します。注記両方のデプロイメント間の
config.yaml
ファイルは一致する必要があります。一方のクラスターに変更を加える場合は、もう一方のクラスターでも変更する必要があります。US クラスター
QuayRegistry
の例apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: georep-config-bundle components: - kind: objectstorage managed: false - kind: route managed: true - kind: tls managed: false - kind: postgres managed: false - kind: clairpostgres managed: false - kind: redis managed: false - kind: quay managed: true overrides: env: - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE value: usstorage - kind: mirror managed: true overrides: env: - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE value: usstorage
注記SSL/TLS が管理対象であり、ルートが管理対象外であるため、証明書を設定バンドルで直接指定する必要があります。詳細は、TLS およびルートの設定 を参照してください。
ヨーロッパのクラスター
apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: example-registry namespace: quay-enterprise spec: configBundleSecret: georep-config-bundle components: - kind: objectstorage managed: false - kind: route managed: true - kind: tls managed: false - kind: postgres managed: false - kind: clairpostgres managed: false - kind: redis managed: false - kind: quay managed: true overrides: env: - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE value: eustorage - kind: mirror managed: true overrides: env: - name: QUAY_DISTRIBUTED_STORAGE_PREFERENCE value: eustorage
注記SSL/TLS が管理対象であり、ルートが管理対象外であるため、証明書を設定バンドルで直接指定する必要があります。詳細は、TLS およびルートの設定 を参照してください。
16.2.5. OpenShift Container Platform デプロイメント上の Red Hat Quay から geo レプリケートされたサイトを削除する
以下の手順を使用すると、Red Hat Quay 管理者は geo レプリケートされたセットアップ内のサイトを削除できます。
前提条件
- OpenShift Container Platform にログインしている。
-
少なくとも 2 つのサイト (例:
usstorage
とeustorage
) を使用して Red Hat Quay Geo レプリケーションを設定している。 - 各サイトに、独自の組織、リポジトリー、およびイメージタグがある。
手順
次のコマンドを実行して、定義されたすべてのサイト間で Blob を同期します。
$ python -m util.backfillreplication
警告Red Hat Quay
config.yaml
ファイルからストレージエンジンを削除する前に、定義されているすべてのサイト間ですべての Blob が同期されていることを確認する 必要があります。このコマンドを実行すると、レプリケーションワーカーによって取得されるレプリケーションジョブが作成されます。レプリケートする必要がある Blob がある場合、スクリプトはレプリケートされる Blob の UUID を返します。このコマンドを複数回実行したときに、スクリプトから返された出力が空であっても、レプリケーションプロセスが完了したことを意味するわけではありません。それはレプリケーションのためにキューに入れる Blob が残っていないことを意味します。レプリケーションにかかる割り当て時間は検出された Blob の数によって異なるため、次のステップに進む前に適切に評価してください。
または、Microsoft Azure などのサードパーティーのクラウドツールを使用して、同期ステータスを確認することもできます。
このステップは次に進む前に完了する必要があります。
-
サイト
usstorage
の Red Hat Quayconfig.yaml
ファイルで、eustorage
サイトのDISTRIBUTED_STORAGE_CONFIG
エントリーを削除します。 次のコマンドを入力して、
Quay
アプリケーション Pod を識別します。$ oc get pod -n <quay_namespace>
出力例
quay390usstorage-quay-app-5779ddc886-2drh2 quay390eustorage-quay-app-66969cd859-n2ssm
以下のコマンドを入力して、
usstorage
Pod でインタラクティブシェルセッションを開きます。$ oc rsh quay390usstorage-quay-app-5779ddc886-2drh2
次のコマンドを入力して、
eustorage
サイトを完全に削除します。重要次の操作は元に戻すことができません。注意して使用してください。
sh-4.4$ python -m util.removelocation eustorage
出力例
WARNING: This is a destructive operation. Are you sure you want to remove eustorage from your storage locations? [y/n] y Deleted placement 30 Deleted placement 31 Deleted placement 32 Deleted placement 33 Deleted location eustorage
16.3. Geo レプリケーションのための複合ストレージ
Red Hat Quay の Geo レプリケーションは、異なる複数のレプリケーションターゲットの使用をサポートしています。たとえば、パブリッククラウドの AWS S3 ストレージとオンプレミスの Ceph ストレージを使用します。これは、すべての Red Hat Quay Pod とクラスターノードからすべてのストレージバックエンドへのアクセスを許可するという重要な要件を複雑にします。そのため、以下を使用することを推奨します。
- 内部ストレージの可視性を防ぐための VPN、または
- Red Hat Quay が使用する特定のバケットへのアクセスのみを許可するトークンペア
これにより、Red Hat Quay のパブリッククラウドインスタンスがオンプレミスのストレージにアクセスできるようになりますが、ネットワークは暗号化され、保護され、ACL を使用するため、セキュリティー要件が満たされます。
これらのセキュリティー対策を実施できない場合は、2 つの異なる Red Hat Quay レジストリーをデプロイし、Geo レプリケーションの代わりにリポジトリーミラーリングを使用することが推奨されます。
第17章 スタンドアロンデプロイメントでの Red Hat Quay のバックアップと復元
このセクションの内容を使用して、スタンドアロンデプロイメントの 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 はサービスキーを使用してさまざまなコンポーネントと通信します。サービスキーは、イメージのスキャン、ログイン、ストレージアクセスなどの要求など、完了した要求に署名するために使用されます。
手順
Red Hat Quay レジストリーがすぐに利用できる場合は、
Quay
レジストリーコンテナー内でサービスキーを生成できます。Quay
コンテナー内にキーペアを生成するには、次のコマンドを入力します。$ podman exec quay python3 tools/generatekeypair.py quay-readonly
Red Hat Quay がすぐに利用できない場合は、仮想環境内でサービスキーを生成する必要があります。
Red Hat Quay デプロイメントのディレクトリーに移動し、そのディレクトリー内に仮想環境を作成します。
$ cd <$QUAY>/quay && virtualenv -v venv
次のコマンドを入力して仮想環境をアクティブ化します。
$ source venv/bin/activate
オプション:
pip
CLI ツールがインストールされていない場合はインストールします。$ venv/bin/pip install --upgrade pip
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
次のコマンドを入力して、
requirements-generatekeys.txt
ファイルで定義した Python 依存関係をインストールします。$ venv/bin/pip install -r requirements-generatekeys.txt
次のコマンドを入力して、必要なサービスキーを作成します。
$ 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
次のコマンドを入力して、仮想環境を非アクティブ化します。
$ deactivate
17.1.2. PostgreSQL データベースへのキーの追加
PostgreSQL データベースにサービスキーを追加するには、次の手順に従います。
前提条件
- サービスキーを作成した。
手順
次のコマンドを入力して、Red Hat Quay データベース環境に入ります。
$ podman exec -it postgresql-quay psql -U postgres -d quay
次のコマンドを入力して、
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 | ...
次のクエリーを入力して、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
次のクエリーを使用してキー承認を追加します。
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
作成されたサービスキー行の
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 データベースに追加した。
手順
すべての仮想マシン上のすべての Red Hat Quay インスタンスをシャットダウンします。以下に例を示します。
$ podman stop <quay_container_name_on_virtual_machine_a>
$ podman stop <quay_container_name_on_virtual_machine_b>
次のコマンドを入力して、
quay-readonly.kid
ファイルとquay-readonly.pem
ファイルの内容を、Red Hat Quay 設定バンドルが格納されているディレクトリーにコピーします。$ cp quay-readonly.kid quay-readonly.pem $Quay/config
次のコマンドを入力して、設定バンドルフォルダー内のすべてのファイルに対するファイル権限を設定します。
$ setfacl -m user:1001:rw $Quay/config/*
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' # ...
- 新しい設定バンドルをすべての Red Hat Quay インスタンスに配布します。
次のコマンドを入力して 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}
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 デプロイメントを読み取り専用モードで実行すると、レジストリーの操作を安全に管理しながら、バックアップや復元などのアクションを実行できます。
オプション: 読み取り専用モードでの作業が完了したら、
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;
17.2. スタンドアロンデプロイメントでの Red Hat Quay のバックアップ
この手順では、スタンドアロンデプロイメントで Red Hat Quay のバックアップを作成する方法について説明します。
手順
一時バックアップディレクトリーを作成します (例:
quay-backup
)。$ mkdir /tmp/quay-backup
以下のコマンド例は、Red Hat Quay が開始されたローカルディレクトリー (
/opt/quay-install
など) を示しています。$ podman run --name quay-app \ -v /opt/quay-install/config:/conf/stack:Z \ -v /opt/quay-install/storage:/datastorage:Z \ registry.redhat.io/quay/quay-rhel8:v3.12.0
次のコマンドを実行して、コンテナー内の
/conf/stack
にバインドマウントするディレクトリー (/opt/quay-install
など) に移動します。$ cd /opt/quay-install
以下のコマンドを入力して、Red Hat Quay デプロイメントの内容を
quay-backup
ディレクトリーのアーカイブに圧縮します。$ tar cvf /tmp/quay-backup/quay-backup.tar.gz *
出力例:
config.yaml config.yaml.bak extra_ca_certs/ extra_ca_certs/ca.crt ssl.cert ssl.key
次のコマンドを入力して、Quay コンテナーサービスをバックアップします。
$ podman inspect quay-app | jq -r '.[0].Config.CreateCommand | .[]' | paste -s -d ' ' - /usr/bin/podman run --name quay-app \ -v /opt/quay-install/config:/conf/stack:Z \ -v /opt/quay-install/storage:/datastorage:Z \ registry.redhat.io/quay/quay-rhel8:v3.12.0
次のコマンドを入力して、
conf/stack/config.yaml
ファイルの内容を一時的に作成したquay-config.yaml
ファイルにリダイレクトします。$ podman exec -it quay cat /conf/stack/config.yaml > /tmp/quay-backup/quay-config.yaml
以下のコマンドを入力して、一時的に作成した
quay-config.yaml
にあるDB_URI
を取得します。$ grep DB_URI /tmp/quay-backup/quay-config.yaml
出力例:
$ postgresql://<username>:test123@172.24.10.50/quay
次のコマンドを入力して、PostgreSQL の内容をバックアップ .sql ファイルの一時バックアップディレクトリーに抽出します。
$ pg_dump -h 172.24.10.50 -p 5432 -d quay -U <username> -W -O > /tmp/quay-backup/quay-backup.sql
次のコマンドを入力して、
DISTRIBUTED_STORAGE_CONFIG
の内容を出力します。DISTRIBUTED_STORAGE_CONFIG: default: - S3Storage - s3_bucket: <bucket_name> storage_path: /registry s3_access_key: <s3_access_key> s3_secret_key: <s3_secret_key> host: <host_name> s3_region: <region>
ステップ 7 で取得した
access_key
認証情報を使用して、AWS_ACCESS_KEY_ID
をエクスポートします。$ export AWS_ACCESS_KEY_ID=<access_key>
ステップ 7 で取得した
secret_key
を使用して、AWS_SECRET_ACCESS_KEY
をエクスポートします。$ export AWS_SECRET_ACCESS_KEY=<secret_key>
DISTRIBUTED_STORAGE_CONFIG
のhostname
からquay
バケットを/tmp/quay-backup/blob-backup/
ディレクトリーに同期します。$ aws s3 sync s3://<bucket_name> /tmp/quay-backup/blob-backup/ --source-region us-east-2
出力例:
download: s3://<user_name>/registry/sha256/9c/9c3181779a868e09698b567a3c42f3744584ddb1398efe2c4ba569a99b823f7a to registry/sha256/9c/9c3181779a868e09698b567a3c42f3744584ddb1398efe2c4ba569a99b823f7a download: s3://<user_name>/registry/sha256/e9/e9c5463f15f0fd62df3898b36ace8d15386a6813ffb470f332698ecb34af5b0d to registry/sha256/e9/e9c5463f15f0fd62df3898b36ace8d15386a6813ffb470f332698ecb34af5b0d
機密情報が含まれているため、quay
バケットを同期した後は quay-config.yaml
ファイルを削除することを推奨します。quay-config.yaml
ファイルは quay-backup.tar.gz
ファイルにバックアップされるため、失われることはありません。
17.3. スタンドアロンデプロイメントでの Red Hat Quay の復元
この手順では、スタンドアロンデプロイメントで Red Hat Quay を復元する方法について説明します。
前提条件
- Red Hat Quay デプロイメントをバックアップしている。
手順
Red Hat Quay コンテナー内の
/conf/stack
にバインドマウントする新しいディレクトリーを作成します。$ mkdir /opt/new-quay-install
スタンドアロンデプロイメントでの Red Hat Quay のバックアップ で作成した一時バックアップディレクトリーの内容を、ステップ 1 で作成した
new-quay-install1
ディレクトリーにコピーします。$ cp /tmp/quay-backup/quay-backup.tar.gz /opt/new-quay-install/
次のコマンドを入力して、
new-quay-install
ディレクトリーに移動します。$ cd /opt/new-quay-install/
Red Hat Quay ディレクトリーの内容を抽出します。
$ tar xvf /tmp/quay-backup/quay-backup.tar.gz *
出力例:
config.yaml config.yaml.bak extra_ca_certs/ extra_ca_certs/ca.crt ssl.cert ssl.key
次のコマンドを入力して、バックアップした
config.yaml
ファイルからDB_URI
を呼び出します。$ grep DB_URI config.yaml
出力例:
postgresql://<username>:test123@172.24.10.50/quay
次のコマンドを実行して、PostgreSQL データベースサーバーに入ります。
$ sudo postgres
次のコマンドを入力して、psql と入力し、172.24.10.50 に新しいデータベースを作成して、quay データベースを復元します (例:
example_restore_registry_quay_database
)。$ psql "host=172.24.10.50 port=5432 dbname=postgres user=<username> password=test123" postgres=> CREATE DATABASE example_restore_registry_quay_database;
出力例:
CREATE DATABASE
次のコマンドを実行して、データベースに接続します。
postgres=# \c "example-restore-registry-quay-database";
出力例:
You are now connected to database "example-restore-registry-quay-database" as user "postgres".
次のコマンドを実行して、Quay データベースの
pg_trmg
エクステンションを作成します。example_restore_registry_quay_database=> CREATE EXTENSION IF NOT EXISTS pg_trgm;
出力例:
CREATE EXTENSION
次のコマンドを入力して、postgres CLI を終了します。
\q
次のコマンドを実行して、データベースのバックアップを新しいデータベースにインポートします。
$ psql "host=172.24.10.50 port=5432 dbname=example_restore_registry_quay_database user=<username> password=test123" -W < /tmp/quay-backup/quay-backup.sql
出力例:
SET SET SET SET SET
Red Hat Quay のデプロイメントを再起動する前に
config.yaml
のDB_URI
の値をpostgresql://<username>:test123@172.24.10.50/quay
からpostgresql://<username>:test123@172.24.10.50/example-restore-registry-quay-database
に更新してください。注記DB_URI の形式は
DB_URI postgresql://<login_user_name>:<login_user_password>@<postgresql_host>/<quay_database>
です。ある PostgreSQL サーバーから別の PostgreSQL サーバーに移動する場合は、<login_user_name>
、<login_user_password>
、および<postgresql_host>
の値を同時に更新します。/opt/new-quay-install
ディレクトリーで、DISTRIBUTED_STORAGE_CONFIG
バンドルの内容を出力します。$ cat config.yaml | grep DISTRIBUTED_STORAGE_CONFIG -A10
出力例:
DISTRIBUTED_STORAGE_CONFIG: default: DISTRIBUTED_STORAGE_CONFIG: default: - S3Storage - s3_bucket: <bucket_name> storage_path: /registry s3_access_key: <s3_access_key> s3_region: <region> s3_secret_key: <s3_secret_key> host: <host_name>
注記Red Hat Quay のデプロイメントを再起動する前に
/opt/new-quay-install
にあるDISTRIBUTED_STORAGE_CONFIG
を更新する必要があります。ステップ 13 で取得した
access_key
認証情報を使用して、AWS_ACCESS_KEY_ID
をエクスポートします。$ export AWS_ACCESS_KEY_ID=<access_key>
ステップ 13 で取得した
secret_key
を使用して、AWS_SECRET_ACCESS_KEY
をエクスポートします。$ export AWS_SECRET_ACCESS_KEY=<secret_key>
次のコマンドを入力して、新しい s3 バケットを作成します。
$ aws s3 mb s3://<new_bucket_name> --region us-east-2
出力例:
$ make_bucket: quay
次のコマンドを入力して、すべての Blob を新しい s3 バケットにアップロードします。
$ aws s3 sync --no-verify-ssl \ --endpoint-url <example_endpoint_url> 1 /tmp/quay-backup/blob-backup/. s3://quay/
- 1
- Red Hat Quay レジストリーのエンドポイントは、バックアップ前と復元後に同じである必要があります。
出力例:
upload: ../../tmp/quay-backup/blob-backup/datastorage/registry/sha256/50/505edb46ea5d32b5cbe275eb766d960842a52ee77ac225e4dc8abb12f409a30d to s3://quay/datastorage/registry/sha256/50/505edb46ea5d32b5cbe275eb766d960842a52ee77ac225e4dc8abb12f409a30d upload: ../../tmp/quay-backup/blob-backup/datastorage/registry/sha256/27/27930dc06c2ee27ac6f543ba0e93640dd21eea458eac47355e8e5989dea087d0 to s3://quay/datastorage/registry/sha256/27/27930dc06c2ee27ac6f543ba0e93640dd21eea458eac47355e8e5989dea087d0 upload: ../../tmp/quay-backup/blob-backup/datastorage/registry/sha256/8c/8c7daf5e20eee45ffe4b36761c4bb6729fb3ee60d4f588f712989939323110ec to s3://quay/datastorage/registry/sha256/8c/8c7daf5e20eee45ffe4b36761c4bb6729fb3ee60d4f588f712989939323110ec ...
Red Hat Quay デプロイメントを再起動する前に、config.yaml でストレージ設定を更新します。
DISTRIBUTED_STORAGE_CONFIG: default: DISTRIBUTED_STORAGE_CONFIG: default: - S3Storage - s3_bucket: <new_bucket_name> storage_path: /registry s3_access_key: <s3_access_key> s3_secret_key: <s3_secret_key> s3_region: <region> host: <host_name>
第18章 スタンドアロン Red Hat Quay デプロイメントから Red Hat Quay Operator デプロイメントへの移行
以下の手順で、スタンドアロン Red Hat Quay デプロイメントをバックアップし、これを OpenShift Container Platform の Red Hat Quay Operator に移行できます。
18.1. Red Hat Quay のスタンドアロンデプロイメントのバックアップ
手順
スタンドアロン Red Hat Quay デプロイメントの
config.yaml
をバックアップします。$ mkdir /tmp/quay-backup $ cp /path/to/Quay/config/directory/config.yaml /tmp/quay-backup
スタンドアロン Red Hat Quay デプロイメントが使用しているデータベースのバックアップを作成します。
$ pg_dump -h DB_HOST -p 5432 -d QUAY_DATABASE_NAME -U QUAY_DATABASE_USER -W -O > /tmp/quay-backup/quay-database-backup.sql
- AWS CLI がない場合はインストールします。
~/.aws/
ディレクトリーを作成します。$ mkdir ~/.aws/
スタンドアロンデプロイメントの
config.yaml
からaccess_key
とsecret_key
を取得します。$ grep -i DISTRIBUTED_STORAGE_CONFIG -A10 /tmp/quay-backup/config.yaml
出力例:
DISTRIBUTED_STORAGE_CONFIG: minio-1: - RadosGWStorage - access_key: ########## bucket_name: quay hostname: 172.24.10.50 is_secure: false port: "9000" secret_key: ########## storage_path: /datastorage/registry
config.yaml
ファイルのaccess_key
とsecret_key
を~/.aws
ディレクトリーに保存します。$ touch ~/.aws/credentials
オプション:
access_key
およびsecret_key
が保存されていることを確認します。$ cat > ~/.aws/credentials << EOF [default] aws_access_key_id = ACCESS_KEY_FROM_QUAY_CONFIG aws_secret_access_key = SECRET_KEY_FROM_QUAY_CONFIG EOF
出力例:
aws_access_key_id = ACCESS_KEY_FROM_QUAY_CONFIG aws_secret_access_key = SECRET_KEY_FROM_QUAY_CONFIG
注記aws cli
が`~/.aws/credentials file
ファイルからaccess_key
およびsecret_key
を自動的に収集しない場合、aws configure
を実行して手動でクレデンシャルを入力することで、それを設定できます。quay-backup
ディレクトリーで、bucket_backup
ディレクトリーを作成します。$ mkdir /tmp/quay-backup/bucket-backup
S3 ストレージからすべての Blob をバックアップします。
$ aws s3 sync --no-verify-ssl --endpoint-url https://PUBLIC_S3_ENDPOINT:PORT s3://QUAY_BUCKET/ /tmp/quay-backup/bucket-backup/
注記PUBLIC_S3_ENDPOINT
は、DISTRIBUTED_STORAGE_CONFIG
のhostname
の下にある Red Hat Quay のconfig.yaml
ファイルから読み取ることができます。エンドポイントがセキュアでない場合、エンドポイント URL のhttps
ではなくhttp
を使用します。
この時点で、すべての Red Hat Quay データ、Blob、データベース、および config.yaml
ファイルの完全なバックアップがローカルに保存されているはずです。次のセクションでは、スタンドアロンデプロイメントのバックアップを OpenShift Container Platform の Red Hat Quay に移行します。
18.2. バックアップされたスタンドアロンコンテンツを使用した OpenShift Container Platform への移行
前提条件
-
スタンドアロン Red Hat Quay のデータ、Blob、データベース、および
config.yaml
がバックアップされている。 - Red Hat Quay が、Red Hat Quay Operator を使用して OpenShift Container Platform にデプロイされている。
-
すべてのコンポーネントが
managed
に設定されたQuayRegistry
。
このドキュメントの手順では、quay-enterprise
の namespace を使用します。
Red Hat Quay Operator をスケールダウンします。
$ oc scale --replicas=0 deployment quay-operator.v3.6.2 -n openshift-operators
アプリケーションをスケールダウンし、デプロイメントをミラーリングします。
$ oc scale --replicas=0 deployment QUAY_MAIN_APP_DEPLOYMENT QUAY_MIRROR_DEPLOYMENT
データベース SQL バックアップを
Quay
PostgreSQL データベースインスタンスにコピーします。$ oc cp /tmp/user/quay-backup/quay-database-backup.sql quay-enterprise/quayregistry-quay-database-54956cdd54-p7b2w:/var/lib/pgsql/data/userdata
オペレーターが作成した
config.yaml
ファイルからデータベースパスワードを取得します。$ oc get deployment quay-quay-app -o json | jq '.spec.template.spec.volumes[].projected.sources' | grep -i config-secret
出力例:
"name": "QUAY_CONFIG_SECRET_NAME"
$ oc get secret quay-quay-config-secret-9t77hb84tb -o json | jq '.data."config.yaml"' | cut -d '"' -f2 | base64 -d -w0 > /tmp/quay-backup/operator-quay-config-yaml-backup.yaml
cat /tmp/quay-backup/operator-quay-config-yaml-backup.yaml | grep -i DB_URI
出力例:
postgresql://QUAY_DATABASE_OWNER:PASSWORD@DATABASE_HOST/QUAY_DATABASE_NAME
データベース Pod 内でシェルを実行します。
# oc exec -it quay-postgresql-database-pod -- /bin/bash
psql を入力します。
bash-4.4$ psql
データベースを削除します。
postgres=# DROP DATABASE "example-restore-registry-quay-database";
出力例:
DROP DATABASE
新しいデータベースを作成し、所有者を同じ名前に設定します。
postgres=# CREATE DATABASE "example-restore-registry-quay-database" OWNER "example-restore-registry-quay-database";
出力例:
CREATE DATABASE
データベースに接続します。
postgres=# \c "example-restore-registry-quay-database";
出力例:
You are now connected to database "example-restore-registry-quay-database" as user "postgres".
Quay
データベースのpg_trmg
エクステンションを作成します。example-restore-registry-quay-database=# create extension pg_trgm ;
出力例:
CREATE EXTENSION
postgres CLI を終了して bash-4.4 を再入力します。
\q
PostgreSQL デプロイメントのパスワードを設定します。
bash-4.4$ psql -h localhost -d "QUAY_DATABASE_NAME" -U QUAY_DATABASE_OWNER -W < /var/lib/pgsql/data/userdata/quay-database-backup.sql
出力例:
SET SET SET SET SET
bash モードを終了します。
bash-4.4$ exit
Red Hat Quay Operator の新規設定バンドルを作成します。
$ touch config-bundle.yaml
新規の
config-bundle.yaml
で、LDAP 設定、キー、古いレジストリーのその他の変更など、レジストリーに必要なすべての情報を含めます。以下のコマンドを実行してsecret_key
をconfig-bundle.yaml
に移動します。$ cat /tmp/quay-backup/config.yaml | grep SECRET_KEY > /tmp/quay-backup/config-bundle.yaml
注記すべての LDAP、OIDC、およびその他の情報を手動でコピーし、それを /tmp/quay-backup/config-bundle.yaml ファイルに追加する必要があります。
OpenShift クラスター内に設定バンドルシークレットを作成します。
$ oc create secret generic new-custom-config-bundle --from-file=config.yaml=/tmp/quay-backup/config-bundle.yaml
Quay
Pod をスケールアップします。$ oc scale --replicas=1 deployment quayregistry-quay-app deployment.apps/quayregistry-quay-app scaled
ミラー Pod をスケールアップします。
$ oc scale --replicas=1 deployment quayregistry-quay-mirror deployment.apps/quayregistry-quay-mirror scaled
QuayRegistry
CRD にパッチを適用し、新規カスタム設定バンドルへの参照が含まれるようにします。$ oc patch quayregistry QUAY_REGISTRY_NAME --type=merge -p '{"spec":{"configBundleSecret":"new-custom-config-bundle"}}'
注記Red Hat Quay が内部サーバーエラー
500
を返した場合、DISTRIBUTED_STORAGE_CONFIG
のlocation
をdefault
に更新する必要がある場合があります。/.aws/
ディレクトリーに新しいAWScredentials.yaml
を作成し、Operator が作成したconfig.yaml
ファイルからaccess_key
とsecret_key
を含めます。$ touch credentials.yaml
$ grep -i DISTRIBUTED_STORAGE_CONFIG -A10 /tmp/quay-backup/operator-quay-config-yaml-backup.yaml
$ cat > ~/.aws/credentials << EOF [default] aws_access_key_id = ACCESS_KEY_FROM_QUAY_CONFIG aws_secret_access_key = SECRET_KEY_FROM_QUAY_CONFIG EOF
注記aws cli
が`~/.aws/credentials file
ファイルからaccess_key
およびsecret_key
を自動的に収集しない場合、aws configure
を実行して手動でクレデンシャルを入力することで、それを設定できます。NooBaa の公開されているエンドポイントを記録します。
$ oc get route s3 -n openshift-storage -o yaml -o jsonpath="{.spec.host}{'\n'}"
バックアップデータを NooBaa バックエンドストレージに同期します。
$ aws s3 sync --no-verify-ssl --endpoint-url https://NOOBAA_PUBLIC_S3_ROUTE /tmp/quay-backup/bucket-backup/* s3://QUAY_DATASTORE_BUCKET_NAME
Operator のバックアップを最大 1 Pod にスケールアップします。
$ oc scale –replicas=1 deployment quay-operator.v3.6.4 -n openshift-operators
Operator は、指定されたカスタム設定バンドルを使用して、すべてのシークレットとデプロイメントを調整します。OpenShift Container Platform 上の新しい Red Hat Quay デプロイメントには、古いデプロイメントに含まれていたすべての情報が含まれています。すべてのイメージを取得できるはずです。
第19章 アーティファクトタイプの設定
Red Hat Quay 管理者は、FEATURE_GENERAL_OCI_SUPPORT
、ALLOWED_OCI_ARTIFACT_TYPES
、および IGNORE_UNKNOWN_MEDIATYPES
設定フィールドを使用して、Open Container Initiative (OCI) アーティファクトタイプおよびその他の実験的アーティファクトタイプを設定できます。
次の Open Container Initiative (OCI) アーティファクトタイプは、デフォルトで Red Hat Quay に組み込まれており、FEATURE_GENERAL_OCI_SUPPORT 設定フィールドを通じて有効になります。
フィールド | メディアタイプ | サポートされているコンテンツタイプ |
---|---|---|
Helm |
|
|
Cosign |
|
|
SPDX |
|
|
Syft |
|
|
CycloneDX |
|
|
In-toto |
|
|
Unknown |
|
|
さらに、Red Hat Quay は ZStandard または zstd を使用して、コンテナーイメージまたはその他の関連アーティファクトのサイズを削減します。Zstd は、コンテナーイメージを操作する際のストレージの最適化と転送速度の向上に役立ちます。
次の手順を使用して、デフォルトおよび試験的な OCI メディアタイプのサポートを設定します。
19.1. OCI アーティファクトタイプの設定
以下の手順を使用して、デフォルトで Red Hat Quay に埋め込まれるアーティファクトタイプを設定します。
前提条件
- Red Hat Quay 管理者権限を持がある。
手順
Red Hat Quay の
config.yaml
ファイルで、FEATURE_GENERAL_OCI_SUPPORT
フィールドをtrue
に設定して、一般的な OCI サポートのサポートを有効にしている。以下に例を示します。FEATURE_GENERAL_OCI_SUPPORT: true
FEATURE_GENERAL_OCI_SUPPORT
を true に設定すると、Red Hat Quay ユーザーはデフォルトのアーティファクトタイプのチャートを Red Hat Quay デプロイメントにプッシュおよびプルできるようになりました。
19.2. 追加のアーティファクトタイプの設定
以下の手順を使用して、Red Hat Quay デプロイメント用に追加の特定のアーティファクトタイプを設定します。
ALLOWED_OCI_ARTIFACT_TYPES
設定フィールドを使用すると、Red Hat Quay レジストリーで受け入れられるアーティファクトのタイプを制限できます。Red Hat Quay デプロイメントですべてのアーティファクトタイプを受け入れるようにする場合は、「不明なメディアタイプの設定」を参照してください。
前提条件
- Red Hat Quay 管理者権限を持がある。
手順
ALLOWED_OCI_ARTIFACT_TYPES
設定フィールドを、設定およびレイヤータイプとともに追加します。FEATURE_GENERAL_OCI_SUPPORT: true ALLOWED_OCI_ARTIFACT_TYPES: <oci config type 1>: - <oci layer type 1> - <oci layer type 2> <oci config type 2>: - <oci layer type 3> - <oci layer type 4>
たとえば、次の内容を
config.yaml
ファイルに追加することで、Singularity Image Format (SIF) サポートを追加できます。ALLOWED_OCI_ARTIFACT_TYPES: application/vnd.oci.image.config.v1+json: - application/vnd.dev.cosign.simplesigning.v1+json application/vnd.cncf.helm.config.v1+json: - application/tar+gzip application/vnd.sylabs.sif.config.v1+json: - application/vnd.sylabs.sif.layer.v1+tar
注記デフォルトで設定されていない OCI アーティファクトタイプを追加する場合、Red Hat Quay 管理者は、必要に応じて Cosign と Helm のサポートを手動で追加する必要もあります。
現在、ユーザーは Red Hat Quay レジストリーの SIF イメージにタグを付けることができます。
19.3. 不明なメディアタイプの設定
以下の手順を使用して、Red Hat Quay デプロイメントのすべてのアーティファクトタイプを有効にします。
このフィールドを有効にすると、Red Hat Quay デプロイメントはすべてのアーティファクトタイプを受け入れます。
前提条件
- Red Hat Quay 管理者権限を持がある。
手順
IGNORE_UNKNOWN_MEDIATYPES
設定フィールドを Red Hat Quayconfig.yaml
ファイルに追加します。IGNORE_UNKNOWN_MEDIATYPES: true
このフィールドを有効にすると、Red Hat Quay デプロイメントは不明または認識されないアーティファクトタイプを受け入れます。
第20章 Red Hat Quay ガベージコレクション
Red Hat Quay には、自動で継続的なイメージガベージコレクションが含まれています。ガベージコレクションは、関連付けられていないイメージやタグなしのイメージ、リポジトリー、レイヤーやマニフェストなどのブロブなど、かなりの量のディスクスペースを占めるオブジェクトを削除することで、アクティブオブジェクトのリソースを効率的に使用できるようにします。Red Hat Quay によって実行されるガベージコレクションは、組織の環境でのダウンタイムを減らすことができます。
20.1. 実際の Red Hat Quay ガベージコレクション
現在、すべてのガベージコレクションは慎重に行われ、ガベージコレクションを手動で実行するコマンドはありません。Red Hat Quay は、さまざまなガベージコレクションワーカーのステータスを追跡するメトリックを提供します。
namespace とリポジトリーのガベージコレクションの場合、進行状況はそれぞれのキューのサイズに基づいて追跡されます。namespace とリポジトリーのガベージコレクションワーカーが機能するには、グローバルロックが必要です。その結果、パフォーマンス上の理由から、一度に 1 人のワーカーのみが実行されます。
Red Hat Quay は、ディスク容量を節約するために、名前空間とリポジトリーの間で Blob を共有します。たとえば、同じイメージが 10 回プッシュされた場合、そのイメージのコピーは 1 つだけ保存されます。
タグは、Red Hat Quay にすでに保存されているさまざまなイメージと、タグのレイヤーを共有できます。その場合、共有 Blob を削除すると他のイメージが使用できなくなるため、Blob はストレージに残ります。
Blob の有効期限は、タイムマシンとは無関係です。Red Hat Quay にタグをプッシュして、タイムマシンに 0 秒を設定し、すぐにタグを削除した場合に、ガベージコレクションはそのタグと、そのタグに関連するものすべてを削除しますが、Blob の有効期限に到達するまで Blob のストレージは削除しません。
タグ付きイメージのガベージコレクションは、namespace またはリポジトリーでのガベージコレクションとは動作が異なります。タグ付けされたイメージのガベージコレクションワーカーは、処理するアイテムのキューを用意するのではなく、非アクティブまたは期限切れのタグを持つリポジトリーをアクティブに検索してクリーンアップします。ガベージコレクションワーカーの各インスタンスはリポジトリーロックを取得します。これにより、リポジトリーごとに 1 つのワーカーが生成されます。
- Red Hat Quay では、最後のタグが削除されたか期限切れになったため、非アクティブまたは期限切れのタグはタグのないマニフェストです。マニフェストには、イメージがどのように構成され、個々のタグのデータベースに保存されるかに関する情報が保存されます。タグが削除され、Time Machine から割り当てられた時間に到達すると、Red Hat Quay ガベージは、レジストリー内の他のマニフェストに接続されていない Blob を収集します。特定の Blob がマニフェストに接続されている場合に、Blob はストレージに保持され、削除されるマニフェストへの接続のみが削除されます。
- 期限切れのイメージは割り当てられた時間が経過すると消えますが、Red Hat Quay には引き続き保存されます。イメージが完全に削除されるタイミング、またはコレクションされるタイミングは、組織の Time Machine の設定によって異なります。特に指定がない限り、ガベージコレクションのデフォルトの時間は 14 日です。それまでは、期限切れまたは削除されたイメージをタグで参照できます。
ガベージコレクションのタイプごとに、Red Hat Quay は、各ガベージコレクションワーカーによって削除されたテーブルごとの行数のメトリックを提供します。次のイメージは、Red Hat Quay が同じメトリックを使用してガベージコレクションをモニターする方法の例を示しています。
20.1.1. ストレージ再生の測定
Red Hat Quay には、ガベージコレクションによって解放されたスペースの量を追跡する方法がありません。現在、これを示す最良の指標は、提供されたメトリックで削除された blob の数を確認することです。
Red Hat Quay メトリクスの UploadedBlob
テーブルは、リポジトリーに関連付けられているさまざまな Blob を追跡します。Blob がアップロードされても、PUSH_TEMP_TAG_EXPIRATION_SEC
パラメーターで指定された時間が経過する前に、Blob がガベージコレクションされることはありません。これは、進行中のプッシュに含まれる Blob を途中で削除するのを避けるためです。たとえば、ガベージコレクションが頻繁に実行されるように設定されていて、タグが 1 時間以内に削除されても、関連する Blob がすぐにクリーンアップされないことがあります。関連する Blob が削除されるのは、PUSH_TEMP_TAG_EXPIRATION_SEC
パラメーターで指定された時間が経過して、同じリポジトリーの別の期限切れタグによって次にガベージコレクションの実行がトリガーされたときです。
20.2. ガベージコレクション設定フィールド
次の設定フィールドを使用して、ガベージコレクションの内容、およびガベージコレクションが発生する頻度をカスタマイズできます。
名前 | 説明 | スキーマ |
---|---|---|
FEATURE_GARBAGE_COLLECTION |
イメージタグに対してガベージコレクションが有効になっているかどうか。デフォルトは | ブール値 |
FEATURE_NAMESPACE_GARBAGE_COLLECTION |
namespace に対してガベージコレクションが有効になっているかどうか。デフォルトは | ブール値 |
FEATURE_REPOSITORY_GARBAGE_COLLECTION |
リポジトリーでガベージコレクションが有効になっているかどうか。デフォルトは | ブール値 |
GARBAGE_COLLECTION_FREQUENCY | ガベージコレクションワーカーが実行される頻度 (秒単位)。ガベージコレクションワーカーにのみ影響します。デフォルトは 30 秒です。 | 文字列 |
PUSH_TEMP_TAG_EXPIRATION_SEC | アップロード後にブロブがガベージコレクションされない秒数。この機能は、ガベージコレクションがまだ参照されていないが進行中のプッシュの一部として使用されている blob をクリーンアップするのを防ぎます。 | 文字列 |
TAG_EXPIRATION_OPTIONS | 有効なタグの有効期限の値のリスト。 | 文字列 |
DEFAULT_TAG_EXPIRATION | タイムマシンの有効期限にタグを付けます。 | 文字列 |
CLEAN_BLOB_UPLOAD_FOLDER | S3 マルチパートアップロードから残った古い Blob を自動的に消去します。デフォルトでは、2 日以上経過した Blob ファイルは 1 時間ごとにクリーンアップされます。 | ブール値
+ デフォルト: |
20.3. ガベージコレクションの無効化
イメージタグ、namespace、およびリポジトリーのガベージコレクション機能は、config.yaml
ファイルに保存されます。これらの機能のデフォルトは true
です。
まれに、ガベージコレクションを無効にして、ガベージコレクションを実行するタイミングを制御したい場合があります。GARBAGE_COLLECTION
機能を false
に設定すると、ガベージコレクションを無効にできます。無効にすると、関連付けれていない、またはタグが付いていないイメージ、リポジトリー、名前空間、レイヤー、マニフェストは削除されません。これにより、環境のダウンタイムが増加する可能性があります。
ガベージコレクションを手動で実行するコマンドはありません。代わりに、ガベージコレクション機能を無効にしてから再度有効にします。
20.4. ガベージコレクションとクォータ管理
Red Hat Quay は、3.7 でクォータ管理を導入しました。クォータ管理により、ユーザーは、設定されたストレージクォータ制限を確立することにより、ストレージ消費を報告し、レジストリーの増加を抑えることができます。
Red Hat Quay 3.7 以降、ガベージコレクションは、削除後にイメージ、リポジトリー、および Blob に割り当てられたメモリーを再利用します。ガベージコレクション機能は削除後にメモリーを再利用するため、環境のディスクスペースに格納されているものと、クォータ管理が総消費量としてレポートしているものとの間に不一致があります。現在、この問題に対する回避策はありません。
20.5. 実際のガベージコレクション
以下の手順を使用して Red Hat Quay ログをチェックし、ガベージコレクションが機能していることを確認します。
手順
次のコマンドを入力して、ガベージコレクションが正しく機能していることを確認します。
$ sudo podman logs <container_id>
出力例:
gcworker stdout | 2022-11-14 18:46:52,458 [63] [INFO] [apscheduler.executors.default] Job "GarbageCollectionWorker._garbage_collection_repos (trigger: interval[0:00:30], next run at: 2022-11-14 18:47:22 UTC)" executed successfully
- イメージタグを削除します。
次のコマンドを入力して、タグが削除されたことを確認します。
$ podman logs quay-app
出力例:
gunicorn-web stdout | 2022-11-14 19:23:44,574 [233] [INFO] [gunicorn.access] 192.168.0.38 - - [14/Nov/2022:19:23:44 +0000] "DELETE /api/v1/repository/quayadmin/busybox/tag/test HTTP/1.0" 204 0 "http://quay-server.example.com/repository/quayadmin/busybox?tab=tags" "Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0"
20.6. Red Hat Quay のガベージコレクションメトリック
次のメトリックは、ガベージコレクションによって削除されたリソースの数を示しています。これらのメトリックは、ガベージコレクションワーカーが実行された回数と、削除された namespace、リポジトリー、および Blob の数を示します。
メトリクス名 | 説明 |
---|---|
quay_gc_iterations_total | GCWorker による反復の数 |
quay_gc_namespaces_purged_total | NamespaceGCWorker によってパージされる namespace 数 |
quay_gc_repos_purged_total | RepositoryGCWorker または NamespaceGCWorker がパージするリポジトリーの数 |
quay_gc_storage_blobs_deleted_total | 削除されたストレージ Blob の数 |
メトリックの出力サンプル
# TYPE quay_gc_iterations_created gauge quay_gc_iterations_created{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 1.6317823190189714e+09 ... # HELP quay_gc_iterations_total number of iterations by the GCWorker # TYPE quay_gc_iterations_total counter quay_gc_iterations_total{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 0 ... # TYPE quay_gc_namespaces_purged_created gauge quay_gc_namespaces_purged_created{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 1.6317823190189433e+09 ... # HELP quay_gc_namespaces_purged_total number of namespaces purged by the NamespaceGCWorker # TYPE quay_gc_namespaces_purged_total counter quay_gc_namespaces_purged_total{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 0 .... # TYPE quay_gc_repos_purged_created gauge quay_gc_repos_purged_created{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 1.631782319018925e+09 ... # HELP quay_gc_repos_purged_total number of repositories purged by the RepositoryGCWorker or NamespaceGCWorker # TYPE quay_gc_repos_purged_total counter quay_gc_repos_purged_total{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 0 ... # TYPE quay_gc_storage_blobs_deleted_created gauge quay_gc_storage_blobs_deleted_created{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 1.6317823190189059e+09 ... # HELP quay_gc_storage_blobs_deleted_total number of storage blobs deleted # TYPE quay_gc_storage_blobs_deleted_total counter quay_gc_storage_blobs_deleted_total{host="example-registry-quay-app-6df87f7b66-9tfn6",instance="",job="quay",pid="208",process_name="secscan:application"} 0 ...
第21章 v2 UI の使用
21.1. v2 ユーザーインターフェイス設定
- この UI は現在ベータ版であり、変更される可能性があります。現在の状態では、ユーザーは組織、リポジトリー、およびイメージタグのみを作成、表示、および削除できます。
- 古い UI を使用している場合にセッションがタイムアウトになると、ユーザーはポップアップウィンドウでパスワードを再度入力する必要がありました。新しい UI では、ユーザーはメインページに戻り、ユーザー名とパスワードの認証情報を入力する必要があります。これは既知の問題であり、新しい UI の今後のバージョンで修正される予定です。
- 従来の UI と新しい UI の間で、イメージマニフェストのサイズが報告される方法に違いがあります。従来の UI では、イメージマニフェストはメビバイト単位で報告されていました。v2 UI では、メガバイト (MB) の標準定義を使用してイメージマニフェストのサイズが報告されます。
手順
- デプロイメントにログインします。
デプロイメントのナビゲーションペインに、現在の UI と 新しい UI を切り替えるオプションが表示されます。切り替えボタンをクリックして新しい UI に設定し、次に Use Beta Environment をクリックします。次に例を示します。
21.1.1. v2 UI を使用した新しい組織の作成
前提条件
- v2 UI を使用するようにデプロイメントを切り替えている。
v2 UI を使用して組織を作成するには、次の手順を実行します。
手順
- ナビゲーションペインで Organization をクリックします。
- Create Organization をクリックします。
-
Organization Name (
testorg
など) を入力します。 - Create をクリックします。
これで、サンプルの組織が Organizations ページの下に表示されます。
21.1.2. v2 UI を使用した組織の削除
v2 UI を使用して組織を削除するには、次の手順を実行します。
手順
-
Organizations ページで、削除する組織の名前 (
testorg
など) を選択します。 - More Actions ドロップダウンメニューをクリックします。
Delete をクリックします。
注記Delete ページには、Search 入力ボックスがあります。このボックスを使用すると、ユーザーは特定の組織を検索して、削除が適切にスケジュールされていることを確認できます。たとえば、ユーザーが 10 の組織を削除していて、特定の組織が削除されたことを確認したい場合、Search 入力ボックスを使用して、その組織が削除対象としてマークされていることを確認できます。
- ボックスに confirm と入力して、組織を完全に削除することを確定します。
Delete をクリックします。
削除後、Organizations ページに戻ります。
注記複数の組織を選択してから、More Actions → Delete をクリックすると、一度に複数の組織を削除できます。
21.1.3. v2 UI を使用した新しいリポジトリーの作成
v2 UI を使用してリポジトリーを作成するには、次の手順を実行します。
手順
- ナビゲーションペインで Repositories をクリックします。
- Create Repository をクリックします。
名前空間 (例: quayadmin) を選択し、リポジトリー名 (例:
testrepo
) を入力します。重要リポジトリー名には単語 *
build
*trigger
*tag
を使用しないでください。これらの単語をリポジトリー名に使用すると、ユーザーがリポジトリーにアクセスできなくなり、リポジトリーを完全に削除できなくなります。このようなリポジトリーを削除しようとすると、
Failed to delete repository <repository_name>, HTTP404 - Not Found.
エラーが返されます。Create をクリックします。
これで、サンプルリポジトリーが Repositories ページの下に表示されるはずです。
21.1.4. v2 UI を使用したリポジトリーの削除
前提条件
- リポジトリーが作成済みである。
手順
-
v2 UI の Repositories ページで、削除するイメージの名前 (
quay/admin/busybox
など) をクリックします。 - More Actions ドロップダウンメニューをクリックします。
Delete をクリックします。
注記必要に応じて、Make Public または Make Private をクリックできます。
- ボックスに confirm と入力してから、Delete をクリックします。
- 削除後、Repositories ページに戻ります。
21.1.5. v2 UI へのイメージのプッシュ
イメージを v2 UI にプッシュするには、次の手順を実行します。
手順
外部レジストリーからサンプルイメージをプルします。
$ podman pull busybox
イメージにタグを付けます。
$ podman tag docker.io/library/busybox quay-server.example.com/quayadmin/busybox:test
イメージをレジストリーにプッシュします。
$ podman push quay-server.example.com/quayadmin/busybox:test
- v2 UI の Repositories ページに移動し、イメージが適切にプッシュされていることを確認します。
- イメージタグを選択し、Security Report ページに移動すると、セキュリティーの詳細を確認できます。
21.1.6. v2 UI を使用したイメージの削除
v2 UI を使用してイメージを削除するには、次の手順を実行します。
前提条件
- イメージをレジストリーにプッシュしている。
手順
-
v2 UI の Repositories ページで、削除するイメージの名前 (
quay/admin/busybox
など) をクリックします。 - More Actions ドロップダウンメニューをクリックします。
Delete をクリックします。
注記必要に応じて、Make Public または Make Private をクリックできます。
- ボックスに confirm と入力してから、Delete をクリックします。
- 削除後、Repositories ページに戻ります。
21.1.7. Red Hat Quay v2 UI を使用した新しいチームの作成
Red Hat Quay v2 UI を使用して新しいチームを作成するには、次の手順を実行します。
前提条件
- リポジトリーを持つ組織を作成している。
手順
- Red Hat Quay v2 UI で、組織の名前をクリックします。
- 組織のページで、Teams and membership をクリックします。
- Create new team ボックスをクリックします。
- Create team ポップアップウィンドウで、新しいチームの名前を入力します。
- オプション: 新しいチームの説明を入力します。
- Proceed をクリックします。新しいポップアップウィンドウが表示されます。
- オプション: このチームをリポジトリーに追加し、権限を Read、Write、Admin、または None のいずれかに設定します。
- オプション: チームメンバーまたはロボットアカウントを追加します。チームメンバーを追加するには、Red Hat Quay アカウントの名前を入力します。
情報を確認し、Review and Finish をクリックします。新しいチームが Teams and membership ページに表示されます。ここから、縦の省略記号メニューをクリックし、次のオプションのいずれかを選択できます。
- Manage Team Members。このページでは、すべてのメンバー、チームメンバー、ロボットアカウント、または招待したユーザーを表示できます。Add new member をクリックして、新しいチームメンバーを追加することもできます。
- Set repository permissions。このページでは、リポジトリーの権限を Read、Write、Admin、または None のいずれかに設定できます。
- Delete。このポップアップウィンドウでは、Delete をクリックしてチームを削除できます。
オプション: 次のオプションのいずれかをクリックすると、チーム、メンバー、コラボレーターに関する詳細情報が表示されます。
- Team View。このメニューには、すべてのチーム名、メンバーの数、リポジトリーの数、および各チームのロールが表示されます。
- Members View。このメニューには、チームメンバーのすべてのユーザー名、メンバーが属しているチーム、ユーザーのリポジトリー権限が表示されます。
- Collaborators View。このメニューにはリポジトリーのコラボレーターが表示されます。コラボレーターは、組織内のどのチームにも属さないが、組織に属する 1 つ以上のリポジトリーに対する直接権限を持つユーザーです。
21.1.8. v2 UI を使用したロボットアカウントの作成
v2 UI を使用してロボットアカウントを作成するには、次の手順を実行します。
手順
- v2 UI で、Organizations をクリックします。
-
ロボットアカウントを作成する組織の名前をクリックします (例:
test-org
)。 - Robot accounts タブ → Create robot account をクリックします。
-
Provide a name for your robot account ボックスに、
robot1
などの名前を入力します。 オプション: 必要に応じて、以下のオプションを使用できます。
- ロボットをチームに追加します。
- ロボットをリポジトリーに追加します。
- ロボットのパーミッションを調整します。
Review and finish ページで、入力した情報を確認してから、Review and finish をクリックします。Successfully created robot account with robot name: <organization_name> + <robot_name> というアラートが表示されます。
また、別のロボットアカウントと同じ名前でロボットアカウントを作成しようとすると、Error creating robot account というエラーメッセージが表示される場合があります。
- オプション: Expand または Collapse をクリックすると、ロボットアカウントの説明情報を表示できます。
- オプション: 縦の省略記号メニュー → Set repository permissions をクリックして、ロボットアカウントのパーミッションを変更できます。Successfully updated repository permission というメッセージが表示されます。
- オプション: ロボットアカウントを削除するには、ロボットアカウントのボックスをオンにし、ゴミ箱アイコンをクリックします。ポップアップボックスが表示されます。テキストボックスに confirm と入力してから Delete をクリックします。または、縦の省略記号メニュー → Delete をクリックできます。Successfully deleted robot account というメッセージが表示されます。
21.1.8.1. Red Hat Quay v2 UI を使用したロボットアカウントのリポジトリーアクセスの一括管理
Red Hat Quay v2 UI を使用してロボットアカウントのリポジトリーアクセスを一括管理するには、次の手順を実行します。
前提条件
- ロボットアカウントを作成している。
- 1 つの組織に複数のリポジトリーを作成している。
手順
- Red Hat Quay v2 UI ランディングページで、ナビゲーションペインの Organizations をクリックします。
- Organizations ページで、複数のリポジトリーを持つ組織の名前を選択します。単一組織内のリポジトリーの数は、Repo Count 列で確認できます。
- 組織のページで、Robot accounts をクリックします。
- 複数のリポジトリーにロボットアカウントを追加する場合は、縦の省略記号アイコン → Set repository permissions をクリックします。
Set repository permissions ページで、ロボットアカウントを追加するリポジトリーのチェックボックスをオンにします。以下に例を示します。
- ロボットアカウントの権限を設定します (例: None、Read、Write、Admin)。
- Save をクリックします。Success alert: Successfully updated repository permission というアラートが Set repository permissions ページに表示され、変更が確認されます。
- Organizations → Robot accounts ページに戻ります。これで、ロボットアカウントの Repositories 列に、ロボットアカウントが追加されたリポジトリーの数が表示されます。
21.1.9. Red Hat Quay v2 UI を使用したデフォルトの権限の作成
デフォルトの権限は、リポジトリーの作成者のデフォルトに加えて、リポジトリーの作成時に自動的に付与される権限を定義します。権限は、リポジトリーを作成したユーザーに基づいて割り当てられます。
Red Hat Quay v2 UI を使用してデフォルトの権限を作成するには、次の手順を実行します。
手順
- 組織名をクリックします。
- Default permissions をクリックします。
- create default permissions をクリックします。切り替え式のドロワーが表示されます。
リポジトリーの作成時にデフォルトの権限を作成するには、Anyone または Specific user を選択します。
Anyone を選択する場合は、次の情報を入力する必要があります。
- Applied to。ユーザー/ロボット/チームを検索、招待、または追加します。
- Permission。権限を Read、Write、または Admin のいずれかに設定します。
Specific user を選択する場合は、次の情報を指定する必要があります。
- Repository creator。ユーザーまたはロボットアカウントを指定します。
- Applied to。ユーザー名、ロボットアカウント、またはチーム名を入力します。
- Permission。権限を Read、Write、または Admin のいずれかに設定します。
- Create default permission をクリックします。確認ボックスが表示され、Successfully created default permission for creator というアラートが返されます。
21.1.10. v2 UI での組織の設定
v2 UI を使用して組織の設定を変更するには、次の手順を実行します。
手順
- v2 UI で、Organizations をクリックします。
-
ロボットアカウントを作成する組織の名前をクリックします (例:
test-org
)。 - Settings タブをクリックします。
- オプション: 組織に関連付けられたメールアドレスを入力します。
オプション: Time Machine 機能に割り当てられた時間を以下のいずれかに設定します。
- 1 週間
- 1 カ月
- 1 年
- なし
- Save をクリックします。
21.1.11. v2 UI を使用したイメージタグ情報の表示
v2 UI を使用してイメージタグ情報を表示するには、次の手順を実行します。
手順
- v2 UI で、Repositories をクリックします。
-
リポジトリーの名前をクリックします (例:
quayadmin/busybox
)。 タグの名前をクリックします (例:
test
)。タグの Details ページに移動します。このページには、次の情報が表示されます。- 名前
- リポジトリー
- ダイジェスト
- 脆弱性
- 作成
- 修正済み
- サイズ
- ラベル
- イメージタグの取得方法
- オプション: Security Report をクリックして、タグの脆弱性を表示します。アドバイザリーの列を拡張して、CVE データを開くことができます。
- オプション: Packages をクリックして、タグのパッケージを表示します。
-
リポジトリーの名前 (例:
busybox
) をクリックし、Tags ページに戻ります。 - オプション: Pull アイコンの上にマウスをかざすと、タグの取得方法が表示されます。
- タグのボックスまたは複数のタグにチェックを入れ、Actions ドロップダウンメニューをクリックしてから、Delete をクリックしてタグを削除します。ポップアップボックスの Delete をクリックして削除を確定します。
21.1.12. v2 UI を使用したリポジトリー設定の調整
v2 UI を使用してリポジトリーのさまざまな設定を調整するには、次の手順を実行します。
手順
- v2 UI で、Repositories をクリックします。
-
リポジトリーの名前をクリックします (例:
quayadmin/busybox
)。 - Settings タブをクリックします。
- オプション: User and robot permissions をクリックします。Permissions のドロップダウンメニューオプションをクリックすると、ユーザーまたはロボットアカウントの設定を調整できます。設定を Read、Write、または Admin に変更できます。
オプション: Events and notifications をクリックします。Create Notification をクリックして、イベントおよび通知を作成できます。以下のイベントオプションを使用できます。
- リポジトリーへのプッシュ
- パッケージの脆弱性の検出
- イメージビルドの失敗
- イメージビルドのキューへの追加
- イメージビルドの開始
- イメージビルドの成功
イメージビルドのキャンセル
次に、通知を発行します。以下のオプションを設定できます。
- メール通知
- Flowdock チーム通知
- HipChat ルーム通知
- Slack 通知
Webhook POST
イベントオプションと通知方法を選択したら、Room ID #、Room Notification Token を追加し、Submit をクリックします。
- オプション: Repository visibility をクリックします。Make Public をクリックして、リポジトリーをプライベートまたはパブリックにすることができます。
- オプション: Delete repository をクリックします。Delete Repository をクリックして、リポジトリーを削除できます。
21.2. Red Hat Quay タグ履歴の表示
Red Hat Quay v2 UI でタグ履歴を表示するには、次の手順を実行します。
手順
- Red Hat Quay v2 UI ダッシュボードのナビゲーションペインで Repositories をクリックします。
- イメージタグのあるリポジトリーの名前をクリックします。
Tag History をクリックします。このページでは、次の操作を実行できます。
- タグ名での検索
- 日付範囲の選択
- タグの変更の表示
- タグの変更日と変更時刻の表示
21.3. Red Hat Quay v2 UI でのラベルの追加と管理
Red Hat Quay 管理者は、次の手順を使用してタグのラベルを追加および管理できます。
手順
- Red Hat Quay v2 UI ダッシュボードのナビゲーションペインで Repositories をクリックします。
- イメージタグのあるリポジトリーの名前をクリックします。
- イメージの縦の省略記号メニューをクリックし、Edit labels を選択します。
- Edit labels ウィンドウで、Add new label をクリックします。
key=value
形式を使用してイメージタグのラベルを入力します (例:com.example.release-date=2023-11-14
)。注記key=value
形式の使用に失敗すると、Invalid label format, must be key value separated by =
というエラーが返されます。- 空白のボックスをクリックしてラベルを追加します。
- オプション: 2 番目のラベルを追加します。
-
Save labels をクリックして、ラベルをイメージタグに保存します。
Created labels successfully
という通知が返されます。 - オプション: 同じイメージタグの縦の省略記号メニュー→ Edit labels → ラベルの X をクリックして削除します。または、テキストを編集することもできます。Save labels をクリックします。これでラベルが削除または編集されました。
21.4. Red Hat Quay v2 UI でのタグの有効期限の設定
Red Hat Quay 管理者は、リポジトリー内の特定のタグの有効期限を設定できます。これにより、古いタグや未使用のタグのクリーンアップを自動化し、ストレージスペースを削減できます。
手順
- Red Hat Quay v2 UI ダッシュボードのナビゲーションペインで Repositories をクリックします。
- イメージタグのあるリポジトリーの名前をクリックします。
- イメージの縦の省略記号メニューをクリックし、Change expiration を選択します。
- オプション: または、複数のタグのボックスをクリックし、Actions → Set expiration を選択して有効期限を一括追加することもできます。
-
Change Tags Expiration ウィンドウで、曜日、月、日、年を指定して有効期限を設定します。たとえば、
Wednesday, November 15, 2023
に設定します。または、カレンダーボタンをクリックして日付を手動で選択することもできます。 -
時刻を
2:30 PM
などに設定します。 -
Change Expiration をクリックして日付と時刻を確認します。
Successfully set expiration for tag test to Nov 15, 2023, 2:26 PM
という通知が返されます。 Red Hat Quay v2 UI の Tags ページで、タグの有効期限の設定を確認できます。以下に例を示します。
21.5. Red Hat Quay v2 UI でのカラーテーマ設定の選択
v2 UI を使用する場合、ユーザーはライトモードとダークモードの切り替えができます。この機能にはモードの自動選択も含まれ、ユーザーのブラウザーの設定に応じてライトモードまたはダークモードを選択します。
自動、ライト、およびダークモードを切り替えるには、次の手順を使用します。
手順
- Red Hat Quay リポジトリーにログインします。
- ナビゲーションペインで、ユーザー名 (quayadmin など) をクリックします。
- Appearance で、Light theme、Dark theme、および Device-based theme のいずれかを選択します。デバイスベースのテーマは、ブラウザーのカラー設定に応じてモードを設定します。
21.6. Red Hat Quay v2 UI での使用状況ログの表示
Red Hat Quay ログは、Red Hat Quay レジストリーの使用方法に関する貴重な情報を提供できます。ログは、以下の手順を使用して v2 UI の組織、リポジトリー、または名前空間で表示できます。
手順
- Red Hat Quay レジストリーにログインします。
- 自分が管理者である組織、リポジトリーまたは名前空間に移動します。
Logs をクリックします。
- オプション: From ボックスと To ボックスに日付を追加して、ログエントリーを表示する日付範囲を設定します。
-
オプション: Export をクリックして、ログをエクスポートします。
http://
またはhttps://
で始まるメールアドレスまたは有効なコールバック URL を入力する必要があります。このプロセスは、ログの数に応じて 1 時間かかる場合があります。
21.7. レガシー UI の有効化
ナビゲーションペインに、現在の UI と 新しい UI を切り替えるオプションが表示されます。切り替えボタンをクリックして、Current UI に設定します。
第22章 Red Hat Quay デプロイメントでのヘルスチェックの実行
ヘルスチェックメカニズムは、システム、サービス、またはコンポーネントの正常性と機能を評価するように設計されています。ヘルスチェックは、すべてが正しく機能していることを確認するのに役立ち、重大な問題になる前に潜在的な問題を特定するために使用できます。Red Hat Quay 管理者は、システムの健全性を監視することで、Geo レプリケーションデプロイメント、Operator のデプロイメント、Red Hat Quay のスタンドアロンデプロイメント、オブジェクトストレージの問題などの異常や潜在的な障害に対処できます。ヘルスチェックを行うことで、トラブルシューティングのシナリオが発生する可能性を低減させることができます。
ヘルスチェックメカニズムは、システムの現在の状態に関する貴重な情報を提供することで、問題の診断にロールを果たします。ヘルスチェックの結果を予想されるベンチマークまたは事前定義されたしきい値と比較することで、逸脱や異常をより迅速に特定できます。
22.1. Red Hat Quay ヘルスチェックエンドポイント
以下に示す外部の Web サイトへのリンクは、お客様の利便性のみを目的として提供しています。Red Hat はリンクの内容を確認しておらず、コンテンツまたは可用性について責任を負わないものとします。外部 Web サイトへのリンクが含まれていても、Red Hat が Web サイトまたはその組織、製品、もしくはサービスを保証することを意味するものではありません。お客様は、外部サイトまたはコンテンツの使用 (または信頼) によって生じる損失または費用について、Red Hat が責任を負わないことに同意するものとします。
Red Hat Quay には、いくつかのヘルスチェックエンドポイントがあります。次の表に、ヘルスチェック、説明、エンドポイント、および出力例を示します。
Health check | 説明 | Endpoint (エンドポイント) | 出力例 |
---|---|---|---|
|
|
|
|
|
|
| |
|
|
|
22.2. Red Hat Quay ヘルスチェックエンドポイントへの移動
次の手順を使用して、instance
のエンドポイントに移動します。この手順は、endtoend
および warning
エンドポイントに対して繰り返すことができます。
手順
-
Web ブラウザーで、
https://{quay-ip-endpoint}/health/instance
に移動します。 ヘルスインスタンスページが表示され、以下のような情報が返されます。
{"data":{"services":{"auth":true,"database":true,"disk_space":true,"registry_gunicorn":true,"service_key":true,"web_gunicorn":true}},"status_code":200}
Red Hat Quay の場合、
"status_code": 200
はインスタンスが正常であることを意味します。逆に、"status_code": 503
を受け取った場合は、デプロイメントに問題があります。
第23章 レガシー UI での Red Hat Quay デプロイメントのブランディング
レジストリーのタイトル、ロゴ、フッターイメージを変更したり、フッターイメージに埋め込まれた Web サイトにユーザーを誘導したりすることで、Red Hat Quay デプロイメントの UI をブランド化できます。
手順
Red Hat Quay の
config.yaml
ファイルを更新して、以下のパラメーターを追加します。BRANDING: logo: 1 footer_img: 2 footer_url: 3 --- REGISTRY_TITLE: 4 REGISTRY_TITLE_SHORT: 5
- Red Hat Quay デプロイメントを再起動します。再起動後、Red Hat Quay デプロイメントは新しいロゴ、フッターイメージ、およびフッターイメージ URL で更新されます。
第24章 Red Hat Quay の設定用スキーマ
ほとんどの Red Hat Quay 設定情報は config.yaml
ファイルに保存されます。すべての設定オプションについては、Red Hat Quay 設定ガイド で説明しています。