フィードを購読する

プライベートレジストリは、内部の制御された (場合によってはより安全な) インフラストラクチャでアプリケーションの Linux コンテナイメージを格納するのに役立ちます。

Linux コンテナは、アプリケーションとランタイム環境全体、つまり実行に必要なすべてのファイルをパッケージ化し、分離させるテクノロジーです。これにより、コンテナ内のアプリケーションを複数の環境 (開発、テスト、本番など) 間で簡単に移行することができます。

Red Hat、2023 年 Gartner® Magic Quadrant™ のリーダーに選出される

Red Hat は、Gartner 2023 Magic Quadrant for Container Management において、実行能力とビジョンの完全性が最も高いと評価されました。

この記事では、コンテナ全般の保存に使用できて強力なセキュリティポスチャを持つ、SSL/TLS 対応のシンプルなプライベートレジストリの作成方法と、それを Red Hat OpenShift と統合して OCP の非接続のデプロイを実行できるようにする方法をご紹介します。プライベートレジストリは、OperatorHub がインターネットにアクセスできない場合にも使用できます。

要件

以下の要件を満たしている必要があります。

  • FQDN:registry.rhbrlabs.com
  • OS:Red Hat Enterprise Linux 8.6 以降
  • SELinux:Enforcing (実行中)
  • Firewalld:Enabled (有効)
  • レジストリ:Podman
  • Apache ツール
  • ボリューム:100Gb (/data にマウント)

このレジストリは、OpenShift の非接続のインストールを完全にサポートします。

インストール

システムのセキュリティを最大化する仕様のインストールでは、Linux ですでに利用可能なセキュリティ機能に加えて、暗号化が使用されます。

必要なディレクトリを作成します。

[root@registry ~]# mkdir -p /data/registry/{auth,certs,data}

証明書

コンテナレジストリの証明書を生成します。この例では、10 年間有効な証明書を作成しています。

[root@registry ~]# openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout /data/registry/certs/registry.rhbrlabs.com.key -x509 -days 3650 \
-out /data/registry/certs/registry.rhbrlabs.com.crt \
-subj "/C=US/ST=NorthCarolina/L=Raleigh/O=Red Hat/OU=Engineering/CN=registry.rhbrlabs.com" \
-addext "subjectAltName = DNS:registry.rhbrlabs.com"

オペレーティングシステムは、生成された証明書を信頼する必要があります。

生成された証明書をアンカーが信頼できるディレクトリにコピーし、 update-ca-trust:を実行します。

[root@registry ~]# cp /data/registry/certs/registry.rhbrlabs.com.crt /etc/pki/ca-trust/source/anchors/

[root@registry ~]# update-ca-trust

ユーザーアカウント

レジストリへのアクセスを制御するためには、ユーザーアカウントを作成する必要があります。次の例では、ユーザーレジストリにアカウントを作成します。

イメージレジストリ用の認証ファイルを生成します。

[root@registry ~]# dnf -y install httpd-tools

[root@registry ~]# htpasswd -bBc /data/registry/auth/htpasswd registry redhat12345678

HTTP シークレット

ユーザーアカウントに加えて、アクセスの信頼性を高めるためにシークレットが必要になります。

ランダムシークレットを生成します。

[root@registry ~]# date | md5sum

10f207a4cbba51bf00755b5a50718966

レジストリソフトウェア

必要なデータを用意したら、レジストリを作成します。

イメージ docker.io/library/registry:2 を使用してコンテナレジストリを作成します。

[root@registry ~]# dnf -y install podman

[root@registry ~]# podman create --name ocp-registry --net host -p 5000:5000 \ -v /data/registry/data:/var/lib/registry:z -v /data/registry/auth:/auth:z \ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry" \ -e "REGISTRY_HTTP_SECRET=10f207a4cbba51bf00755b5a50718966" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /data/registry/certs:/certs:z \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.rhbrlabs.com.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/registry.rhbrlabs.com.key docker.io/library/registry:2

上記のコマンドが次のようなメッセージを生成します。

Trying to pull docker.io/library/registry:2...
Getting image source signatures
Copying blob fd4a5435f342 done 
Copying blob 213ec9aee27d done 
Copying blob 4583459ba037 done 
Copying blob b136d5c19b1d done 
Copying blob 6f6a6c5733af done 
Copying config dcb3d42c17 done 
Writing manifest to image destination
Storing signatures
Port mappings have been discarded as one of the Host, Container, Pod, and None network modes are in use
22633f37262a4ab2d64fc8beb44bb80618b11802974fb2f45d31d98db3cf14e8

