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

以下のセクションを使用して、高度な Red Hat Quay を設定します。

3.1. SSL/TLS の使用

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

注記

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

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

3.1.1. 認証局の作成と証明書への署名

次の手順を使用して、ssl.cert および ssl.key という名前の証明書ファイルとプライマリーキーファイルを作成します。

3.1.1.1. 認証局の作成

認証局 (CA) を作成するには、次の手順を使用します。

手順

  1. 次のコマンドを入力して、ルート CA キーを生成します。

    $ openssl genrsa -out rootCA.key 2048
  2. 次のコマンドを入力して、ルート CA 証明書を生成します。

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

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

3.1.1.2. 証明書への署名

証明書に署名するには、次の手順を使用します。

手順

  1. 次のコマンドを入力してサーバーキーを生成します。

    $ openssl genrsa -out ssl.key 2048
  2. 次のコマンドを入力して、署名リクエストを生成します。

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

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

    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

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

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

3.1.2. Red Hat Quay UI を使用した SSL/TLS の設定

Red Hat Quay UI を使用して SSL/TLS を設定するには、次の手順を実行します。

コマンドラインインターフェイスを使用して SSL を設定するには、コマンドラインインターフェイスを使用した SSL/TLS の設定を参照してください。

前提条件

  • 認証局を作成して証明書に署名している。

手順

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

    $ sudo podman run --rm -it --name quay_config -p 80:8080 -p 443:8443 registry.redhat.io/quay/quay-rhel8:v3.9.0 config secret
  2. Server Configuration セクションで、Red Hat Quay handles TLS を選択します。前に作成した証明書ファイルと秘密鍵ファイルをアップロードし、Server Hostname 証明書の作成時に使用された値と一致することを確認します。
  3. 更新された設定を検証およびダウンロードします。
  4. 次のコマンドを入力して、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.9.0

3.1.3. コマンドラインインターフェイスを使用した SSL の設定

コマンドラインインターフェイスを使用して SSL/TLS を設定するには、次の手順を実行します。

前提条件

  • 認証局を作成して証明書に署名している。

手順

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

    cp ~/ssl.cert ~/ssl.key $QUAY/config
  2. 次のコマンドを入力して、$QUAY/config ディレクトリーに移動します。

    $ cd $QUAY/config
  3. config.yaml ファイルを編集し、Red Hat Quay が TLS/SSL を処理するように指定します。

    config.yaml

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

  4. オプション: 次のコマンドを入力して、rootCA.pem ファイルの内容を ssl.cert ファイルの末尾に追加します。

    $ cat rootCA.pem >> ssl.cert
  5. 次のコマンドを入力して、Quay コンテナーを停止します。

    $ sudo podman stop quay
  6. 次のコマンドを入力してレジストリーを再起動します。

    $ 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.9.0

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

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

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

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

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

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

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

Potential risk

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

Connection not secure

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

3.1.6. 認証局を信頼するように Podman を設定する

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

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

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

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

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

$ sudo podman login quay-server.example.com

Username: quayadmin
Password:
Login Succeeded!

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

認証局を信頼するようにシステムを設定するには、次の手順を使用します。

手順

  1. 次のコマンドを入力して、rootCA.pem ファイルをシステム全体の統合トラストストアにコピーします。

    $ sudo cp rootCA.pem /etc/pki/ca-trust/source/anchors/
  2. 次のコマンドを入力して、システム全体のトラストストア設定を更新します。

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

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

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

    Connection not secure

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

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

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