プライベートレジストリは、内部の制御された (場合によってはより安全な) インフラストラクチャでアプリケーションの 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
プライベートレジストリの実行
ファイアウォール
ローカル・ファイアウォールを使用しているため、レジストリサービスのポートを許可する必要があります。
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.
チャンネル別に見る
自動化
テクノロジー、チームおよび環境に関する IT 自動化の最新情報
AI (人工知能)
お客様が AI ワークロードをどこでも自由に実行することを可能にするプラットフォームについてのアップデート
オープン・ハイブリッドクラウド
ハイブリッドクラウドで柔軟に未来を築く方法をご確認ください。
セキュリティ
環境やテクノロジー全体に及ぶリスクを軽減する方法に関する最新情報
エッジコンピューティング
エッジでの運用を単純化するプラットフォームのアップデート
インフラストラクチャ
世界有数のエンタープライズ向け Linux プラットフォームの最新情報
アプリケーション
アプリケーションの最も困難な課題に対する Red Hat ソリューションの詳細
オリジナル番組
エンタープライズ向けテクノロジーのメーカーやリーダーによるストーリー
製品
ツール
試用、購入、販売
コミュニケーション
Red Hat について
エンタープライズ・オープンソース・ソリューションのプロバイダーとして世界をリードする Red Hat は、Linux、クラウド、コンテナ、Kubernetes などのテクノロジーを提供しています。Red Hat は強化されたソリューションを提供し、コアデータセンターからネットワークエッジまで、企業が複数のプラットフォームおよび環境間で容易に運用できるようにしています。
言語を選択してください
Red Hat legal and privacy links
- Red Hat について
- 採用情報
- イベント
- 各国のオフィス
- Red Hat へのお問い合わせ
- Red Hat ブログ
- ダイバーシティ、エクイティ、およびインクルージョン
- Cool Stuff Store
- Red Hat Summit