9.2. イメージレジストリーの設定
				image.config.openshift.io/cluster カスタムリソース (CR) を編集してイメージレジストリーの設定を行うことができます。レジストリーへの変更が image.config.openshift.io/cluster CR に適用されると、Machine Config Operator (MCO) は以下の一連のアクションを実行します。
			
- ノードを封鎖します
- CRI-O を再起動して変更を適用します
- ノードを解放します 注記- MCO は、変更を検出してもノードを再起動しません。 
手順
- image.config.openshift.io/clusterカスタムリソースを編集します。- oc edit image.config.openshift.io/cluster - $ oc edit image.config.openshift.io/cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 以下は、 - image.config.openshift.io/clusterCR の例になります。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- Image: イメージの処理方法に関するクラスター全体の情報を保持します。唯一有効な正規の名前は- clusterです。
- 2
- allowedRegistriesForImport: 標準ユーザーがイメージのインポートに使用するコンテナーイメージレジストリーを制限します。このリストを、有効なイメージを含むものとしてユーザーが信頼し、アプリケーションのインポート元となるレジストリーに設定します。イメージまたは- ImageStreamMappingsを API 経由で作成するパーミッションを持つユーザーは、このポリシーによる影響を受けません。通常、これらのパーミッションを持っているのはクラスター管理者のみです。
- 3
- additionalTrustedCA: イメージストリームのインポート、Pod のイメージプル、- openshift-image-registryプルスルー、およびビルド時に信頼される追加の認証局 (CA) が含まれる config map の参照です。この config map の namespace は- openshift-configです。config map の形式では、信頼する追加のレジストリー CA についてレジストリーのホスト名をキーとして使用し、PEM 証明書を値として使用します。
- 4
- registrySources: ビルドおよび Pod のイメージにアクセスする際に、コンテナーランタイムが個々のレジストリーを許可するかブロックするかを決定する設定が含まれます。- allowedRegistriesパラメーターまたは- blockedRegistriesパラメーターのいずれかを設定できますが、両方を設定することはできません。安全でないレジストリーまたはイメージの短い名前を使用するレジストリーを許可するレジストリーへのアクセスを許可するかどうかを定義することもできます。この例では、使用が許可されるレジストリーを定義する- allowedRegistriesパラメーターを使用します。安全でないレジストリー- insecure.comも許可されます。- registrySourcesパラメーターには、内部クラスターレジストリーの設定は含まれません。
 注記- allowedRegistriesパラメーターが定義されると、明示的に一覧表示されない限り、registry.redhat.io レジストリーと quay.io レジストリー、およびデフォルトの OpenShift イメージレジストリーを含むすべてのレジストリーがブロックされます。パラメーターを使用する場合は、Pod の失敗を防ぐために、- registry.redhat.ioレジストリーと- quay.ioレジストリー、および- internalRegistryHostnameを- allowedRegistries一覧に追加する必要があります。これらは、お使いの環境内のペイロードイメージで必要とされます。- registry.redhat.ioおよび- quay.ioレジストリーを- blockedRegistries一覧に追加しないでください。- allowedRegistries、- blockedRegistries、または- insecureRegistriesパラメーターを使用する場合、レジストリー内に個別のリポジトリーを指定できます。例:- reg1.io/myrepo/myapp:latest- セキュリティー上のリスクを軽減するために、非セキュアな外部レジストリーは回避する必要があります。 