これでレジストリは使用可能になります。ただし、サービスの開始と停止を制御する方法が必要です。

起動制御

レジストリ用の UNIT ファイルを作成して、ブート時にコンテナが自動的に起動されるようにします。

[root@registry ~]# cat /etc/systemd/system/ocp-registry.service

[Unit] Description=OCP Registry [Service] Restart=always ExecStart=/usr/bin/podman start -a ocp-registry ExecStop=/usr/bin/podman stop -t 10 ocp-registry [Install] WantedBy=network-online.target

コンテナを起動します。

[root@registry ~]# systemctl daemon-reload

[root@registry ~]# systemctl enable --now ocp-registry.service
Private registry running

プライベートレジストリの実行

ファイアウォール

ローカル・ファイアウォールを使用しているため、レジストリサービスのポートを許可する必要があります。

Firewalld で TCP 5000 ポートを許可します。

[root@registry ~]# firewall-cmd --permanent --add-port=5000/tcp

[root@registry ~]# firewall-cmd --reload

レジストリが機能していることを確認する

新しいレジストリへのアクセスを確認しましょう。

認証と信頼された SSL/TLS が機能していることを確認します。

[root@registry ~]# curl -u 'registry:redhat12345678' https://registry.rhbrlabs.com:5000/v2/_catalog

{"repositories":[]}

Red Hat OpenShift との統合

OCP と一緒にこのレジストリを使用する場合は、認証情報を含むファイルを base64 形式で作成します。

OpenShift の非接続のインストールに必要な認証情報を使って、一時ファイルを生成します。

[root@registry ~]# cat <<EOF > ~/registry-secret.json
"registry.rhbrlabs.com:5000": {
   "email": "registry@redhat.com",
   "auth": "$(echo -n 'registry:redhat12345678' | base64 -w0)"
}
EOF

最後に

これで、追加のセキュリティ機能を備えた新しいプライベートレジストリが稼働し始めます。パブリックのレジストリサービスはセキュリティ上の問題の影響を受けやすいため、プライベートのレジストリサービスの使用が、アクセスを制御し、より厳格なセキュリティ基準を満たす優れた方法です。

この記事では、セキュリティが強化されたレジストリをゼロから作成する方法を説明しました。このレジストリは機能的なソリューションですが、より堅牢なソリューションではすでに利用可能な、高可用性、ミラーリング、キャッシング、Geo レプリケーションなどの高度な機能はありません。

これらすべての機能に加え、コンテナの脆弱性スキャン、オブジェクトストレージのサポート、自動スケーリングは Red Hat Quay に組み込まれています。

Red Hat Quay コンテナレジストリ・プラットフォームは、あらゆるインフラストラクチャ上でコンテナとクラウドネイティブ・アーティファクトのセキュリティが強化されたストレージ、配布、ガバナンスを提供します。スタンドアローンのコンポーネントとして、または Red Hat OpenShift 上で実行できます。


執筆者紹介

Andre Rocha is a Consultant at Red Hat focused on OpenStack, OpenShift, RHEL and other Red Hat products. He has been at Red Hat since 2019, previously working as DevOps and SysAdmin for private companies.

Read full bio
UI_Icon-Red_Hat-Close-A-Black-RGB

チャンネル別に見る

automation icon

自動化

テクノロジー、チームおよび環境に関する IT 自動化の最新情報

AI icon

AI (人工知能)

お客様が AI ワークロードをどこでも自由に実行することを可能にするプラットフォームについてのアップデート

open hybrid cloud icon

オープン・ハイブリッドクラウド

ハイブリッドクラウドで柔軟に未来を築く方法をご確認ください。

security icon

セキュリティ

環境やテクノロジー全体に及ぶリスクを軽減する方法に関する最新情報

edge icon

エッジコンピューティング

エッジでの運用を単純化するプラットフォームのアップデート

Infrastructure icon

インフラストラクチャ

世界有数のエンタープライズ向け Linux プラットフォームの最新情報

application development icon

アプリケーション

アプリケーションの最も困難な課題に対する Red Hat ソリューションの詳細

Original series icon

オリジナル番組

エンタープライズ向けテクノロジーのメーカーやリーダーによるストーリー