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 パラメーターでレジストリーの一覧を作成している場合、コンテナーランタイムはそれらのレジストリーを検索します。

警告

パブリックレジストリーでイメージの短縮名を使用することは推奨されません。内部レジストリーまたはプライベートレジストリーでのみイメージの短縮名を使用する必要があります。

containerRuntimeSearchRegistries パラメーターにパブリックレジストリーを一覧表示する場合、一覧のすべてのレジストリーを公開することになり、ネットワークおよびレジストリーの攻撃にされされるリスクが生じます。パブリックレジストリーでは常に完全修飾イメージ名を使用する必要があります。

Machine Config Operator (MCO) は、image.config.openshift.io/cluster リソースでレジストリーへの変更の有無を監視します。MCO が変更を検出すると、これはノードをドレイン (解放) し、その変更を適用してノードの遮断を解除します。ノードが Ready 状態に戻った後に、containerRuntimeSearchRegistries パラメーターが追加されると、MCO は一覧表示されるレジストリーで各ノードの /etc/containers/registries.conf.d ディレクトリーにファイルを作成します。このファイルは、/host/etc/containers/registries.conf ファイルの非修飾検索レジストリーのデフォルト一覧を上書きします。修飾されていない検索レジストリーのデフォルト一覧にフォールバックする方法はありません。

containerRuntimeSearchRegistries パラメーターは、Podman および CRI-O コンテナーエンジンを使用する場合のみ機能します。一覧のレジストリーは、ビルドおよびイメージストリームではなく、Pod 仕様でのみ使用できます。

手順

  1. image.config.openshift.io/cluster カスタムリソースを編集します。

    $ oc edit image.config.openshift.io/cluster

    以下は、image.config.openshift.io/cluster CR の例になります。

    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:
        containerRuntimeSearchRegistries: 1
        - reg1.io
        - reg2.io
        - reg3.io
        allowedRegistries: 2
        - example.com
        - quay.io
        - registry.redhat.io
        - reg1.io
        - reg2.io
        - reg3.io
        - image-registry.openshift-image-registry.svc:5000
    ...
    status:
      internalRegistryHostname: image-registry.openshift-image-registry.svc:5000
    1
    イメージの短縮名で使用するレジストリーを指定します。セキュリティー上のリスクが発生する可能性を軽減するために、内部レジストリーまたはプライベートレジストリーでのみイメージの短縮名を使用する必要があります。
    2
    containerRuntimeSearchRegistries に一覧表示されるレジストリーが allowedRegistries 一覧に含まれることを確認します。
    注記

    allowedRegistries パラメーターが定義されると、明示的に一覧表示されない限り、registry.redhat.io レジストリーと quay.io レジストリー、およびデフォルトの内部イメージレジストリーを含むすべてのレジストリーがブロックされます。このパラメーターを使用する場合は、Pod の失敗を防ぐために、registry.redhat.io レジストリーと quay.io レジストリー、および internalRegistryHostname を含むすべてのレジストリーを allowedRegistries 一覧に追加します。これらは、お使いの環境内のペイロードイメージで必要とされます。非接続クラスターの場合、ミラーレジストリーも追加する必要があります。

  2. レジストリーが追加されていることを確認するには、ノードが Ready 状態に戻ったときに、ノードで以下のコマンドを使用します。

    $ cat /host/etc/containers/registries.conf.d/01-image-searchRegistries.conf

    出力例

    unqualified-search-registries = ['reg1.io', 'reg2.io', 'reg3.io']