- 変更が適用されたことを確認するには、ノードを一覧表示します。 - oc get nodes - $ oc get nodes- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
9.2.1. 特定のレジストリーの追加
					image.config.openshift.io/cluster カスタムリソース (CR) を編集してイメージのプルおよびプッシュアクションで許可されるレジストリーのリスト、およびオプションでレジストリー内の個別のリポジトリーを追加できます。OpenShift Container Platform は、この CR への変更をクラスター内のすべてのノードに適用します。
				
					イメージをプルまたはプッシュする場合、コンテナーランタイムは image.config.openshift.io/cluster CR の registrySources パラメーターの下にリスト表示されるレジストリーを検索します。allowedRegistries パラメーターの下にレジストリーのリストを作成している場合、コンテナーランタイムはそれらのレジストリーのみを検索します。一覧に含まれていないレジストリーはブロックされます。
				
						allowedRegistries パラメーターが定義されると、明示的に一覧表示されない限り、registry.redhat.io レジストリーと quay.io レジストリー、およびデフォルトの OpenShift イメージレジストリーを含むすべてのレジストリーがブロックされます。パラメーターを使用する場合は、Pod の失敗を防ぐために、registry.redhat.io レジストリーと quay.io レジストリー、および internalRegistryHostname を allowedRegistries リストに追加します。これらは、お使いの環境内のペイロードイメージで必要とされます。非接続クラスターの場合、ミラーレジストリーも追加する必要があります。
					
手順
- image.config.openshift.io/clusterカスタムリソースを編集します。- oc edit image.config.openshift.io/cluster - $ oc edit image.config.openshift.io/cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 以下は、許可リストを含む - image.config.openshift.io/clusterリソースの例になります。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注記- allowedRegistriesパラメーターまたは- blockedRegistriesパラメーターのいずれかを設定できますが、両方を設定することはできません。- Machine Config Operator (MCO) は、 - image.config.openshift.io/clusterリソースでレジストリーへの変更の有無を監視します。MCO が変更を検出すると、これはノードをドレイン (解放) し、その変更を適用してノードの遮断を解除します。ノードが- Ready状態に戻った後に、許可されるレジストリーリストは、各ノードの- /etc/containers/policy.jsonファイルでイメージ署名ポリシーを更新するために使用されます。
検証
- 次のコマンドを入力して、ノードのリストを取得します。 - oc get nodes - $ oc get nodes- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - NAME STATUS ROLES AGE VERSION <node_name> Ready control-plane,master 37m v1.27.8+4fab27b - NAME STATUS ROLES AGE VERSION <node_name> Ready control-plane,master 37m v1.27.8+4fab27b- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 次のコマンドを実行し、ノード上でデバッグモードに入ります。 - oc debug node/<node_name> - $ oc debug node/<node_name>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- プロンプトが表示されたら、ターミナルに - chroot /hostを入力します。- chroot /host - sh-4.4# chroot /host- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次のコマンドを入力して、レジストリーがポリシーファイルに追加されたことを確認します。 - cat /etc/containers/policy.json | jq '.' - sh-5.1# cat /etc/containers/policy.json | jq '.'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 以下のポリシーは、イメージのプルおよびプッシュで、example.com、quay.io、および registry.redhat.io レジストリーからのイメージのみを許可されることを示しています。 - 例9.1 イメージ署名ポリシーファイルの例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
						クラスターが registrySources.insecureRegistries パラメーターを使用する場合、非セキュアなレジストリーが許可リストに含まれることを確認します。
					
以下に例を示します。
9.2.2. 特定のレジストリーのブロック
					image.config.openshift.io/cluster カスタムリソース (CR) を編集してレジストリー、およびオプションでレジストリー内の個別のリポジトリーをブロックできます。OpenShift Container Platform は、この CR への変更をクラスター内のすべてのノードに適用します。
				
					イメージをプルまたはプッシュする場合、コンテナーランタイムは image.config.openshift.io/cluster CR の registrySources パラメーターの下にリスト表示されるレジストリーを検索します。blockedRegistries パラメーターの下にレジストリーのリストを作成した場合、コンテナーランタイムはそれらのレジストリーを検索しません。他のすべてのレジストリーは許可されます。
				
						Pod の失敗を防ぐために、registry.redhat.io レジストリーおよび quay.io レジストリーを blockedRegistries リストに追加しないでください。これらは、お使いの環境内のペイロードイメージで必要とされます。
					
