9.3. イメージレジストリーの設定
image.config.openshift.io/cluster カスタムリソース (CR) を編集してイメージレジストリーの設定を行うことができます。
手順
以下のコマンドを実行して
image.config.openshift.io/clusterCR を編集します。$ oc edit image.config.openshift.io/cluster以下は、
image.config.openshift.io/clusterCR の例になります。apiVersion: config.openshift.io/v1 kind: Image metadata: annotations: release.openshift.io/create-only: "true" creationTimestamp: "2019-05-17T13:44:26Z" generation: 1 name: cluster resourceVersion: "8302" selfLink: /apis/config.openshift.io/v1/images/cluster uid: e34555da-78a9-11e9-b92b-06d6c7da38dc spec: allowedRegistriesForImport: - domainName: quay.io insecure: false additionalTrustedCA: name: myconfigmap registrySources: allowedRegistries: - example.com - quay.io - registry.redhat.io - image-registry.openshift-image-registry.svc:5000 - reg1.io/myrepo/myapp:latest insecureRegistries: - insecure.com status: internalRegistryHostname: image-registry.openshift-image-registry.svc:5000注記allowedRegistries、blockedRegistriesまたはinsecureRegistriesパラメーターを使用する場合、レジストリー内に個別のリポジトリーを指定できます。例:reg1.io/myrepo/myapp:latest起こりうるセキュリティーリスクを軽減するために、非セキュアな外部レジストリーの使用を避けてください。
検証
変更を確認するには、以下のコマンドを実行してノードを一覧表示します。
$ oc get nodes出力例
NAME STATUS ROLES AGE VERSION ip-10-0-137-182.us-east-2.compute.internal Ready,SchedulingDisabled worker 65m v1.32.3 ip-10-0-139-120.us-east-2.compute.internal Ready,SchedulingDisabled control-plane 74m v1.32.3 ip-10-0-176-102.us-east-2.compute.internal Ready control-plane 75m v1.32.3 ip-10-0-188-96.us-east-2.compute.internal Ready worker 65m v1.32.3 ip-10-0-200-59.us-east-2.compute.internal Ready worker 63m v1.32.3 ip-10-0-223-123.us-east-2.compute.internal Ready control-plane 73m v1.32.3
9.3.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 イメージレジストリーを含むすべてのレジストリーがブロックされます。ペイロードイメージが必要とするすべてのレジストリーを allowedRegistries 一覧に追加する必要があります。たとえば、registry.redhat.io、quay.io、および internalRegistryHostname レジストリーを一覧表示します。非接続クラスターの場合、ミラーレジストリーも追加する必要があります。そうしないと、Pod の障害が伴います。
手順
以下のコマンドを実行して、
image.config.openshift.io/clusterカスタムリソースを編集します。$ oc edit image.config.openshift.io/cluster以下は、許可リストを含む
image.config.openshift.io/clusterリソースの例になります。apiVersion: config.openshift.io/v1 kind: Image metadata: annotations: release.openshift.io/create-only: "true" creationTimestamp: "2019-05-17T13:44:26Z" generation: 1 name: cluster resourceVersion: "8302" selfLink: /apis/config.openshift.io/v1/images/cluster uid: e34555da-78a9-11e9-b92b-06d6c7da38dc spec: registrySources: allowedRegistries: - example.com - quay.io - registry.redhat.io - reg1.io/myrepo/myapp:latest - image-registry.openshift-image-registry.svc:5000 status: internalRegistryHostname: image-registry.openshift-image-registry.svc:5000設定の更新を行ったら、以下のコマンドを実行してノードを一覧表示します。
$ oc get nodes出力例
NAME STATUS ROLES AGE VERSION <node_name> Ready control-plane,master 37m v1.27.8+4fab27b次のコマンドを実行して、ノードでデバッグモードに入ります。
$ oc debug node/<node_name><node_name> はノード名に置き換えてください。
プロンプトが表示されたら、ターミナルに
chroot /hostを入力します。sh-4.4# chroot /host
検証
次のコマンドを実行して、レジストリーがポリシーファイルにあることを確認します。
sh-5.1# cat /etc/containers/policy.json | jq '.'以下のポリシーは、イメージのプルおよびプッシュで、
example.com、quay.io、およびregistry.redhat.ioレジストリーからのイメージにのみアクセスできることを示しています。イメージ署名ポリシーファイルの例
{ "default":[ { "type":"reject" } ], "transports":{ "atomic":{ "example.com":[ { "type":"insecureAcceptAnything" } ], "image-registry.openshift-image-registry.svc:5000":[ { "type":"insecureAcceptAnything" } ], "insecure.com":[ { "type":"insecureAcceptAnything" } ], "quay.io":[ { "type":"insecureAcceptAnything" } ], "reg4.io/myrepo/myapp:latest":[ { "type":"insecureAcceptAnything" } ], "registry.redhat.io":[ { "type":"insecureAcceptAnything" } ] }, "docker":{ "example.com":[ { "type":"insecureAcceptAnything" } ], "image-registry.openshift-image-registry.svc:5000":[ { "type":"insecureAcceptAnything" } ], "insecure.com":[ { "type":"insecureAcceptAnything" } ], "quay.io":[ { "type":"insecureAcceptAnything" } ], "reg4.io/myrepo/myapp:latest":[ { "type":"insecureAcceptAnything" } ], "registry.redhat.io":[ { "type":"insecureAcceptAnything" } ] }, "docker-daemon":{ "":[ { "type":"insecureAcceptAnything" } ] } } }注記クラスターが
registrySources.insecureRegistriesパラメーターを使用する場合、非セキュアなレジストリーが許可リストに含まれることを確認します。以下に例を示します。
spec: registrySources: insecureRegistries: - insecure.com allowedRegistries: - example.com - quay.io - registry.redhat.io - insecure.com - image-registry.openshift-image-registry.svc:5000
9.3.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以下は、ブロックリストを含む
image.config.openshift.io/clusterCR の例です。apiVersion: config.openshift.io/v1 kind: Image metadata: annotations: release.openshift.io/create-only: "true" creationTimestamp: "2019-05-17T13:44:26Z" generation: 1 name: cluster resourceVersion: "8302" selfLink: /apis/config.openshift.io/v1/images/cluster uid: e34555da-78a9-11e9-b92b-06d6c7da38dc spec: registrySources: blockedRegistries: - untrusted.com - reg1.io/myrepo/myapp:latest status: internalRegistryHostname: image-registry.openshift-image-registry.svc:5000blockedRegistriesおよびallowedRegistriesパラメーターの両方を設定することはできません。どちらか一方を選択する必要があります。次のコマンドを実行して、ノードの一覧を取得します。
$ oc get nodes出力例
NAME STATUS ROLES AGE VERSION <node_name> Ready control-plane,master 37m v1.27.8+4fab27b次のコマンドを実行し、ノード上でデバッグモードに入ります。
$ oc debug node/<node_name><node_name> は、詳細が必要なノードの名前に置き換えます。
プロンプトが表示されたら、ターミナルに
chroot /hostを入力します。sh-4.4# chroot /host
検証
次のコマンドを実行して、レジストリーがポリシーファイルにあることを確認します。
sh-5.1# cat etc/containers/registries.conf以下の例では、
untrusted.comレジストリーからのイメージがイメージのプルおよびプッシュでブロックされていることを示しています。出力例
unqualified-search-registries = ["registry.access.redhat.com", "docker.io"] [[registry]] prefix = "" location = "untrusted.com" blocked = true
9.3.3. ペイロードレジストリーのブロック リンクのコピーリンクがクリップボードにコピーされました!
ミラーリング設定では、ImageContentSourcePolicy (ICSP)オブジェクトを使用して、切断された環境でアップストリームペイロードレジストリーをブロックできます。以下の手順例は、quay.io/openshift-payload ペイロードレジストリーをブロックする方法を示しています。
手順
ImageContentSourcePolicy(ICSP) オブジェクトを使用してミラー設定を作成し、ペイロードをインスタンスのレジストリーにミラーリングします。以下の ICSP ファイルの例は、ペイロードinternal-mirror.io/openshift-payloadをミラーリングします。apiVersion: operator.openshift.io/v1alpha1 kind: ImageContentSourcePolicy metadata: name: my-icsp spec: repositoryDigestMirrors: - mirrors: - internal-mirror.io/openshift-payload source: quay.io/openshift-payloadオブジェクトがノードにデプロイされたら、
/etc/containers/registries.confカスタムリソース(CR)をチェックして、ミラー設定が設定されていることを確認します。出力例
[[registry]] prefix = "" location = "quay.io/openshift-payload" mirror-by-digest-only = true [[registry.mirror]] location = "internal-mirror.io/openshift-payload"以下のコマンドを使用して
image.config.openshift.ioCR を編集します。$ oc edit image.config.openshift.io clusterペイロードレジストリーをブロックするには、次の設定を
image.config.openshift.ioCR に追加します。spec: registrySources: blockedRegistries: - quay.io/openshift-payload
検証
ノードの
/etc/containers/registries.confファイルをチェックして、上流のペイロードレジストリーがブロックされていることを確認します。/etc/containers/registries.confファイルの例[[registry]] prefix = "" location = "quay.io/openshift-payload" blocked = true mirror-by-digest-only = true [[registry.mirror]] location = "internal-mirror.io/openshift-payload"
9.3.4. 非セキュアなレジストリー リンクのコピーリンクがクリップボードにコピーされました!
image.config.openshift.io/cluster カスタムリソース(CR)を編集して、非セキュアなレジストリー、またはレジストリー内に個別のリポジトリーを追加できます。
OpenShift Container Platform は、この CR への変更をクラスター内のすべてのノードに適用します。有効な SSL 証明書を使用しないレジストリー、または HTTPS 接続を必要としないレジストリーは、非セキュアであると見なされます。
起こりうるセキュリティーリスクを軽減するために、非セキュアな外部レジストリーの使用を避けてください。
+ :leveloffset: +1
allowedRegistries パラメーターを定義すると、明示的に一覧表示されない限り、registry.redhat.io、quay.io、およびデフォルトの OpenShift イメージレジストリーを含むすべてのレジストリーがブロックされます。ペイロードイメージが必要とするすべてのレジストリーを allowedRegistries 一覧に追加する必要があります。たとえば、registry.redhat.io、quay.io、および internalRegistryHostname レジストリーを一覧表示します。非接続クラスターの場合、ミラーレジストリーも追加する必要があります。そうしないと、Pod の障害が伴います。
手順
以下のコマンドを実行して、
image.config.openshift.io/clusterカスタムリソース(CR)を編集します。$ oc edit image.config.openshift.io/cluster以下は、非セキュアなレジストリーのリストを含む
image.config.openshift.io/clusterCR の例になります。apiVersion: config.openshift.io/v1 kind: Image metadata: annotations: release.openshift.io/create-only: "true" creationTimestamp: "2019-05-17T13:44:26Z" generation: 1 name: cluster resourceVersion: "8302" selfLink: /apis/config.openshift.io/v1/images/cluster uid: e34555da-78a9-11e9-b92b-06d6c7da38dc spec: registrySources: insecureRegistries: - insecure.com - reg4.io/myrepo/myapp:latest allowedRegistries: - example.com - quay.io - registry.redhat.io - insecure.com - reg4.io/myrepo/myapp:latest - image-registry.openshift-image-registry.svc:5000 status: internalRegistryHostname: image-registry.openshift-image-registry.svc:5000
検証
ノードで以下のコマンドを実行して、レジストリーがポリシーファイルに追加されていることを確認します。
$ cat /etc/containers/registries.conf以下の例は、
insecure.comレジストリーからのイメージが非セキュアであり、イメージのプルおよびプッシュで許可されることを示しています。出力例
unqualified-search-registries = ["registry.access.redhat.com", "docker.io"] [[registry]] prefix = "" location = "insecure.com" insecure = true