手順
- image.config.openshift.io/clusterカスタムリソースを編集します。- oc edit image.config.openshift.io/cluster - $ oc edit image.config.openshift.io/cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 以下は、ブロックリストを含む - image.config.openshift.io/clusterCR の例です。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注記- blockedRegistriesレジストリーまたは- allowedRegistriesレジストリーのいずれかを設定できますが、両方を設定することはできません。- Machine Config Operator (MCO) は、 - image.config.openshift.io/clusterリソースでレジストリーへの変更の有無を監視します。MCO が変更を検出すると、これはノードをドレイン (解放) し、その変更を適用してノードの遮断を解除します。ノードが- Ready状態に戻った後に、ブロックされたレジストリーへの変更は各ノードの- /etc/containers/registries.confファイルに表示されます。この期間中、サービスが利用できなくなる可能性があります。
検証
- 次のコマンドを入力して、ノードのリストを取得します。 - oc get nodes - $ oc get nodes- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - NAME STATUS ROLES AGE VERSION <node_name> Ready control-plane,master 37m v1.27.8+4fab27b - NAME STATUS ROLES AGE VERSION <node_name> Ready control-plane,master 37m v1.27.8+4fab27b- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 次のコマンドを実行し、ノード上でデバッグモードに入ります。 - oc debug node/<node_name> - $ oc debug node/<node_name>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- プロンプトが表示されたら、ターミナルに - chroot /hostを入力します。- chroot /host - sh-4.4# chroot /host- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次のコマンドを入力して、レジストリーがポリシーファイルに追加されたことを確認します。 - cat etc/containers/registries.conf - sh-5.1# cat etc/containers/registries.conf- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 以下の例では、 - untrusted.comレジストリーからのイメージが、イメージのプルおよびプッシュで許可されないことを示しています。- 出力例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
9.2.2.1. ペイロードレジストリーのブロック
						ミラーリング設定では、ImageContentSourcePolicy (ICSP) オブジェクトを使用して、切断された環境でアップストリームペイロードレジストリーをブロックできます。以下の手順例は、quay.io/openshift-payload ペイロードレジストリーをブロックする方法を示しています。
					
手順
- ImageContentSourcePolicy(ICSP) オブジェクトを使用してミラー設定を作成し、ペイロードをインスタンスのレジストリーにミラーリングします。以下の ICSP ファイルの例は、ペイロード- internal-mirror.io/openshift-payloadをミラーリングします。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- オブジェクトがノードにデプロイされたら、 - /etc/containers/registries.confファイルをチェックして、ミラー設定が設定されていることを確認します。- 出力例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次のコマンドを使用して、 - image.config.openshift.ioカスタムリソースファイルを編集します。- oc edit image.config.openshift.io cluster - $ oc edit image.config.openshift.io cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- ペイロードレジストリーをブロックするには、次の設定を - image.config.openshift.ioカスタムリソースファイルに追加します。- spec: registrySources: blockedRegistries: - quay.io/openshift-payload- spec: registrySources: blockedRegistries: - quay.io/openshift-payload- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
検証
- ノードの - /etc/containers/registries.confファイルをチェックして、上流のペイロードレジストリーがブロックされていることを確認します。- 出力例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
9.2.3. 非セキュアなレジストリー
					image.config.openshift.io/cluster カスタムリソース (CR) を編集して、非セキュアなレジストリー、およびオプションでレジストリー内の個別のリポジトリーを追加できます。OpenShift Container Platform は、この CR への変更をクラスター内のすべてのノードに適用します。
				
有効な SSL 証明書を使用しないレジストリー、または HTTPS 接続を必要としないレジストリーは、非セキュアであると見なされます。
セキュリティー上のリスクを軽減するために、非セキュアな外部レジストリーは回避する必要があります。
手順
- image.config.openshift.io/clusterカスタムリソースを編集します。- oc edit image.config.openshift.io/cluster - $ oc edit image.config.openshift.io/cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 以下は、非セキュアなレジストリーのリストを含む - image.config.openshift.io/clusterCR の例になります。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注記- allowedRegistriesパラメーターが定義されると、明示的に一覧表示されない限り、registry.redhat.io レジストリーと quay.io レジストリー、およびデフォルトの OpenShift イメージレジストリーを含むすべてのレジストリーがブロックされます。パラメーターを使用する場合は、Pod の失敗を防ぐために、- registry.redhat.ioレジストリーと- quay.ioレジストリー、および- internalRegistryHostnameを含むすべてのレジストリーを- allowedRegistriesリストに追加します。これらは、お使いの環境内のペイロードイメージで必要とされます。非接続クラスターの場合、ミラーレジストリーも追加する必要があります。- Machine Config Operator (MCO) は、 - image.config.openshift.io/clusterCR でレジストリーへの変更の有無を監視し、変更を検出するとノードをドレイン (解放) し、遮断を解除します。ノードが- Ready状態に戻った後に、非セキュアな、およびブロックされたレジストリーへの変更は、各ノードの- /etc/containers/registries.confファイルに表示されます。
検証
- レジストリーがポリシーファイルに追加されていることを確認するには、ノードで以下のコマンドを使用します。 - cat /etc/containers/registries.conf - $ cat /etc/containers/registries.conf- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 以下の例は、 - insecure.comレジストリーからのイメージが非セキュアであり、イメージのプルおよびプッシュで許可されることを示しています。- 出力例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
9.2.4. イメージの短縮名を許可するレジストリーの追加
					image.config.openshift.io/cluster カスタムリソース (CR) を編集して、イメージの短縮名を検索するためにレジストリーを追加できます。OpenShift Container Platform は、この CR への変更をクラスター内のすべてのノードに適用します。
				
					イメージの短縮名を使用して、プル仕様に完全修飾ドメイン名を追加せずに、イメージを検索できます。たとえば、registry.access.redhat.com/rhe7/etcd の代わりに rhel7/etcd を使用できます。
				
完全パスを使用することが実際的ではない場合に、短縮名を使用できる場合があります。たとえば、クラスターが DNS が頻繁に変更される複数の内部レジストリーを参照する場合、毎回の変更ごとにプル仕様の完全修飾ドメイン名を更新する必要が生じる可能性があります。この場合は、イメージの短縮名を使用した方が良いでしょう。
					イメージをプルまたはプッシュする場合、コンテナーランタイムは image.config.openshift.io/cluster CR の registrySources パラメーターの下にリスト表示されるレジストリーを検索します。短縮名を使用してイメージをプル際に、containerRuntimeSearchRegistries パラメーターでレジストリーのリストを作成している場合、コンテナーランタイムはそれらのレジストリーを検索します。
				
公開レジストリーで認証が必要な場合、イメージがデプロイされない可能性があるため、公開レジストリーでイメージの短縮名を使用することは推奨しません。公開レジストリーで完全修飾イメージ名を使用します。
通常、Red Hat の内部レジストリーまたはプライベートレジストリーは、イメージの短縮名の使用をサポートしています。
						containerRuntimeSearchRegistries パラメーター (registry.redhat.io、docker.io、および quay.io レジストリーを含む) にパブリックレジストリーをリスト表示する場合、認証情報はリスト上のすべてのレジストリーに公開され、ネットワークおよびレジストリーの攻撃にされされるリスクが生じます。イメージをプルするためのプルシークレットは 1 つしかないため、グローバルプルシークレットで定義されているように、そのシークレットは、そのリスト内のすべてのレジストリーに対して認証するために使用されます。したがって、リストにパブリックレジストリーを含めると、セキュリティーリスクが発生します。
					
						各パブリックレジストリーが異なる認証情報を必要とし、クラスターでグローバルプルシークレットにパブリックレジストリーがリストされない場合には、containerRuntimeSearchRegistries パラメーターの下に複数のパブリックレジストリーをリストできません。
					
認証が必要なパブリックレジストリーの場合、レジストリーの認証情報がグローバルプルシークレットに格納されている場合にのみ、イメージの短縮名を使用できます。
					Machine Config Operator (MCO) は、image.config.openshift.io/cluster リソースでレジストリーへの変更の有無を監視します。MCO が変更を検出すると、これはノードをドレイン (解放) し、その変更を適用してノードの遮断を解除します。この期間中、サービスが利用できなくなる可能性があります。ノードが Ready 状態に戻った後に、containerRuntimeSearchRegistries パラメーターが追加されると、MCO はリスト表示されるレジストリーで各ノードの /etc/containers/registries.conf.d ディレクトリーにファイルを作成します。このファイルは、/etc/containers/registries.conf ファイルの非修飾検索レジストリーのデフォルトリストをオーバーライドします。修飾されていない検索レジストリーのデフォルトリストにフォールバックする方法はありません。
				
					containerRuntimeSearchRegistries パラメーターは、Podman および CRI-O コンテナーエンジンを使用する場合のみ機能します。リストのレジストリーは、ビルドおよびイメージストリームではなく、Pod 仕様でのみ使用できます。
				
手順
- image.config.openshift.io/clusterカスタムリソースを編集します。- oc edit image.config.openshift.io/cluster - $ oc edit image.config.openshift.io/cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 以下は、 - image.config.openshift.io/clusterCR の例になります。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注記- allowedRegistriesパラメーターが定義されると、明示的に一覧表示されない限り、- registry.redhat.ioレジストリーと- quay.ioレジストリー、およびデフォルトの OpenShift イメージレジストリーを含むすべてのレジストリーがブロックされます。このパラメーターを使用する場合は、Pod の失敗を防ぐために、- registry.redhat.ioレジストリーと- quay.ioレジストリー、および- internalRegistryHostnameを含むすべてのレジストリーを- allowedRegistriesリストに追加します。これらは、お使いの環境内のペイロードイメージで必要とされます。非接続クラスターの場合、ミラーレジストリーも追加する必要があります。
検証
- 次のコマンドを入力して、ノードのリストを取得します。 - oc get nodes - $ oc get nodes- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - NAME STATUS ROLES AGE VERSION <node_name> Ready control-plane,master 37m v1.27.8+4fab27b - NAME STATUS ROLES AGE VERSION <node_name> Ready control-plane,master 37m v1.27.8+4fab27b- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 次のコマンドを実行し、ノード上でデバッグモードに入ります。 - oc debug node/<node_name> - $ oc debug node/<node_name>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- プロンプトが表示されたら、ターミナルに - chroot /hostを入力します。- chroot /host - sh-4.4# chroot /host- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次のコマンドを入力して、レジストリーがポリシーファイルに追加されたことを確認します。 - cat /etc/containers/registries.conf.d/01-image-searchRegistries.conf - sh-5.1# cat /etc/containers/registries.conf.d/01-image-searchRegistries.conf- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - unqualified-search-registries = ['reg1.io', 'reg2.io', 'reg3.io'] - unqualified-search-registries = ['reg1.io', 'reg2.io', 'reg3.io']- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
9.2.5. イメージレジストリーアクセス用の追加のトラストストアの設定
					image.config.openshift.io/cluster カスタムリソースには、イメージレジストリーのアクセス時に信頼される追加の認証局が含まれる config map への参照を含めることができます。
				
前提条件
- 認証局 (CA) は PEM でエンコードされている。
手順
						openshift-config namespace で config map を作成し、image.config.openshift.io カスタムリソースの AdditionalTrustedCA でその名前を使用して、外部レジストリーにアクセスするときに信頼する必要がある追加の CA を提供できます。
					
config map のキーは、この CA を信頼するポートがあるレジストリーのホスト名であり、値は各追加レジストリー CA が信頼する証明書のコンテンツです。
イメージレジストリー CA の config map の例
- 1
- レジストリーにポートがある場合 (例:registry-with-port.example.com:5000)、:は..に置き換える必要があります。
以下の手順で追加の CA を設定できます。
- 追加の CA を設定するには、以下を実行します。 - oc create configmap registry-config --from-file=<external_registry_address>=ca.crt -n openshift-config - $ oc create configmap registry-config --from-file=<external_registry_address>=ca.crt -n openshift-config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - oc edit image.config.openshift.io cluster - $ oc edit image.config.openshift.io cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - spec: additionalTrustedCA: name: registry-config- spec: additionalTrustedCA: name: registry-config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow